diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..f8a741c2a8ce3f971ee76c289fc6eaf67f0c7f6c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*parser.egg-info/ \ No newline at end of file diff --git a/openkimparser/__init__.py b/openkimparser/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e79d95f7821222c40037b374e9f5dafbd8aea5bb --- /dev/null +++ b/openkimparser/__init__.py @@ -0,0 +1 @@ +from .parser_openkim import OpenKIMParser \ No newline at end of file diff --git a/openkimparser/__pycache__/__init__.cpython-36.pyc b/openkimparser/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..afac27cc12e18943d3d21a233a0a3104db5bc557 Binary files /dev/null and b/openkimparser/__pycache__/__init__.cpython-36.pyc differ diff --git a/openkimparser/__pycache__/parser_openkim.cpython-36.pyc b/openkimparser/__pycache__/parser_openkim.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bdc360c9e13533a789ea5cbb447689e7d21c00d8 Binary files /dev/null and b/openkimparser/__pycache__/parser_openkim.cpython-36.pyc differ diff --git a/openkimparser/metainfo/__init__.py b/openkimparser/metainfo/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4991a626815853e6d7b76d14a402e4c596c552bf --- /dev/null +++ b/openkimparser/metainfo/__init__.py @@ -0,0 +1,13 @@ +import sys +from nomad.metainfo import Environment +from nomad.metainfo.legacy import LegacyMetainfoEnvironment +import openkimparser.metainfo.openkim +import nomad.datamodel.metainfo.common +import nomad.datamodel.metainfo.public +import nomad.datamodel.metainfo.general + +m_env = LegacyMetainfoEnvironment() +m_env.m_add_sub_section(Environment.packages, sys.modules['openkimparser.metainfo.openkim'].m_package) # type: ignore +m_env.m_add_sub_section(Environment.packages, sys.modules['nomad.datamodel.metainfo.common'].m_package) # type: ignore +m_env.m_add_sub_section(Environment.packages, sys.modules['nomad.datamodel.metainfo.public'].m_package) # type: ignore +m_env.m_add_sub_section(Environment.packages, sys.modules['nomad.datamodel.metainfo.general'].m_package) # type: ignore diff --git a/openkimparser/metainfo/__pycache__/__init__.cpython-36.pyc b/openkimparser/metainfo/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..83bdcafc28e6ef4a0522f65167dc907c0d06055b Binary files /dev/null and b/openkimparser/metainfo/__pycache__/__init__.cpython-36.pyc differ diff --git a/openkimparser/metainfo/__pycache__/openkim.cpython-36.pyc b/openkimparser/metainfo/__pycache__/openkim.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c8737249232ec897c3e526fa0907f38eef8c921 Binary files /dev/null and b/openkimparser/metainfo/__pycache__/openkim.cpython-36.pyc differ diff --git a/openkimparser/metainfo/openkim.py b/openkimparser/metainfo/openkim.py new file mode 100644 index 0000000000000000000000000000000000000000..d2d3c196ca986967140b8590ce8d474e4d6d5e20 --- /dev/null +++ b/openkimparser/metainfo/openkim.py @@ -0,0 +1,53 @@ +import numpy as np # pylint: disable=unused-import +import typing # pylint: disable=unused-import +from nomad.metainfo import ( # pylint: disable=unused-import + MSection, MCategory, Category, Package, Quantity, Section, SubSection, SectionProxy, + Reference +) +from nomad.metainfo.legacy import LegacyDefinition + +from nomad.datamodel.metainfo import public + +m_package = Package( + name='openkim_nomadmetainfo_json', + description='None', + a_legacy=LegacyDefinition(name='openkim.nomadmetainfo.json')) + + +class section_run(public.section_run): + + m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_run')) + + openkim_build_date = Quantity( + type=str, + shape=[], + description=''' + build date as string + ''', + categories=[public.accessory_info, public.program_info], + a_legacy=LegacyDefinition(name='openkim_build_date')) + + openkim_src_date = Quantity( + type=str, + shape=[], + description=''' + date of last modification of the source as string + ''', + categories=[public.accessory_info, public.program_info], + a_legacy=LegacyDefinition(name='openkim_src_date')) + + +class section_method(public.section_method): + + m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_method')) + + x_openkim_atom_kind_refs = Quantity( + type=public.section_method_atom_kind, + shape=['number_of_atoms'], + description=''' + reference to the atom kinds of each atom + ''', + a_legacy=LegacyDefinition(name='x_openkim_atom_kind_refs')) + + +m_package.__init_metainfo__() diff --git a/parser/parser-openkim/openkim_tool.py b/openkimparser/openkim_tool.py similarity index 100% rename from parser/parser-openkim/openkim_tool.py rename to openkimparser/openkim_tool.py diff --git a/parser/parser-openkim/parser_openkim.py b/openkimparser/parser_openkim.py similarity index 94% rename from parser/parser-openkim/parser_openkim.py rename to openkimparser/parser_openkim.py index 4707a8c4bb2fd6bd07db62431f2e720eab59d29e..6927d8eaf7f8497519aa04cfb4a8671221733214 100644 --- a/parser/parser-openkim/parser_openkim.py +++ b/openkimparser/parser_openkim.py @@ -4,10 +4,8 @@ from builtins import map from builtins import range from builtins import object import logging, sys, bisect -import setup_paths from datetime import datetime -import os, logging, re, traceback -from nomadcore.parser_backend import JsonParseEventsWriterBackend +import re, traceback from nomadcore.local_meta_info import loadJsonFile, InfoKindEl import numpy as np from nomadcore.unit_conversion.unit_conversion import convert_unit_function @@ -138,7 +136,7 @@ class OpenkimContext(object): self.cell = None self.labels = None celltype = None - if('basis-atom-coordinates.source-value' in querydict and + if('basis-atom-coordinates.source-value' in querydict and ('a.si-value' in querydict) or ('b.si-value' in querydict) or ('c.si-value' in querydict) or @@ -164,9 +162,9 @@ class OpenkimContext(object): else: lat_a = float(a_si_val) si_conv = convert_unit_function("m", "angstrom") - cellAtoms = Atoms( - positions=basis, - cell=[si_conv(lat_a), + cellAtoms = Atoms( + positions=basis, + cell=[si_conv(lat_a), si_conv(lat_a), si_conv(lat_a)], pbc=True) @@ -293,7 +291,8 @@ class KIMParser(object): backend.startedParsingSession( mainFileUri = mainFileUri, parserInfo = self.parserInfo) - self.superContext.startedParsing(self) + superContext = self.superContext + superContext.startedParsing(self) QueryList = KIMQueryReader(self.fIn) try: for qi, qdict in enumerate(QueryList): @@ -338,13 +337,19 @@ parserInfo = { "version": "1.0" } -if __name__ == "__main__": - """ - This code is modified from parser-vasprun to work for OpenKIM - """ - metaInfoPath = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"../../../../nomad-meta-info/meta_info/nomad_meta_info/openkim.nomadmetainfo.json")) - metaInfoEnv, warnings = loadJsonFile(filePath = metaInfoPath, dependencyLoader = None, extraArgsHandling = InfoKindEl.ADD_EXTRA_ARGS, uri = None) - superContext = OpenkimContext() - parser = KIMParser(parserInfo, superContext) - backend = JsonParseEventsWriterBackend(metaInfoEnv, sys.stdout) - parser.parse(sys.argv[1], sys.argv[2], backend) + +class OpenKIMParser(): + """ A proper class envolop for running this parser from within python. """ + def __init__(self, backend, **kwargs): + self.backend_factory = backend + + def parse(self, mainfile): + logging.info('turbomole parser started') + logging.getLogger('nomadcore').setLevel(logging.WARNING) + backend = self.backend_factory("openkim.nomadmetainfo.json") + parserInfo = {'name': 'parser_openkim', 'version': '1.0'} + context = OpenkimContext() + parser = KIMParser(parserInfo, context) + parser.parse('nmd://uri', mainfile, backend) + + return backend diff --git a/parser/parser-openkim/setup_paths.py b/parser/parser-openkim/setup_paths.py deleted file mode 100644 index f823d43b987767343f5ab8b64bb085113066f391..0000000000000000000000000000000000000000 --- a/parser/parser-openkim/setup_paths.py +++ /dev/null @@ -1,12 +0,0 @@ -import sys -import os -import os.path - -basedir = os.path.dirname(os.path.abspath(__file__)) -commondir = os.path.normpath(os.path.join(basedir,"../../../../python-common/common/python")) -parserdir = os.path.normpath(os.path.join(basedir, "..")) - -if commondir not in sys.path: - sys.path.insert(1, commondir) -if parserdir not in sys.path: - sys.path.insert(1, parserdir) diff --git a/setup.py b/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..e0af2ae5bc616bb3ae8b4d1e1b1cad18e563bc71 --- /dev/null +++ b/setup.py @@ -0,0 +1,34 @@ +# Copyright 2015-2018 Berk Onat +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from setuptools import setup, find_packages + + +def main(): + setup( + name='openkimparser', + version='0.1', + description='NOMAD parser implementation for OpenKIM.', + license='MIT', + package_dir={'': './'}, + packages=find_packages(), + install_requires=[ + 'nomadcore', + 'nomad' + ], + ) + + +if __name__ == '__main__': + main() diff --git a/src/main/scala/eu/nomad_lab/parsers/OpenkimParser.scala b/src/main/scala/eu/nomad_lab/parsers/OpenkimParser.scala deleted file mode 100644 index 27698c686f583e2f7e3708077da4ae290a3b7887..0000000000000000000000000000000000000000 --- a/src/main/scala/eu/nomad_lab/parsers/OpenkimParser.scala +++ /dev/null @@ -1,43 +0,0 @@ -package eu.nomad_lab.parsers - -import eu.nomad_lab -import eu.nomad_lab.DefaultPythonInterpreter -import org.{ json4s => jn } -import eu.{ nomad_lab => lab } -import scala.collection.breakOut - -object OpenkimParser extends SimpleExternalParserGenerator( - name = "OpenkimParser", - parserInfo = jn.JObject( - ("name" -> jn.JString("OpenkimParser")) :: - ("parserId" -> jn.JString("OpenkimParser" + lab.OpenkimVersionInfo.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.OpenkimVersionInfo.toMap.map { - case (key, value) => - (key -> jn.JString(value.toString)) - }(breakOut): List[(String, jn.JString)]) - )) :: Nil - ), - mainFileTypes = Seq("text/.*"), - mainFileRe = """\s*OPENKIM_QUERY_OUTPUT\s*""".r, - cmd = Seq(DefaultPythonInterpreter.pythonExe(), "${envDir}/parsers/openkim/parser/parser-openkim/parser-openkim.py", - "${mainFilePath}", "${mainFilePath}/data.json"), - resList = Seq( - "parser-openkim/parser-openkim.py", - "parser-openkim/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/openkim.nomadmetainfo.json" - ) ++ DefaultPythonInterpreter.commonFiles(), - dirMap = Map( - "parser-openkim" -> "parsers/openkim/parser/parser-openkim", - "nomad_meta_info" -> "nomad-meta-info/meta_info/nomad_meta_info", - "python" -> "python-common/common/python/nomadcore" - ) ++ DefaultPythonInterpreter.commonDirMapping(), - metaInfoEnv = Some(lab.meta.KnownMetaInfoEnvs.openkim) -) - diff --git a/src/test/scala/eu/nomad_lab/parsers/OpenkimParserSpec.scala b/src/test/scala/eu/nomad_lab/parsers/OpenkimParserSpec.scala deleted file mode 100644 index b74f1e4b86528a4313bd467e9617072f7dcb73a4..0000000000000000000000000000000000000000 --- a/src/test/scala/eu/nomad_lab/parsers/OpenkimParserSpec.scala +++ /dev/null @@ -1,14 +0,0 @@ -package eu.nomad_lab.parsers - -import org.specs2.mutable.Specification - -object OpenkimParserTests extends Specification { - "OpenkimParserTest" >> { - "[OpenKIM Query with 3767 entries] test with json-events" >> { - ParserRun.parse(OpenkimParser, "parsers/openkim/test/examples/data.json", "json-events") must_== ParseResult.ParseSuccess - } - "[OpenKIM Query with 3767 entries] test with json" >> { - ParserRun.parse(OpenkimParser, "parsers/openkim/test/examples/data.json", "json") must_== ParseResult.ParseSuccess - } - } -}