Source code for aiida_vasp.parsers.content_parsers.chgcar
"""
The ``CHGCAR`` parser interface.
--------------------------------
Contains the parsing interfaces to ``parsevasp`` used to parse ``CHGCAR`` content.
"""
# pylint: disable=abstract-method
from parsevasp.chgcar import Chgcar
from aiida_vasp.parsers.content_parsers.base import BaseFileParser
[docs]
class ChgcarParser(BaseFileParser):
"""The parser interface that enables parsing of ``CHGCAR`` content.
The parser is triggered by using the ``charge_density`` and/or ``magnetization_density`` quantity key.
"""
DEFAULT_SETTINGS = {'quantities_to_parse': ['charge_density']}
PARSABLE_QUANTITIES = {
'charge_density': {
'inputs': [],
'name': 'charge_density',
'prerequisites': []
},
'magnetization_density': {
'inputs': [],
'name': 'magnetization_density',
'prerequisites': []
}
}
def _init_from_handler(self, handler):
"""Initialize a ``parsevasp`` object of ``Chgcar`` using a file like handler.
Parameters
----------
handler : object
A file like object that provides the necessary ``CHGCAR`` content to be parsed.
"""
try:
self._content_parser = Chgcar(file_handler=handler, logger=self._logger)
except SystemExit:
self._logger.warning('Parsevasp exited abnormally.')
@property
def charge_density(self):
"""
Return the charge density.
Returns
-------
charge_density : ndarray
A NumPy array containing the charge density in the unit cell in C order.
"""
charge_density = self._content_parser.charge_density
if charge_density is None:
return None
charge_density = {'charge_density': charge_density}
return charge_density
@property
def magnetization_density(self):
"""
Return the magnetization density.
Returns
-------
magnetization_density : dict or ndarray
If collinear spin calculations have been performed, a NumPy array containing
the magnetization density in the unit cell in C order is returned. If however
a non-collinear spin calculation have been performed, a dictionary is returned
with keys `x`, `y` and `z`, each containing the same NumPy array, but for each
direction.
"""
magnetization_density = self._content_parser.magnetization_density
if magnetization_density is None:
return None
magnetization_density = {'magnetization_density': magnetization_density}
return magnetization_density