diff --git a/H2O/0_NORMAL_EXIT b/parser/parser-siesta/H2O/0_NORMAL_EXIT similarity index 100% rename from H2O/0_NORMAL_EXIT rename to parser/parser-siesta/H2O/0_NORMAL_EXIT diff --git a/H2O/BASIS_ENTHALPY b/parser/parser-siesta/H2O/BASIS_ENTHALPY similarity index 100% rename from H2O/BASIS_ENTHALPY rename to parser/parser-siesta/H2O/BASIS_ENTHALPY diff --git a/H2O/BASIS_HARRIS_ENTHALPY b/parser/parser-siesta/H2O/BASIS_HARRIS_ENTHALPY similarity index 100% rename from H2O/BASIS_HARRIS_ENTHALPY rename to parser/parser-siesta/H2O/BASIS_HARRIS_ENTHALPY diff --git a/H2O/CLOCK b/parser/parser-siesta/H2O/CLOCK similarity index 100% rename from H2O/CLOCK rename to parser/parser-siesta/H2O/CLOCK diff --git a/H2O/FORCE_STRESS b/parser/parser-siesta/H2O/FORCE_STRESS similarity index 100% rename from H2O/FORCE_STRESS rename to parser/parser-siesta/H2O/FORCE_STRESS diff --git a/H2O/H.ion b/parser/parser-siesta/H2O/H.ion similarity index 100% rename from H2O/H.ion rename to parser/parser-siesta/H2O/H.ion diff --git a/H2O/H.ion.xml b/parser/parser-siesta/H2O/H.ion.xml similarity index 100% rename from H2O/H.ion.xml rename to parser/parser-siesta/H2O/H.ion.xml diff --git a/H2O/H.psf b/parser/parser-siesta/H2O/H.psf similarity index 100% rename from H2O/H.psf rename to parser/parser-siesta/H2O/H.psf diff --git a/H2O/INPUT_TMP.95611 b/parser/parser-siesta/H2O/INPUT_TMP.95611 similarity index 100% rename from H2O/INPUT_TMP.95611 rename to parser/parser-siesta/H2O/INPUT_TMP.95611 diff --git a/H2O/NON_TRIMMED_KP_LIST b/parser/parser-siesta/H2O/NON_TRIMMED_KP_LIST similarity index 100% rename from H2O/NON_TRIMMED_KP_LIST rename to parser/parser-siesta/H2O/NON_TRIMMED_KP_LIST diff --git a/H2O/O.ion b/parser/parser-siesta/H2O/O.ion similarity index 100% rename from H2O/O.ion rename to parser/parser-siesta/H2O/O.ion diff --git a/H2O/O.ion.xml b/parser/parser-siesta/H2O/O.ion.xml similarity index 100% rename from H2O/O.ion.xml rename to parser/parser-siesta/H2O/O.ion.xml diff --git a/H2O/O.psf b/parser/parser-siesta/H2O/O.psf similarity index 100% rename from H2O/O.psf rename to parser/parser-siesta/H2O/O.psf diff --git a/H2O/fdf-95611.log b/parser/parser-siesta/H2O/fdf-95611.log similarity index 100% rename from H2O/fdf-95611.log rename to parser/parser-siesta/H2O/fdf-95611.log diff --git a/H2O/h2o.BONDS b/parser/parser-siesta/H2O/h2o.BONDS similarity index 100% rename from H2O/h2o.BONDS rename to parser/parser-siesta/H2O/h2o.BONDS diff --git a/H2O/h2o.BONDS_FINAL b/parser/parser-siesta/H2O/h2o.BONDS_FINAL similarity index 100% rename from H2O/h2o.BONDS_FINAL rename to parser/parser-siesta/H2O/h2o.BONDS_FINAL diff --git a/H2O/h2o.DM b/parser/parser-siesta/H2O/h2o.DM similarity index 100% rename from H2O/h2o.DM rename to parser/parser-siesta/H2O/h2o.DM diff --git a/H2O/h2o.EIG b/parser/parser-siesta/H2O/h2o.EIG similarity index 100% rename from H2O/h2o.EIG rename to parser/parser-siesta/H2O/h2o.EIG diff --git a/H2O/h2o.FA b/parser/parser-siesta/H2O/h2o.FA similarity index 100% rename from H2O/h2o.FA rename to parser/parser-siesta/H2O/h2o.FA diff --git a/H2O/h2o.KP b/parser/parser-siesta/H2O/h2o.KP similarity index 100% rename from H2O/h2o.KP rename to parser/parser-siesta/H2O/h2o.KP diff --git a/H2O/h2o.ORB_INDX b/parser/parser-siesta/H2O/h2o.ORB_INDX similarity index 100% rename from H2O/h2o.ORB_INDX rename to parser/parser-siesta/H2O/h2o.ORB_INDX diff --git a/H2O/h2o.STRUCT_OUT b/parser/parser-siesta/H2O/h2o.STRUCT_OUT similarity index 100% rename from H2O/h2o.STRUCT_OUT rename to parser/parser-siesta/H2O/h2o.STRUCT_OUT diff --git a/H2O/h2o.XV b/parser/parser-siesta/H2O/h2o.XV similarity index 100% rename from H2O/h2o.XV rename to parser/parser-siesta/H2O/h2o.XV diff --git a/H2O/h2o.alloc b/parser/parser-siesta/H2O/h2o.alloc similarity index 100% rename from H2O/h2o.alloc rename to parser/parser-siesta/H2O/h2o.alloc diff --git a/H2O/h2o.fdf b/parser/parser-siesta/H2O/h2o.fdf similarity index 100% rename from H2O/h2o.fdf rename to parser/parser-siesta/H2O/h2o.fdf diff --git a/H2O/h2o.xml b/parser/parser-siesta/H2O/h2o.xml similarity index 100% rename from H2O/h2o.xml rename to parser/parser-siesta/H2O/h2o.xml diff --git a/H2O/out b/parser/parser-siesta/H2O/out similarity index 100% rename from H2O/out rename to parser/parser-siesta/H2O/out diff --git a/parser/parser-siesta/parser.py b/parser/parser-siesta/parser.py new file mode 100644 index 0000000000000000000000000000000000000000..83766fb977fb7bf713ca2bd4ac3a45217555ac66 --- /dev/null +++ b/parser/parser-siesta/parser.py @@ -0,0 +1,24 @@ +from __future__ import print_function +import sys +import setup_paths + +from nomadcore.simple_parser import mainFunction, SimpleMatcher as SM +from nomadcore.local_meta_info import loadJsonFile, InfoKindEl +from nomadcore.unit_conversion.unit_conversion \ + import register_userdefined_quantity + + +arg = sys.argv[1] + +infoFileDescription = SM( + name='root', + weak=True, + startReStr='', + fixedStartValues={'program_name': 'siesta'}, + sections=['section_run'], + subFlags=SM.SubFlags.Sequenced, + subMatchers=[ + SM(r'Siesta Version: (?P<program_version>\S*)') + ]) + + diff --git a/parser/parser-siesta/setup_paths.py b/parser/parser-siesta/setup_paths.py new file mode 100644 index 0000000000000000000000000000000000000000..e0a0fb009256a0d4056e81c12e82d15bfd3ea7c4 --- /dev/null +++ b/parser/parser-siesta/setup_paths.py @@ -0,0 +1,6 @@ +import sys, os, os.path +baseDir = os.path.dirname(os.path.abspath(__file__)) +commonDir = os.path.normpath(os.path.join(baseDir,"../../../../python-common/common/python")) + +if not commonDir in sys.path: + sys.path.insert(0, commonDir) diff --git a/parser/parser-siesta/util.py b/parser/parser-siesta/util.py new file mode 100644 index 0000000000000000000000000000000000000000..6b0f4fc3c94c5c80488219aee57814b962e6604d --- /dev/null +++ b/parser/parser-siesta/util.py @@ -0,0 +1,20 @@ +OCT_ENERGY_UNIT_NAME = 'usrOctEnergyUnit' +f_num = r'[-+]?(\d*\.\d+|\d+\.\d*)' # e.g.: 0.7 1. -.1 +e_num = r'[-+]?\d*\.\d+[EeDd][-+]\d*' # e.g.: -7.642e-300 +i_num = r'[-+\d]*' + +def numpattern(id, unit=None, pattern=f_num): + if unit is None: + pat = r'(?P<%(id)s>%(pattern)s)' + else: + pat = r'(?P<%(id)s__%(unit)s>%(pattern)s)' + return pat % dict(id=id, unit=unit, pattern=pattern) + +def pat(meta, regex): + return '(?P<%s>%s)' % (meta, regex) +def word(meta): + return pat(meta, regex=r'\S*') +def integer(meta): + return pat(meta, regex=i_num) +def floating(meta): + return pat(meta, regex='%s|%s' % (f_num, e_num))