Skip to content
Snippets Groups Projects
Commit 10c421b1 authored by Daria M. Tomecka's avatar Daria M. Tomecka
Browse files

updating springer normalizer

parent 07829b2a
No related branches found
No related tags found
No related merge requests found
...@@ -12,6 +12,7 @@ __date__ = "05/04/17" ...@@ -12,6 +12,7 @@ __date__ = "05/04/17"
import setup_paths import setup_paths
from nomadcore.parser_backend import JsonParseEventsWriterBackend from nomadcore.parser_backend import JsonParseEventsWriterBackend
from nomadcore.parse_streamed_dicts import ParseStreamedDicts
import json import json
import sqlite3 import sqlite3
import sys, time, os.path import sys, time, os.path
...@@ -19,7 +20,6 @@ from io import open ...@@ -19,7 +20,6 @@ from io import open
from nomadcore.local_meta_info import loadJsonFile, InfoKindEl from nomadcore.local_meta_info import loadJsonFile, InfoKindEl
import logging import logging
INPUT_FORMULA = sys.argv[1]
DB_FILE = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "SM_all08.db")) DB_FILE = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "SM_all08.db"))
#OUTPUT_FILE = sys.argv[2] #OUTPUT_FILE = sys.argv[2]
...@@ -32,12 +32,7 @@ DB = os.path.exists(DB_FILE) ...@@ -32,12 +32,7 @@ DB = os.path.exists(DB_FILE)
conn = sqlite3.connect(DB_FILE) conn = sqlite3.connect(DB_FILE)
cur = conn.cursor() cur = conn.cursor()
fOut = sys.stdout def classify4me(INPUT_FORMULA, backend):
metaInfoPath = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../../../nomad-meta-info/meta_info/nomad_meta_info/public.nomadmetainfo.json"))
metaInfoEnv, warnings = loadJsonFile(filePath = metaInfoPath, dependencyLoader = None, extraArgsHandling = InfoKindEl.ADD_EXTRA_ARGS, uri = None)
backend = JsonParseEventsWriterBackend(metaInfoEnv, fOut)
def classify4me():
logging.info('(%r) classified according to Springer Materials as follow: \n \n', INPUT_FORMULA ) logging.info('(%r) classified according to Springer Materials as follow: \n \n', INPUT_FORMULA )
##print('***',INPUT_FORMULA, ' classified in Springer Materials as:','\n{') ##print('***',INPUT_FORMULA, ' classified in Springer Materials as:','\n{')
...@@ -224,11 +219,48 @@ def classify4me(): ...@@ -224,11 +219,48 @@ def classify4me():
backend.closeSection("section_springer_material",matS) backend.closeSection("section_springer_material",matS)
classify4me() def main():
fOut.flush() metapath = '../../../../nomad-meta-info/meta_info/nomad_meta_info/' +\
'common.nomadmetainfo.json'
# con.create_function("", 1, ) metaInfoPath = os.path.normpath(
cur.close() os.path.join(os.path.dirname(os.path.abspath(__file__)), metapath))
conn.close()
metaInfoEnv, warns = loadJsonFile(filePath=metaInfoPath,
dependencyLoader=None,
extraArgsHandling=InfoKindEl.ADD_EXTRA_ARGS,
uri=None)
fOut = sys.stdout
backend = JsonParseEventsWriterBackend(metaInfoEnv, fOut)
#Start
calcContext=sys.argv[1]
backend.startedParsingSession(
calcContext,
parserInfo = {'name':'SpringerNormalizer', 'version': '1.0'})
dictReader = ParseStreamedDicts(sys.stdin)
while True:
sectSys = dictReader.readNextDict()
if sectSys is None:
break
try:
formula = sectSys.get("system_composition")
if formula:
backend.openContext(calcContext)
for f in formula:
classify4me(f, backend)
fOut.flush()
backend.closeContext(calcContext)
except:
logging.exception("exception trying to calculate springer data for %s", sectSys)
backend.finishedParsingSession("ParseSuccess", None)
fOut.flush()
###
# con.create_function("", 1, )
cur.close()
conn.close()
if __name__ == '__main__':
main()
{
"system_composition": ["MgNd"],
"calculation_uri": "nmd://R.../C..."
}
...@@ -22,6 +22,13 @@ import scala.collection.breakOut ...@@ -22,6 +22,13 @@ import scala.collection.breakOut
import eu.nomad_lab.normalize.ExternalNormalizerGenerator import eu.nomad_lab.normalize.ExternalNormalizerGenerator
import eu.nomad_lab.meta import eu.nomad_lab.meta
import eu.nomad_lab.query import eu.nomad_lab.query
import eu.nomad_lab.resolve._
import eu.nomad_lab.h5.EmitJsonVisitor
import eu.nomad_lab.h5.H5EagerScanner
import eu.nomad_lab.h5.SectionH5
import eu.nomad_lab.parsers.ExternalParserWrapper
import eu.nomad_lab.JsonUtils
import scala.collection.mutable.StringBuilder
object SpringerNormalizer extends ExternalNormalizerGenerator( object SpringerNormalizer extends ExternalNormalizerGenerator(
name = "SpringerNormalizer", name = "SpringerNormalizer",
...@@ -44,6 +51,7 @@ object SpringerNormalizer extends ExternalNormalizerGenerator( ...@@ -44,6 +51,7 @@ object SpringerNormalizer extends ExternalNormalizerGenerator(
"${contextUri}", "${archivePath}"), "${contextUri}", "${archivePath}"),
resList = Seq( resList = Seq(
"normalizer-springer/classify4me_SM_normalizer.py", "normalizer-springer/classify4me_SM_normalizer.py",
"normalizer-springer/setup_paths.py",
"normalizer-springer/SM_all08.db", "normalizer-springer/SM_all08.db",
"nomad_meta_info/public.nomadmetainfo.json", "nomad_meta_info/public.nomadmetainfo.json",
"nomad_meta_info/common.nomadmetainfo.json", "nomad_meta_info/common.nomadmetainfo.json",
...@@ -56,4 +64,65 @@ object SpringerNormalizer extends ExternalNormalizerGenerator( ...@@ -56,4 +64,65 @@ object SpringerNormalizer extends ExternalNormalizerGenerator(
"python" -> "python-common/common/python/nomadcore" "python" -> "python-common/common/python/nomadcore"
) ++ DefaultPythonInterpreter.commonDirMapping(), ) ++ DefaultPythonInterpreter.commonDirMapping(),
metaInfoEnv = lab.meta.KnownMetaInfoEnvs.common metaInfoEnv = lab.meta.KnownMetaInfoEnvs.common
) ) {
val trace: Boolean = false
override def stdInHandler(context: ResolvedRef)(wrapper: ExternalParserWrapper)(pIn: java.io.OutputStream): Unit = {
val out: java.io.Writer = new java.io.BufferedWriter(new java.io.OutputStreamWriter(pIn));
val stringBuilder = if (trace)
new StringBuilder
else
null
def writeOut(s: String): Unit = {
out.write(s)
if (trace) stringBuilder ++= s
}
def flush(): Unit = {
out.flush()
if (trace) {
logger.info(stringBuilder.result())
stringBuilder.clear()
}
}
writeOut("[")
var isFirst = true
try {
context match {
case Calculation(archiveSet, c) =>
val sysTable = c.sectionTable(Seq("section_run", "section_system"))
def outputSysSection(sysSection: SectionH5): Unit = {
if (!isFirst)
writeOut(",")
else
isFirst = false
//writeOut(s"""{
// | "context": ${JsonUtils.escapeString(m.toRef.toUriStr(archiveSet.objectKind))},
// | "section_system": """.stripMargin)
val visitor = new EmitJsonVisitor(
writeOut = writeOut
)
val scanner = new H5EagerScanner
scanner.scanResolvedRef(Section(archiveSet, sysSection), visitor)
//writeOut("}")
flush()
}
val nSys = sysTable.lengthL
if (nSys > 0)
// outputSysSection(sysTable(0))
//if (nSys > 1)
outputSysSection(sysTable(nSys - 1))
writeOut("]")
flush()
case r =>
throw new Exception(s"FhiAimsBasisNormalizer expected a calculation as context, but got $r")
}
} finally {
out.close()
pIn.close()
wrapper.sendStatus = ExternalParserWrapper.SendStatus.Finished
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment