Skip to content

Commit 4b60d57

Browse files
authored
Exciting mapping parser (#2)
* Initial exciting parser * Fix commit * Add more quantities * Rename schema package * Add files
1 parent 8eb6cb7 commit 4b60d57

File tree

10 files changed

+1300
-21
lines changed

10 files changed

+1300
-21
lines changed

.gitignore

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
# Byte-compiled / optimized / DLL files
2+
__pycache__/
3+
*.py[cod]
4+
*$py.class
5+
6+
# C extensions
7+
*.so
8+
9+
# Distribution / packaging
10+
.Python
11+
build/
12+
develop-eggs/
13+
dist/
14+
downloads/
15+
eggs/
16+
.eggs/
17+
lib/
18+
lib64/
19+
parts/
20+
sdist/
21+
var/
22+
wheels/
23+
pip-wheel-metadata/
24+
share/python-wheels/
25+
*.egg-info/
26+
.installed.cfg
27+
*.egg
28+
MANIFEST
29+
30+
# PyInstaller
31+
# Usually these files are written by a python script from a template
32+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
33+
*.manifest
34+
*.spec
35+
36+
# Installer logs
37+
pip-log.txt
38+
pip-delete-this-directory.txt
39+
40+
# Unit test / coverage reports
41+
htmlcov/
42+
.tox/
43+
.nox/
44+
.coverage
45+
.coverage.*
46+
.cache
47+
nosetests.xml
48+
coverage.xml
49+
*.cover
50+
*.py,cover
51+
.hypothesis/
52+
.pytest_cache/
53+
54+
# Translations
55+
*.mo
56+
*.pot
57+
58+
# Django stuff:
59+
*.log
60+
local_settings.py
61+
db.sqlite3
62+
db.sqlite3-journal
63+
64+
# Flask stuff:
65+
instance/
66+
.webassets-cache
67+
68+
# Scrapy stuff:
69+
.scrapy
70+
71+
# Sphinx documentation
72+
docs/_build/
73+
74+
# PyBuilder
75+
target/
76+
77+
# Jupyter Notebook
78+
.ipynb_checkpoints
79+
80+
# IPython
81+
profile_default/
82+
ipython_config.py
83+
84+
# pyenv
85+
.python-version
86+
87+
# pipenv
88+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
90+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
91+
# install all needed dependencies.
92+
#Pipfile.lock
93+
94+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
95+
__pypackages__/
96+
97+
# Celery stuff
98+
celerybeat-schedule
99+
celerybeat.pid
100+
101+
# SageMath parsed files
102+
*.sage.py
103+
104+
# Environments
105+
.env
106+
.venv
107+
env/
108+
venv/
109+
ENV/
110+
env.bak/
111+
venv.bak/
112+
.pyenv
113+
114+
# Spyder project settings
115+
.spyderproject
116+
.spyproject
117+
118+
# Rope project settings
119+
.ropeproject
120+
121+
# mkdocs documentation
122+
/site
123+
124+
# mypy
125+
.mypy_cache/
126+
.dmypy.json
127+
dmypy.json
128+
129+
# Pyre type checker
130+
.pyre/

pyproject.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ dynamic = ["version"]
1919
readme = "README.md"
2020
requires-python = ">=3.9"
2121
authors = [
22-
{ name = "Esma B. Boydas, email = "esma.boydas@physik.hu-berlin.de" },
22+
{ name = "Esma B. Boydas", email = "esma.boydas@physik.hu-berlin.de" },
2323
{ name = "Nathan Daelman", email = "ndaelman@physik.hu-berlin.de" },
2424
{ name = "Alvin N. Ladines", email = "ladinesa@physik.hu-berlin.de" },
2525
{ name = "Bernadette Mohr", email = "mohrbern@physik.hu-berlin.de" },
@@ -120,8 +120,8 @@ where = ["src"]
120120
[tool.setuptools_scm]
121121

122122
[project.entry-points.'nomad.plugin']
123-
parser_entry_point = "nomad_simulation_parsers.parsers:parser_entry_point"
124-
schema_package_entry_point = "nomad_simulation_parsers.schema_packages:schema_package_entry_point"
123+
exciting_parser_entry_point = "nomad_simulation_parsers.parsers:exciting_parser_entry_point"
124+
exciting_schema_package_entry_point = "nomad_simulation_parsers.schema_packages:exciting_schema_package_entry_point"
125125

126126

127127

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
11
from nomad.config.models.plugins import ParserEntryPoint
2-
from pydantic import Field
32

43

5-
class NewParserEntryPoint(ParserEntryPoint):
6-
parameter: int = Field(0, description='Custom configuration parameter')
7-
4+
class EntryPoint(ParserEntryPoint):
85
def load(self):
9-
from nomad_simulation_parsers.parsers.parser import NewParser
6+
from nomad.parsing.parser import MatchingParserInterface
107

11-
return NewParser(**self.dict())
8+
return MatchingParserInterface(
9+
parser_class_name='nomad_simulation_parsers.parsers.exciting.parser.ExcitingParser',
10+
**self.dict(),
11+
)
1212

1313

14-
parser_entry_point = NewParserEntryPoint(
15-
name='NewParser',
16-
description='New parser entry point configuration.',
17-
mainfile_name_re='.*\.newmainfilename',
14+
exciting_parser_entry_point = EntryPoint(
15+
name='parsers/exciting',
16+
aliases=['parsers/exciting'],
17+
description='NOMAD parser for EXCITING.',
18+
python_package='nomad_simulation_parsers',
19+
mainfile_contents_re=r'EXCITING.*started[\s\S]+?All units are atomic ',
20+
mainfile_name_re=r'^.*.OUT(\.[^/]*)?$',
21+
code_name='exciting',
22+
code_homepage='http://exciting-code.org/',
1823
)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import numpy as np
2+
from nomad.parsing.file_parser.text_parser import Quantity, TextParser
3+
4+
5+
def str_to_eigenvalues(val_in: str) -> dict[str, np.ndarray]:
6+
val = val_in[: val_in.rfind('\n \n')].strip()
7+
val = np.array([v.split() for v in val.split('\n')], dtype=float)
8+
val = np.transpose(val)
9+
occs = val[-1]
10+
eigs = val[-2]
11+
12+
tol = 0.1
13+
nspin = 1 if np.any(occs > 1 + tol) else 2
14+
data = dict()
15+
data['occupancies'] = np.reshape(occs, (nspin, len(occs) // nspin))
16+
data['eigenvalues'] = np.reshape(eigs, (nspin, len(eigs) // nspin))
17+
return data
18+
19+
20+
class EigvalReader(TextParser):
21+
def init_quantities(self):
22+
self._quantities = [
23+
Quantity('k_points', r'\s*\d+\s*([\d\.Ee\- ]+):\s*k\-point', repeats=True),
24+
Quantity(
25+
'eigenvalues_occupancies',
26+
r'\(state\, eigenvalue and occupancy below\)\s*'
27+
r'([\d\.Ee\-\s]+?(?:\n *\n))',
28+
str_operation=str_to_eigenvalues,
29+
repeats=True,
30+
),
31+
Quantity('n_k_points', r'(\d+) +\: +nkpt', dtype=int),
32+
Quantity('n_states', r'(\d+) +\: +nstsv', dtype=int),
33+
]

0 commit comments

Comments
 (0)