Skip to content

Commit

Permalink
- Update compability to new MatchingParserInterface and `ParserEntr…
Browse files Browse the repository at this point in the history
…yPoint`

- TODO: fix empty extraction
  • Loading branch information
ndaelman committed Sep 11, 2024
1 parent 087438b commit 2f7d42a
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 27 deletions.
2 changes: 1 addition & 1 deletion src/nomad_parser_vasp/parsers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class VasprunXMLEntryPoint(ParserEntryPoint):
def load(self):
from nomad_parser_vasp.parsers.xml_parser import VasprunXMLParser

return VasprunXMLParser(**self.dict())
return VasprunXMLParser('nomad_parser_vasp/parser/xml_parser.py/VasprunXMLParser', **self.dict())


xml_entry_point = VasprunXMLEntryPoint(
Expand Down
8 changes: 5 additions & 3 deletions src/nomad_parser_vasp/parsers/xml_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,19 @@
)

from nomad.config import config
from nomad.parsing import MatchingParser
from nomad.parsing import MatchingParserInterface
from nomad.parsing.file_parser.mapping_parser import (
MetainfoParser,
XMLParser,
)
from schema_packages.vasp_package import Simulation
from nomad_parser_vasp.schema_packages.vasp_package import Simulation

configuration = config.get_plugin_entry_point(
'nomad_parser_vasp.parsers:xml_entry_point'
)


class VasprunXMLParser(MatchingParser):
class VasprunXMLParser(MatchingParserInterface):
def parse(
self,
mainfile: str,
Expand All @@ -27,6 +27,8 @@ def parse(
child_archives: dict[str, EntryArchive] = None,
) -> None:
logger.info('VasprunXMLParser.parse', parameter=configuration.parameter)
mix_alpha = staticmethod(lambda mix, cond: mix if cond else 0)

data_parser = MetainfoParser(annotation_key='xml', data_object=Simulation())
XMLParser(filepath=mainfile).convert(data_parser)
archive.data = data_parser.data_object
46 changes: 23 additions & 23 deletions src/nomad_parser_vasp/schema_packages/vasp_package.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,119 +38,119 @@
path='.calculation'
)

Simulation.model_system.cell.m_annotations['xml'] = MappingAnnotationModel(
ModelSystem.cell.m_annotations['xml'] = MappingAnnotationModel(
path='.structure'
)

Simulation.outputs.m_annotations['xml'] = MappingAnnotationModel(path='.calculation')

Program.name.m_annotations['xml'] = MappingAnnotationModel(
path='.i[?"@name"="program"]'
path='.i[?"@name"=="program"]'
)

Program.version.m_annotations['xml'] = MappingAnnotationModel(
path='.i[?"@name"="version"]'
path='.i[?"@name"=="version"]'
)

# ? compilation mode
Program.compilation_host.m_annotations['xml'] = MappingAnnotationModel(
path='.i[?"@name"="platform"]'
path='.i[?"@name"=="platform"]'
)

DFT.numerical_settings.m_annotations['xml'] = MappingAnnotationModel(
path='modeling.kpoints'
)

dft_path = '.separator[?"@name"="electronic exchange-correlation"]'
dft_path = '.separator[?"@name"=="electronic exchange-correlation"]'
DFT.xc_functionals.m_annotations['xml'] = MappingAnnotationModel(
path=dft_path
) # start from Simulation.model_method path

DFT.exact_exchange_mixing_factor.m_annotations = dict(
xml=MappingAnnotationModel(
operator=(
lambda mix, cond: mix if cond else 0,
[dft_path + '.i[?"@name"="HFALPHA"]', dft_path + '.i[?"@name"="LHFCALC"]'],
'mix_alpha',
[dft_path + '.i[?"@name"=="HFALPHA"]', dft_path + '.i[?"@name"=="LHFCALC"]'],
)
) # TODO convert vasp bool
)

XCFunctional.libxc_name.m_annotations = dict(
xml=MappingAnnotationModel(
path=dft_path + '.i[?"@name"="GGA"]' # TODO add LDA & mGGA, convert_xc
path=dft_path + '.i[?"@name"=="GGA"]' # TODO add LDA & mGGA, convert_xc
)
)

KMesh.grid.m_annotations['xml'] = MappingAnnotationModel(
path='.generation.v[?"@name"="divisions"]'
path='.generation.v[?"@name"=="divisions"]'
) # start from DFT.numerical_settings

KMesh.offset.m_annotations['xml'] = MappingAnnotationModel(
path='.generation.v[?"@name"="shift"]'
path='.generation.v[?"@name"=="shift"]'
) # start from DFT.numerical_settings

KMesh.offset.m_annotations['xml'] = MappingAnnotationModel(
path='.generation.v[?"@name"="shift"]'
path='.generation.v[?"@name"=="shift"]'
) # start from DFT.numerical_settings

KMesh.points.m_annotations['xml'] = MappingAnnotationModel(
path='.varray[?"@name"="kpointlist"].v'
path='.varray[?"@name"=="kpointlist"].v'
) # start from DFT.numerical_settings

KMesh.weights.m_annotations['xml'] = MappingAnnotationModel(
path='.varray[?"@name"="weights"].v'
path='.varray[?"@name"=="weights"].v'
) # start from DFT.numerical_settings


# ? target <structure name="initialpos" > and <structure name="finalpos" >


AtomicCell.positions.m_annotations = dict(
xml=MappingAnnotationModel(path='.varray[?"@name"="positions"]')
xml=MappingAnnotationModel(path='.varray[?"@name"=="positions"]')
) # start from Simulation.model_system.cell path

"""
...forces.m_annotations['xml'] = MappingAnnotationModel(
path='.varray[?"@name"="forces"]'
path='.varray[?"@name"=="forces"]'
) # start from Simulation.model_system.cell path
...stress.m_annotations['xml'] = MappingAnnotationModel(
path='.varray[?"@name"="stress"]'
path='.varray[?"@name"=="stress"]'
) # start from Simulation.model_system.cell path
"""

AtomicCell.lattice_vectors.m_annotations['xml'] = MappingAnnotationModel(
path='.crystal.varray[?"@name"="basis"]'
path='.crystal.varray[?"@name"=="basis"]'
) # start from Simulation.model_system.cell path

"""
cell_volume.m_annotations['xml'] = MappingAnnotationModel(
path='.crystal.i[?"@name"="volume"]'
path='.crystal.i[?"@name"=="volume"]'
) # start from Simulation.model_system.cell path
reciprocal_lattice_vectors.m_annotations['xml'] = MappingAnnotationModel(
path='.crystal.varray[?"@name"="rec_basis"]'
path='.crystal.varray[?"@name"=="rec_basis"]'
) # start from Simulation.model_system.cell path
total_free_energy.m_annotations['xml'] = MappingAnnotationModel(
path='calculation.energy.i[?"@name"="e_fr_energy"]'
path='calculation.energy.i[?"@name"=="e_fr_energy"]'
)
total_internal_energy.m_annotations['xml'] = MappingAnnotationModel(
path='calculation.energy.i[?"@name"="e_0_energy"]'
path='calculation.energy.i[?"@name"=="e_0_energy"]'
)
...eigenvalues.m_annotations['xml'] = MappingAnnotationModel(
path='.eigenvalues.array'
)
ElectronicEigenvalues.spin_channel.m_annotations['xml'] = MappingAnnotationModel(
path='.eigenvalues.set.set[?"@comment"="spin 1"]'
path='.eigenvalues.set.set[?"@comment"=="spin 1"]'
) # start from Simulation.outputs path
ElectronicEigenvalues.reciprocal_cell.m_annotations['xml'] = MappingAnnotationModel(
path=ElectronicEigenvalues.spin_channel.m_annotations.xml
+ '.set[?"@comment"="kpoint 1"]'
+ '.set[?"@comment"=="kpoint 1"]'
) # TODO not going to work: add conversion to reference
ElectronicEigenvalues.occupation.m_annotations['xml'] = MappingAnnotationModel(
Expand Down

0 comments on commit 2f7d42a

Please sign in to comment.