diff --git a/parser/parser-gaussian/parser_gaussian.py b/parser/parser-gaussian/parser_gaussian.py index 017d15e13260c8740ca1a5756421fb579e8761d9..985f9af7f3f97ed0545bdd8f760ac6b078888eb0 100644 --- a/parser/parser-gaussian/parser_gaussian.py +++ b/parser/parser-gaussian/parser_gaussian.py @@ -1,24 +1,25 @@ import setup_paths -from nomadcore.simple_parser import SimpleMatcher, mainFunction +from nomadcore.simple_parser import mainFunction, SimpleMatcher as SM from nomadcore.local_meta_info import loadJsonFile, InfoKindEl import os, sys, json # description of the input -mainFileDescription = SimpleMatcher(name = 'root', - weak = True, - startReStr = "", - subMatchers = [ - SimpleMatcher(name = 'newRun', - startReStr = r"\s*# SampleParser #\s*", - repeats = True, - required = True, - forwardMatch = True, - sections = ['section_run'], - subMatchers = [ - SimpleMatcher(name = 'header', +mainFileDescription = SM( + name = 'root', + weak = True, + startReStr = "", + subMatchers = [ + SM(name = 'newRun', + startReStr = r"\s*# SampleParser #\s*", + repeats = True, + required = True, + forwardMatch = True, + sections = ['section_run'], + subMatchers = [ + SM(name = 'header', startReStr = r"\s*# SampleParser #\s*") - ]) - ]) + ]) +]) # loading metadata from nomad-meta-info/meta_info/nomad_meta_info/gaussian.nomadmetainfo.json metaInfoPath = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"../../../../nomad-meta-info/meta_info/nomad_meta_info/gaussian.nomadmetainfo.json")) @@ -29,8 +30,29 @@ parserInfo = { "version": "1.0" } -# default unit conversions (actually it might be better to use the sourceUnits argument of the SimpleMatcher) -defaultSourceUnits = {} +class GaussianParserContext(object): + """main place to keep the parser status, open ancillary files,...""" + def __init__(self): + self.scfIterNr = 0 + + # just examples, you probably want to remove the following two triggers + + def onClose_section_single_point_evaluation(self, backend, gIndex, section): + """trigger called when section_single_point_evaluation is closed""" + #backend.addValue("", self.scfIterNr) + logging.getLogger("nomadcore.parsing").info("closing section_single_point_evaluation gIndex %d %s", gIndex, section.simpleValues) + self.scfIterNr = 0 + + def onClose_section_scf_iteration(self, backend, gIndex, section): + """trigger called when section_scf_iteration is closed""" + logging.getLogger("nomadcore.parsing").info("closing section_scf_iteration bla gIndex %d %s", gIndex, section.simpleValues) + self.scfIterNr += 1 + +# which values to cache or forward (mapping meta name -> CachingLevel) +cachingLevelForMetaName = {} if __name__ == "__main__": - mainFunction(mainFileDescription, metaInfoEnv, parserInfo, defaultSourceUnits = defaultSourceUnits) + mainFunction(mainFileDescription, metaInfoEnv, parserInfo, + cachingLevelForMetaName = cachingLevelForMetaName, + superContext = GaussianParserContext(), + )