From 9c2c17fac49bedaa66af925a2332b2379fb2aa3d Mon Sep 17 00:00:00 2001 From: Alvin Noe Ladines <ladinesalvinnoe@gmail.com> Date: Tue, 27 Oct 2020 16:09:59 +0100 Subject: [PATCH] Restructured parser to perform single init --- lammpsparser/__init__.py | 19 +------------- lammpsparser/lammps_parser.py | 47 ++++++++++++++++++++++++----------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/lammpsparser/__init__.py b/lammpsparser/__init__.py index 7688b31..e102bd3 100644 --- a/lammpsparser/__init__.py +++ b/lammpsparser/__init__.py @@ -1,18 +1 @@ -from .metainfo import m_env - -from nomad.parsing.parser import FairdiParser -from lammpsparser.lammps_parser import LammpsOutput - - -class LammpsParser(FairdiParser): - def __init__(self): - super().__init__( - name='parsers/lammps', code_name='LAMMPS', code_homepage='https://lammps.sandia.gov/', - domain='dft', mainfile_contents_re=r'^LAMMPS') - - def parse(self, filepath, archive, logger=None): - self._metainfo_env = m_env - - parser = LammpsOutput(filepath, archive, logger) - - parser.parse() +from lammpsparser.lammps_parser import LammpsParser diff --git a/lammpsparser/lammps_parser.py b/lammpsparser/lammps_parser.py index 6ccbdc7..c92e558 100644 --- a/lammpsparser/lammps_parser.py +++ b/lammpsparser/lammps_parser.py @@ -4,6 +4,9 @@ import logging from ase import data as asedata import pint +from .metainfo import m_env +from nomad.parsing.parser import FairdiParser + from nomad.parsing.text_parser import Quantity, UnstructuredTextFileParser from nomad.datamodel.metainfo.public import section_run, section_sampling_method,\ section_system, section_single_configuration_calculation, section_energy_contribution,\ @@ -83,7 +86,7 @@ def get_unit(units_type, property_type=None, dimension=3): class DataParser(UnstructuredTextFileParser): - def __init__(self, mainfile, logger): + def __init__(self): self._headers = [ 'atoms', 'bonds', 'angles', 'dihedrals', 'impropers', 'atom types', 'bond types', 'angle types', 'dihedral types', 'improper types', 'extra bond per atom', @@ -101,7 +104,7 @@ class DataParser(UnstructuredTextFileParser): 'BondBond13 Coeffs', 'AngleAngle Coeffs'] self._interactions = [ section for section in self._sections if section.endswith('Coeffs')] - super().__init__(mainfile, logger=logger) + super().__init__(None) def init_quantities(self): self._quantities = [] @@ -151,13 +154,13 @@ class DataParser(UnstructuredTextFileParser): class TrajParser(UnstructuredTextFileParser): - def __init__(self, mainfile, logger): + def __init__(self): self._masses = None self._reference_masses = dict( masses=np.array(asedata.atomic_masses), symbols=asedata.chemical_symbols) self._chemical_symbols = None self._units = None - super().__init__(mainfile, logger=logger) + super().__init__(None) def init_quantities(self): @@ -289,7 +292,7 @@ class TrajParser(UnstructuredTextFileParser): class LogParser(UnstructuredTextFileParser): - def __init__(self, mainfile, logger): + def __init__(self): self._commands = [ 'angle_coeff', 'angle_style', 'atom_modify', 'atom_style', 'balance', 'bond_coeff', 'bond_style', 'bond_write', 'boundary', 'change_box', 'clear', @@ -314,7 +317,7 @@ class LogParser(UnstructuredTextFileParser): 'atom', 'pair', 'bond', 'angle', 'dihedral', 'improper', 'kspace'] self._thermo_data = None self._units = None - super().__init__(mainfile, logger=logger) + super().__init__(None) def init_quantities(self): def str_op(val): @@ -509,14 +512,16 @@ class LogParser(UnstructuredTextFileParser): return self._thermo_data is not None -class LammpsOutput: - def __init__(self, filepath, archive, logger=None): - self.filepath = filepath - self.archive = archive - self.logger = logger if logger is not None else logging - self.log_parser = LogParser(filepath, self.logger) - self.traj_parser = TrajParser(None, self.logger) - self.data_parser = DataParser(None, self.logger) +class LammpsParser(FairdiParser): + def __init__(self): + super().__init__( + name='parsers/lammps', code_name='LAMMPS', code_homepage='https://lammps.sandia.gov/', + domain='dft', mainfile_contents_re=r'^LAMMPS') + + self._metainfo_env = m_env + self.log_parser = LogParser() + self.traj_parser = TrajParser() + self.data_parser = DataParser() def parse_thermodynamic_data(self): thermo_data = self.log_parser.get_thermodynamic_data() @@ -705,7 +710,19 @@ class LammpsOutput: val = ' '.join([str(v) for v in val]) setattr(sec_control_parameters, key, str(val)) - def parse(self): + def _init_parsers(self): + self.log_parser.mainfile = self.filepath + self.log_parser.logger = self.logger + self.traj_parser.logger = self.logger + self.data_parser.logger = self.logger + + def parse(self, filepath, archive, logger): + self.filepath = filepath + self.archive = archive + self.logger = logger if logger is not None else logging + + self._init_parsers() + sec_run = self.archive.m_create(section_run) # parse basic -- GitLab