From fc1b84a5bc3c34806791a9ed1c1e43ecf7239445 Mon Sep 17 00:00:00 2001
From: Fawzi Mohamed <fawzi.mohamed@fhi-berlin.mpg.de>
Date: Tue, 29 Jan 2019 14:04:10 +0100
Subject: [PATCH] meta 2.0 changes

---
 .../parser-octopus/generate-octopus-json.py   |  6 ++++-
 parser/parser-octopus/parser_octopus.py       | 25 ++++++++++++-------
 .../eu/nomad_lab/parsers/OctopusParser.scala  |  4 +--
 3 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/parser/parser-octopus/generate-octopus-json.py b/parser/parser-octopus/generate-octopus-json.py
index 6d6634b..8b03899 100644
--- a/parser/parser-octopus/generate-octopus-json.py
+++ b/parser/parser-octopus/generate-octopus-json.py
@@ -56,6 +56,10 @@ json_section_template = """{
 
 
 
+def metaN(metaName):
+    """Retrurns a normalized meta name"""
+    return metaName.replace(".", "_").lower()
+
 class OctInputVar:
     def __init__(self, name, octtype, section):
         self.name = name
@@ -65,7 +69,7 @@ class OctInputVar:
     def _get_json(self, role, supername):
         description = (r'Octopus %s \"%s\" of type \"%s\" in section \"%s\"'
                        % (role, self.name, self.octtype, self.section))
-        return json_template % dict(name='%s_%s' % (supername, self.name),
+        return json_template % dict(name=metaN('%s_%s' % (supername, self.name)),
                                     dtypeStr=octtype2nomadtype[self.octtype],
                                     supername=supername,
                                     description=description)
diff --git a/parser/parser-octopus/parser_octopus.py b/parser/parser-octopus/parser_octopus.py
index 02ba095..819ea24 100644
--- a/parser/parser-octopus/parser_octopus.py
+++ b/parser/parser-octopus/parser_octopus.py
@@ -57,6 +57,9 @@ those if many uploaded calculations contain those formats.  I think it
 is largely irrelevant.
 """
 
+def metaN(metaName):
+    """Retrurns a normalized meta name"""
+    return metaName.replace(".", "_").lower()
 
 def parse_infofile(meta_info_env, pew, fname):
     with open(fname) as fd:
@@ -77,9 +80,9 @@ def parse_infofile(meta_info_env, pew, fname):
                  'Ion-ion': 'x_octopus_info_energy_ion_ion',
                  'Eigenvalues': 'energy_sum_eigenvalues',
                  'Hartree': 'energy_electrostatic',
-                 'Exchange': 'energy_X',
-                 'Correlation': 'energy_C',
-                 'vanderWaals': 'energy_van_der_Waals',
+                 'Exchange': 'energy_x',
+                 'Correlation': 'energy_c',
+                 'vanderWaals': 'energy_van_der_waals',
                  '-TS': 'energy_correction_entropy',
                  'Kinetic': 'electronic_kinetic_energy'}
 
@@ -91,7 +94,7 @@ def parse_infofile(meta_info_env, pew, fname):
                 break
 
             if tokens[0] in names:
-                pew.addValue(names[tokens[0]],
+                pew.addValue(metaN(names[tokens[0]]),
                              convert_unit(float(tokens[2]), nomadunit))
 
 
@@ -364,7 +367,7 @@ def register_octopus_keywords(pew, category, kwargs):
             # Some keywords (e.g. Spacing) specify float as type, but they
             # can actually be blocks.  (block is a type itself)
         else:
-            pew.addValue(name, value)
+            pew.addValue(metaN(name), value)
 
 
 def parse(fname, fd):
@@ -553,16 +556,20 @@ def parse(fname, fd):
                     xcfunctional = kwargs.get('xcfunctional', default_xc)
                     for functional in xcfunctional.split('+'):
                         functional = functional.strip().upper()
-                        with open_section('section_XC_functionals'):
-                            pew.addValue('XC_functional_name', functional)
+                        with open_section('section_xc_functionals'):
+                            pew.addValue('xc_functional_name', functional)
 
                 forces = calc.results.get('forces')
                 if forces is not None:
-                    pew.addArrayValues('atom_forces_free_raw',
+                    fId = pew.openSection('section_atom_forces')
+                    pew.addValue('atom_forces_quantity', 'energy_free')
+                    pew.addValue('atom_forces_constraints', 'raw')
+                    pew.addArrayValues('atom_forces',
                                        convert_unit(forces, 'eV'))
+                    pew.closeSection('section_atom_forces', fId)
                 # Convergence parameters?
 
-            pew.addValue('single_configuration_to_calculation_method_ref',
+            pew.addValue('single_configuration_calculation_to_method_ref',
                          method_gid)
 
             with open_section('section_eigenvalues'):
diff --git a/src/main/scala/eu/nomad_lab/parsers/OctopusParser.scala b/src/main/scala/eu/nomad_lab/parsers/OctopusParser.scala
index 46e1200..b5f4574 100644
--- a/src/main/scala/eu/nomad_lab/parsers/OctopusParser.scala
+++ b/src/main/scala/eu/nomad_lab/parsers/OctopusParser.scala
@@ -53,8 +53,8 @@ Simulation Box:
     "parser-octopus/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/octopus.autogenerated.nomadmetainfo.json",
+    "nomad_meta_info/meta.nomadmetainfo.json",
+    "nomad_meta_info/octopus_autogenerated.nomadmetainfo.json",
     "nomad_meta_info/octopus.nomadmetainfo.json"
   ) ++ DefaultPythonInterpreter.commonFiles(),
   dirMap = Map(
-- 
GitLab