Source code for aiida_vasp.parsers.content_parsers.incar
"""
The ``INCAR`` parser interface.
---------------------------
Contains the parsing interfaces to parsevasp used to parse ``INCAR`` content.
"""
from parsevasp.incar import Incar
from aiida_vasp.parsers.content_parsers.base import BaseFileParser
from aiida_vasp.utils.aiida_utils import get_data_class
[docs]
class IncarParser(BaseFileParser):
"""The parser interface that enables parsing of ``INCAR`` content.
The parser is triggered by using the ``incar`` quantity key.
"""
DEFAULT_SETTINGS = {'quantities_to_parse': ['incar']}
PARSABLE_QUANTITIES = {
'incar': {
'inputs': [],
'name': 'incar',
'prerequisites': []
},
}
def __init__(self, *args, validate_tags=True, **kwargs):
self._validate_tags = validate_tags
super().__init__(*args, **kwargs)
def _init_from_handler(self, handler):
"""Initialize a ``parsevasp`` object of ``Incar`` using a file like handler.
Parameters
----------
handler : object
A file like object that provides the necessary ``INCAR`` content to be parsed.
"""
try:
self._content_parser = Incar(file_handler=handler, logger=self._logger, validate_tags=self._validate_tags)
except SystemExit:
self._logger.warning('Parsevasp exited abnormally.')
def _init_from_data(self, data):
"""Initialize using an AiiDA ``Dict`` instance.
Parameters
----------
data : object
A valid AiiDA ``Dict`` object.
"""
if isinstance(data, get_data_class('core.dict')):
self._content_data = data
else:
raise TypeError('The supplied AiiDA data structure is not a Dict.')
@property
def incar(self):
"""Return the parameters in the ``INCAR``.
Returns
-------
params : dict or None
A dictionary containing the parameter tags as keys and its settings as values.
``None`` is returned if the quantity can not be parsed.
"""
if self._content_parser is not None:
params = self._content_parser.get_dict()
return params
return None
def _content_data_to_content_parser(self):
"""
Convert an AiiDA ``Dict`` to a content parser instance of ``Incar`` from ``parsevasp``.
Returns
-------
content_parser : object
An instance of ``Incar`` from ``parsevasp``.
"""
dictionary = self._content_data.get_dict()
# We brake hard if ``parsevasp`` fail here. If we can not write we will not try another parser.
content_parser = Incar(incar_dict=dictionary, logger=self._logger, validate_tags=self._validate_tags)
return content_parser