from builtins import object import setup_paths from nomadcore.simple_parser import mainFunction, AncillaryParser, CachingLevel from nomadcore.simple_parser import SimpleMatcher as SM from nomadcore.local_meta_info import loadJsonFile, InfoKindEl import os, sys, json class ElkContext(object): """context for elk parser""" def __init__(self): self.parser = None def initialize_values(self): """allows to reset values if the same superContext is used to parse different files""" self.metaInfoEnv = self.parser.parserBuilder.metaInfoEnv def startedParsing(self, path, parser): """called when parsing starts""" self.parser = parser # allows to reset values if the same superContext is used to parse different files self.initialize_values() # description of the input mainFileDescription = SM( name = 'root', weak = True, startReStr = "", subMatchers = [ SM(name = 'newRun', startReStr = r"\s*:LABEL[0-9]+: using WIEN2k_(?:[0-9.]+) \(Release (?:[0-9/.]+)\) in ", repeats = True, required = True, forwardMatch = True, sections = ['section_run', 'section_method', 'section_system', 'section_single_configuration_calculation'], subMatchers = [ SM( name = 'header', startReStr = r"\s*:LABEL[0-9]+: using WIEN2k_(?P[0-9.]+) \(Release (?P[0-9/.]+)\) in ", sections=["x_wien2k_header"], fixedStartValues={'program_name': 'WIEN2k', 'program_basis_set_type': '(L)APW+lo' } ), SM( name = "scf iteration", startReStr = r"\s*:ITE(?P[0-9]+):\s*[0-9]*. ITERATION", sections=["section_scf_iteration"], repeats = True, subMatchers=[ SM(r":NATO :\s*(?P[0-9]+)INDEPENDENT AND\s*(?P[0-9]+)\s*TOTAL ATOMS IN UNITCELL"), SM(r"\s*SUBSTANCE: (?P.*)"), SM(r":POT\s*:\s*POTENTIAL OPTION\s*(?P[0-9]+)"), SM(r":VOL\s*:\s*UNIT CELL VOLUME\s*=\s*(?P[0-9.]+)") ] ) ] ) ]) # loading metadata from nomad-meta-info/meta_info/nomad_meta_info/fhi_aims.nomadmetainfo.json parserInfo = { "name": "Elk" } metaInfoPath = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"../../../../nomad-meta-info/meta_info/nomad_meta_info/elk.nomadmetainfo.json")) metaInfoEnv, warnings = loadJsonFile(filePath = metaInfoPath, dependencyLoader = None, extraArgsHandling = InfoKindEl.ADD_EXTRA_ARGS, uri = None) if __name__ == "__main__": superContext = ElkContext() mainFunction(mainFileDescription, metaInfoEnv, parserInfo, superContext = superContext)