diff --git a/parser/parser-molcas/main.py b/parser/parser-molcas/main.py new file mode 100644 index 0000000000000000000000000000000000000000..7ce435f3d30740d486036f8abf80b733e46e7435 --- /dev/null +++ b/parser/parser-molcas/main.py @@ -0,0 +1,48 @@ +from __future__ import print_function +import os +import sys +import setup_paths +import re + +import numpy as np +from ase import Atoms +from ase.spacegroup import crystal +#from ase.data import chemical_symbols + +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, convert_unit + +metaInfoPath = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"../../../../nomad-meta-info/meta_info/nomad_meta_info/molcas.nomadmetainfo.json")) +metaInfoEnv, warnings = loadJsonFile(filePath=metaInfoPath, + dependencyLoader=None, + extraArgsHandling=InfoKindEl.ADD_EXTRA_ARGS, + uri=None) + +parser_info = {'name': 'molcas-parser', 'version': '1.0'} + +class MolcasContext(object): + def startedParsing(self, fname, parser): + pass + +context = MolcasContext() + +mainFileDescription = SM( + name='root', + weak=True, + startReStr='', + fixedStartValues={'program_name': 'Molcas'}, + sections=['section_run'], + subMatchers=[]) + +def main(**kwargs): + mainFunction(mainFileDescription=mainFileDescription, + metaInfoEnv=metaInfoEnv, + parserInfo=parser_info, + cachingLevelForMetaName={}, + superContext=context, + **kwargs) + +if __name__ == '__main__': + main() diff --git a/parser/parser-molcas/nomad_meta_info b/parser/parser-molcas/nomad_meta_info new file mode 120000 index 0000000000000000000000000000000000000000..1b10d0640f73609a04c7e90a8923e8ca39e692dd --- /dev/null +++ b/parser/parser-molcas/nomad_meta_info @@ -0,0 +1 @@ +../../../../nomad-meta-info/meta_info/nomad_meta_info \ No newline at end of file diff --git a/parser/parser-molcas/setup_paths.py b/parser/parser-molcas/setup_paths.py new file mode 100644 index 0000000000000000000000000000000000000000..e0a0fb009256a0d4056e81c12e82d15bfd3ea7c4 --- /dev/null +++ b/parser/parser-molcas/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/src/main/scala/eu/nomad_lab/parsers/MolcasParser.scala b/src/main/scala/eu/nomad_lab/parsers/MolcasParser.scala new file mode 100644 index 0000000000000000000000000000000000000000..a9c88262a1fec2e6a5539156e8bd271e4e2bc88e --- /dev/null +++ b/src/main/scala/eu/nomad_lab/parsers/MolcasParser.scala @@ -0,0 +1,45 @@ +package eu.nomad_lab.parsers + +import eu.{ nomad_lab => lab } +import eu.nomad_lab.DefaultPythonInterpreter +import org.{ json4s => jn } +import scala.collection.breakOut + +object MolcasParser extends SimpleExternalParserGenerator( + name = "MolcasParser", + parserInfo = jn.JObject( + ("name" -> jn.JString("MolcasParser")) :: + ("parserId" -> jn.JString("MolcasParser" + lab.MolcasVersionInfo.version)) :: + ("versionInfo" -> jn.JObject( + ("nomadCoreVersion" -> jn.JObject(lab.NomadCoreVersionInfo.toMap.map { + case (k, v) => k -> jn.JString(v.toString) + }(breakOut): List[(String, jn.JString)])) :: + (lab.MolcasVersionInfo.toMap.map { + case (key, value) => + (key -> jn.JString(value.toString)) + }(breakOut): List[(String, jn.JString)]) + )) :: Nil + ), + mainFileTypes = Seq("text/.*"), + mainFileRe = """Regex +for +molcas +mainfile +""".r, + cmd = Seq(DefaultPythonInterpreter.pythonExe(), "${envDir}/parsers/molcas/parser/parser-molcas/main.py", + "--uri", "${mainFileUri}", "${mainFilePath}"), + resList = Seq( + "parser-molcas/main.py", + "parser-molcas/setup_paths.py", + "nomad_meta_info/public.nomadmetainfo.json", + "nomad_meta_info/common.nomadmetainfo.json", + "nomad_meta_info/meta_types.nomadmetainfo.json", + "nomad_meta_info/molcas.nomadmetainfo.json" + ) ++ DefaultPythonInterpreter.commonFiles(), + dirMap = Map( + "parser-molcas" -> "parsers/molcas/parser/parser-molcas", + "nomad_meta_info" -> "nomad-meta-info/meta_info/nomad_meta_info", + "python" -> "python-common/common/python/nomadcore" + ) ++ DefaultPythonInterpreter.commonDirMapping(), + metaInfoEnv = Some(lab.meta.KnownMetaInfoEnvs.molcas) +) diff --git a/src/test/scala/eu/nomad_lab/parsers/MolcasParserSpec.scala b/src/test/scala/eu/nomad_lab/parsers/MolcasParserSpec.scala new file mode 100644 index 0000000000000000000000000000000000000000..54a03b7aa0014aad3c7d95fd992e2921177b2022 --- /dev/null +++ b/src/test/scala/eu/nomad_lab/parsers/MolcasParserSpec.scala @@ -0,0 +1,19 @@ +package eu.nomad_lab.parsers + +import eu.nomad_lab.{ parsers, DefaultPythonInterpreter } +import org.scalacheck.Properties +import org.specs2.mutable.Specification +import org.{ json4s => jn } + +object MolcasParserSpec extends Specification { + "MolcasParserTest" >> { + "test example1.got " >> { + "test with json-events" >> { + ParserRun.parse(MolcasParser, "parsers/molcas/test/examples/outputs/example1.got", "json-events") must_== ParseResult.ParseSuccess + } + "test with json" >> { + ParserRun.parse(MolcasParser, "parsers/molcas/test/examples/outputs/example1.got", "json") must_== ParseResult.ParseSuccess + } + } + } +}