diff --git a/.gitignore b/.gitignore
index a6cb8b615eb7a44af58c9563596ab6264ef6dbe6..bdaf518efd11b25bce719781906d500ddade8c55 100644
--- a/.gitignore
+++ b/.gitignore
@@ -52,3 +52,5 @@ TAGS
 
 lib/
 env/
+
+*.egg-info
\ No newline at end of file
diff --git a/parser/parser-namd/NAMDCommon.py b/namdparser/NAMDCommon.py
similarity index 100%
rename from parser/parser-namd/NAMDCommon.py
rename to namdparser/NAMDCommon.py
diff --git a/parser/parser-namd/NAMDDictionary.py b/namdparser/NAMDDictionary.py
similarity index 96%
rename from parser/parser-namd/NAMDDictionary.py
rename to namdparser/NAMDDictionary.py
index 0e6613adec193d71c262bdadb47e80a87cb641b3..2a626d9dfe23837c0a2e252dde7afa843e5420da 100644
--- a/parser/parser-namd/NAMDDictionary.py
+++ b/namdparser/NAMDDictionary.py
@@ -1,22 +1,21 @@
 # Copyright 2018-2018 Berk Onat, Fawzi Mohamed
-# 
+#
 #   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.
 
-import setup_paths
 import numpy as np
-from NAMDCommon import PARSERNAME, PROGRAMNAME, PARSERTAG
+from .NAMDCommon import PARSERNAME, PROGRAMNAME, PARSERTAG
 from nomadcore.smart_parser.SmartParserDictionary import metaNameConverter, metaNameConverter_UnderscoreSpaceDash
-from nomadcore.smart_parser.SmartParserDictionary import MetaInfoMap, FileInfoMap, MapDictionary 
+from nomadcore.smart_parser.SmartParserDictionary import MetaInfoMap, FileInfoMap, MapDictionary
 from nomadcore.smart_parser.SmartParserDictionary import getDict_MetaStrInDict, getList_MetaStrInDict, get_unitDict
 import nomadcore.md_data_access.MDDataAccess as MDData
 
@@ -26,7 +25,7 @@ def get_fileListDict():
     Returns:
         the list of defaults file namelists
     """
-    
+
     startpage = {
         'nameTranslate'   : metaNameConverter,
         'metaHeader'      : PARSERTAG,
@@ -36,19 +35,19 @@ def get_fileListDict():
         'activeSections'  : [PARSERTAG+'_section_input_output_files']
         }
     namelist = {
-        'structure'     : FileInfoMap(startpage, fileFormat=['.psf'], activeInfo=True, 
+        'structure'     : FileInfoMap(startpage, fileFormat=['.psf'], activeInfo=True,
                                       infoPurpose=['topology', 'unitcell']),
-        'traj_coord'    : FileInfoMap(startpage, fileFormat=['.dcd'], activeInfo=True, 
+        'traj_coord'    : FileInfoMap(startpage, fileFormat=['.dcd'], activeInfo=True,
                                       infoPurpose=['trajectory', 'unitcell']),
         'traj_vel'      : FileInfoMap(startpage, fileFormat=['.dcd'], activeInfo=True,
                                       infoPurpose=['velocities']),
-        'traj_force'    : FileInfoMap(startpage, fileFormat=['.dcd'], activeInfo=True, 
+        'traj_force'    : FileInfoMap(startpage, fileFormat=['.dcd'], activeInfo=True,
                                       infoPurpose=['forces']),
         'output_coord'  : FileInfoMap(startpage, fileFormat=['.namdbin'], activeInfo=False,
                                       infoPurpose=['outputcoordinates', 'unitcell']),
-        'output_vel'    : FileInfoMap(startpage, fileFormat=['.namdbin'], activeInfo=False, 
+        'output_vel'    : FileInfoMap(startpage, fileFormat=['.namdbin'], activeInfo=False,
                                       infoPurpose=['outputvelocities']),
-        'output_force'  : FileInfoMap(startpage, fileFormat=['.namdbin'], activeInfo=False, 
+        'output_force'  : FileInfoMap(startpage, fileFormat=['.namdbin'], activeInfo=False,
                                       infoPurpose=['outputforces']),
         'input_coord'   : FileInfoMap(startpage, fileFormat=['.pdb'],
                                       infoPurpose=['inputcoordinates', 'inputunitcell']),
@@ -71,11 +70,11 @@ def get_nameListDict(deflist):
 
     matchWith parameters:
         EOL = End of line
-        PL  = Match with previous line 
+        PL  = Match with previous line
         PW  = Previous word
         NW  = Next word (until space, comma) (DEFAULT)
         UD  = until delimeter (can be any string/character)
-        
+
         The text matched inside apostrophe or qoutation is extracted
 
     Returns:
@@ -224,11 +223,11 @@ def get_nameListDict(deflist):
         'activeSections'  : ['section_single_configuration_calculation']
         })
     mddatalist = {
-        'WRITING COORDINATES TO DCD FILE' : MetaInfoMap(startpage, 
+        'WRITING COORDINATES TO DCD FILE' : MetaInfoMap(startpage,
             replaceTag='DCDSTEP', subFunc=lambda x: x.split()[-1].replace('\n','').strip()),
-        'WRITING VELOCITIES TO DCD FILE AT STEP' : MetaInfoMap(startpage, 
+        'WRITING VELOCITIES TO DCD FILE AT STEP' : MetaInfoMap(startpage,
             replaceTag='VELSTEP', subFunc=lambda x: x.replace('\n','').strip()),
-        'WRITING FORCES TO DCD FILE AT STEP' : MetaInfoMap(startpage, 
+        'WRITING FORCES TO DCD FILE AT STEP' : MetaInfoMap(startpage,
             replaceTag='FORCESTEP', subFunc=lambda x: x.replace('\n','').strip()),
         'TS' : MetaInfoMap(startpage),
         'BOND' : MetaInfoMap(startpage),
@@ -299,7 +298,7 @@ def set_Dictionaries(self):
         self.stepcontrolDict = {
             'logsteps'       : None,
             'nextlogsteps'   : None,
-            'trajsteps'      : None, 
+            'trajsteps'      : None,
             'velsteps'       : None,
             'forcesteps'     : None,
             'steps'          : None,
@@ -313,12 +312,12 @@ def set_Dictionaries(self):
             'mddata' : self.mddataDict,
             'extra'  : self.extraDict,
             }
-        self.sectionDict = { 
-                'section' : { 
-                    "metaNameTag"      : ['input_output_files', 
-                                          'control_parameters'], 
-                    "listTypStr"       : 'type_section', 
-                    "repeatingSection" : False, 
+        self.sectionDict = {
+                'section' : {
+                    "metaNameTag"      : ['input_output_files',
+                                          'control_parameters'],
+                    "listTypStr"       : 'type_section',
+                    "repeatingSection" : False,
                     "supraNames"       : ["section_run"]
                     }
                 }
@@ -340,7 +339,7 @@ def get_updateDictionary(self, defname):
             if(st is not None and isinstance(st, str)):
                 if("[" in st or "(" in st):
                     val.append(list(storedtext))
-        if val: 
+        if val:
             return False, np.linalg.norm(np.asarray(val)), itemdict
         else:
             return False, itemdict["value"], itemdict
@@ -355,27 +354,27 @@ def get_updateDictionary(self, defname):
     # ---------------------------------------------------------------
     #   Definitions of meta data values for section_sampling_method
     # ---------------------------------------------------------------
-    sampling = { 
+    sampling = {
         'ensemble_type' : MetaInfoMap(startpage, activeInfo=True,
             depends=[
-                {'test' : [['minimization', ' is None'], 
+                {'test' : [['minimization', ' is None'],
                            ['thermostat', ' in [\"tcouple\",'
                                           '\"rescale\",'
                                           '\"reassign\",'
                                           '\"andersen\",'
-                                          '\"langevin\"]'], 
+                                          '\"langevin\"]'],
                            ['barostat', ' in [\"berendsen\",'
-                                         '\"langevin\"]']], 
+                                         '\"langevin\"]']],
                  'assign' : 'NPT'},
-                {'test' : [['minimization', ' is None'], 
-                           ['thermostat', ' in [\"langevin\"]'], 
+                {'test' : [['minimization', ' is None'],
+                           ['thermostat', ' in [\"langevin\"]'],
                            ['thermostat', ' not in [\"tcouple\",'
                                           '\"rescale\",'
                                           '\"reassign\",'
                                           '\"andersen\"]'],
                            ['barostat', ' is None']],
                  'assign' : 'Langevin'},
-                {'test' : [['minimization', ' is None'], 
+                {'test' : [['minimization', ' is None'],
                            ['thermostat', ' in [\"tcouple\",'
                                           '\"rescale\",'
                                           '\"reassign\",'
@@ -384,16 +383,16 @@ def get_updateDictionary(self, defname):
                  'assign' : 'NVT'},
                 {'test' : [['minimization', ' is None'],
                            ['thermostat', ' is None'],
-                           ['barostat', ' is None']], 
+                           ['barostat', ' is None']],
                  'assign' : 'NVE'},
-                {'test' : [['minimization', ' is not None']], 
+                {'test' : [['minimization', ' is not None']],
                  'assign' : 'minimization'},
                 ],
             lookupdict=self.extraDict
             ),
-        'sampling_method' : MetaInfoMap(startpage, activeInfo=True, 
+        'sampling_method' : MetaInfoMap(startpage, activeInfo=True,
             depends=[
-                {'test' : [['minimization', ' is not None']], 
+                {'test' : [['minimization', ' is not None']],
                  'assign' : 'geometry_optimization'},
                 {'test' : [['minimization', ' is None']],
                  'assign' : 'molecular_dynamics'}
@@ -413,9 +412,9 @@ def get_updateDictionary(self, defname):
 #       'geometry_optimization_geometry_change' : MetaInfoMap(startpage),
         'geometry_optimization_method' : MetaInfoMap(startpage,
             depends=[
-                {'test' : [['minimization', ' == \"cg\"']], 
+                {'test' : [['minimization', ' == \"cg\"']],
                  'assign' : 'CG'},
-                {'test' : [['minimization', ' == \"quench\"']], 
+                {'test' : [['minimization', ' == \"quench\"']],
                  'assign' : 'Velocity Quenching'},
                 ],
             lookupdict=self.extraDict,
@@ -424,12 +423,12 @@ def get_updateDictionary(self, defname):
 #       'geometry_optimization_threshold_force' : MetaInfoMap(startpage),
         'x_namd_barostat_type' : MetaInfoMap(startpage,
             depends=[
-                {'test' : [['minimization', ' is None'], 
+                {'test' : [['minimization', ' is None'],
                            ['barostat', '== \"berendsen\"']],
                  'assign' : 'Berendsen'},
-                {'test' : [['minimization', ' is None'], 
+                {'test' : [['minimization', ' is None'],
                            ['barostat', '== \"langevin\"']],
-                 'assign' : 'Nose-Hoover Langevin'} 
+                 'assign' : 'Nose-Hoover Langevin'}
                 ],
             lookupdict=self.extraDict,
             #autoSections=True,
@@ -439,7 +438,7 @@ def get_updateDictionary(self, defname):
         'x_namd_barostat_target_pressure' : MetaInfoMap(startpage,
             depends=[
                 {'test' : [['TARGET PRESSURE', ' is not None']],
-                 'value' : 'TARGET PRESSURE'} 
+                 'value' : 'TARGET PRESSURE'}
                 ],
             lookupdict=self.cntrlDict,
             valtype='float',
@@ -452,9 +451,9 @@ def get_updateDictionary(self, defname):
         'x_namd_barostat_tau' : MetaInfoMap(startpage,
             depends=[
                 {'test' : [['LANGEVIN OSCILLATION PERIOD', ' is not None']],
-                 'value' : 'LANGEVIN OSCILLATION PERIOD'}, 
+                 'value' : 'LANGEVIN OSCILLATION PERIOD'},
                 {'test' : [['BERENDSEN RELAXATION TIME', ' is not None']],
-                 'value' : 'BERENDSEN RELAXATION TIME'} 
+                 'value' : 'BERENDSEN RELAXATION TIME'}
                 ],
             lookupdict=self.cntrlDict,
             valtype='float',
@@ -467,7 +466,7 @@ def get_updateDictionary(self, defname):
         'x_namd_integrator_type' : MetaInfoMap(startpage,
             depends=[
                 {'test' : [['integrator', ' is not None']],
-                 'value' : 'integrator'}, 
+                 'value' : 'integrator'},
                 {'test' : [['thermostat', ' == \"langevin\"']],
                  'assign' : 'Langevin'}
                 ],
@@ -500,21 +499,21 @@ def get_updateDictionary(self, defname):
             ),
         'x_namd_thermostat_type' : MetaInfoMap(startpage,
             depends=[
-                {'test' : [['minimization', ' is None'], 
+                {'test' : [['minimization', ' is None'],
                            ['thermostat', ' == \"tcouple\"']],
-                 'assign' : 'Berendsen'}, 
-                {'test' : [['minimization', ' is None'], 
+                 'assign' : 'Berendsen'},
+                {'test' : [['minimization', ' is None'],
                            ['thermostat', ' == \"rescale\"']],
-                 'assign' : 'Velocity Rescaling'}, 
-                {'test' : [['minimization', ' is None'], 
+                 'assign' : 'Velocity Rescaling'},
+                {'test' : [['minimization', ' is None'],
                            ['thermostat', ' == \"reassign\"']],
-                 'assign' : 'Velocity Reassigning'}, 
-                {'test' : [['minimization', ' is None'], 
+                 'assign' : 'Velocity Reassigning'},
+                {'test' : [['minimization', ' is None'],
                            ['thermostat', ' == \"andersen\"']],
-                 'assign' : 'Andersen'}, 
-                {'test' : [['minimization', ' is None'], 
-                           ['thermostat', ' == \"langevin\"']], 
-                 'assign' : 'Nose-Hoover Langevin'}, 
+                 'assign' : 'Andersen'},
+                {'test' : [['minimization', ' is None'],
+                           ['thermostat', ' == \"langevin\"']],
+                 'assign' : 'Nose-Hoover Langevin'},
                 ],
             lookupdict=self.extraDict,
             #autoSections=True,
@@ -592,7 +591,7 @@ def get_updateDictionary(self, defname):
     # ------------------------------------------------------------
     #   Definitions for section_single_configuration_calculation
     # ------------------------------------------------------------
-    singleconfcalc = { 
+    singleconfcalc = {
         #'atom_forces_type' : MetaInfoMap(startpage,
         #    depends=[{'assign' : 'Force Field'}],
         #    lookupdict=self.mddataDict
@@ -648,7 +647,7 @@ def get_updateDictionary(self, defname):
         'time_single_configuration_calculation_wall_start' : MetaInfoMap(startpage),
         #'stress_tensor_kind' : MetaInfoMap(startpage,
         #    depends=[
-        #        {'test' : [['minimization', ' is not None']], 
+        #        {'test' : [['minimization', ' is not None']],
         #         'assign' : 'geometry_optimization'},
         #        {'test' : [['minimization', ' is None']],
         #         'assign' : 'molecular_dynamics'}
@@ -671,11 +670,11 @@ def get_updateDictionary(self, defname):
             activeSections=['section_energy_van_der_Waals']
             ),
         }
-   
+
     # ------------------------------------------
     #   Definitions for section_frame_sequence
     # ------------------------------------------
-    frameseq = { 
+    frameseq = {
         #'frame_sequence_conserved_quantity_frames' : MetaInfoMap(startpage,
         #    depends=[{'store' : 'TS'}],
         #    valtype='int',
@@ -950,7 +949,7 @@ def get_updateDictionary(self, defname):
         #'previous_sequence_ref' : MetaInfoMap(startpage)
         }
 
-    frameseqend = { 
+    frameseqend = {
         #'number_of_conserved_quantity_evaluations_in_sequence' : MetaInfoMap(startpage,
         #    activeInfo=True,
         #    value=(lambda x: np.array(x['val']).flatten().shape[0] if(
@@ -1158,7 +1157,7 @@ def get_updateDictionary(self, defname):
         'spacegroup_3D_wyckoff' : MetaInfoMap(startpage),
         'symmorphic' : MetaInfoMap(startpage),
         'system_name' : MetaInfoMap(startpage,
-            subfunction={ 
+            subfunction={
                 'function' : MDData.MDDataConverter.topology_system_name,
                 'supportDict' : self.topoDict,
                 },
@@ -1285,7 +1284,7 @@ def get_updateDictionary(self, defname):
         'number_of_atoms_per_molecule_interaction' : MetaInfoMap(startpage),
         'number_of_molecule_interactions' : MetaInfoMap(startpage)
         }
-   
+
     # section_atom_in_molecule of section_molecule_type
     atom_in_mol = {
         'atom_in_molecule_charge' : MetaInfoMap(startpage),
diff --git a/parser/parser-namd/NAMDParser.py b/namdparser/NAMDParser.py
similarity index 90%
rename from parser/parser-namd/NAMDParser.py
rename to namdparser/NAMDParser.py
index 5e091f62ea52cbc72ebbfcf223387d15c2f753cb..0ac4fef1e599c1c93a1baedde5195774636283e4 100644
--- a/parser/parser-namd/NAMDParser.py
+++ b/namdparser/NAMDParser.py
@@ -1,11 +1,11 @@
 # Copyright 2018-2018 Berk Onat, Fawzi Mohamed
-# 
+#
 #   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.
@@ -15,7 +15,6 @@
 from builtins import map
 from builtins import range
 from builtins import object
-import setup_paths
 import numpy as np
 import nomadcore.ActivateLogging
 from nomadcore.caching_backend import CachingLevel
@@ -24,9 +23,9 @@ from nomadcore.smart_parser import SmartParserCommon as SmartParser
 from nomadcore.smart_parser.SmartParserCommon import get_metaInfo, conv_str, conv_int, conv_float, open_section
 from nomadcore.smart_parser.SmartParserDictionary import getList_MetaStrInDict, getDict_MetaStrInDict
 from nomadcore.smart_parser.SmartParserDictionary import isMetaStrInDict
-from NAMDDictionary import get_updateDictionary, set_Dictionaries
-from NAMDCommon import PARSERNAME, PROGRAMNAME, PARSERVERSION, PARSERTAG, LOGGER
-from NAMDCommon import PARSER_INFO_DEFAULT, META_INFO_PATH, set_excludeList, set_includeList
+from .NAMDDictionary import get_updateDictionary, set_Dictionaries
+from .NAMDCommon import PARSERNAME, PROGRAMNAME, PARSERVERSION, PARSERTAG, LOGGER
+from .NAMDCommon import PARSER_INFO_DEFAULT, META_INFO_PATH, set_excludeList, set_includeList
 from nomadcore.md_data_access import MDDataAccess as MDDA
 import argparse
 import logging
@@ -61,7 +60,7 @@ class NAMDParser(SmartParser.ParserBase):
                                }
         SmartParser.ParserBase.__init__(
             self, re_program_name=re.compile(r"\s*"+PROGRAMNAME+"$"),
-            parsertag=PARSERTAG, metainfopath=META_INFO_PATH, 
+            parsertag=PARSERTAG, metainfopath=META_INFO_PATH,
             parserinfodef=PARSER_INFO_DEFAULT)
 
         set_Dictionaries(self)
@@ -79,27 +78,27 @@ class NAMDParser(SmartParser.ParserBase):
             metaInfo = self.metaInfoEnv.infoKinds[name]
             if (name.startswith(PARSERTAG + '_mdin_') and
                 metaInfo.kindStr == "type_document_content" and
-                (PARSERTAG + "_mdin_method" in metaInfo.superNames or 
-                 PARSERTAG + "_mdin_run" in metaInfo.superNames or 
+                (PARSERTAG + "_mdin_method" in metaInfo.superNames or
+                 PARSERTAG + "_mdin_run" in metaInfo.superNames or
                  PARSERTAG + "_mdin_system" in metaInfo.superNames) or
                 name.startswith(PARSERTAG + '_parm_') and
                 metaInfo.kindStr == "type_document_content" and
-                (PARSERTAG + "_mdin_method" in metaInfo.superNames or 
+                (PARSERTAG + "_mdin_method" in metaInfo.superNames or
                  PARSERTAG + "_mdin_run" in metaInfo.superNames or
                  PARSERTAG + "_mdin_system" in metaInfo.superNames) or
                 #name.startswith(PARSERTAG + '_mdin_file_') and
                 name.startswith(PARSERTAG + '_inout_file_') or
                 #metaInfo.kindStr == "type_document_content" and
-                #(PARSERTAG + "_section_input_output_files" in metaInfo.superNames or 
+                #(PARSERTAG + "_section_input_output_files" in metaInfo.superNames or
                 # "section_run" in metaInfo.superNames) or
                 name.startswith(PARSERTAG + '_inout_control_') or
-                #(PARSERTAG + "_section_control_parameters" in metaInfo.superNames) or 
+                #(PARSERTAG + "_section_control_parameters" in metaInfo.superNames) or
                 #name.startswith(PARSERTAG + '_mdin_') and
                 #(PARSERTAG + "_section_control_parameters" in metaInfo.superNames) or
                 name.startswith(PARSERTAG + '_mdout_') or
                 name.startswith(PARSERTAG + '_mdout_') and
                 #metaInfo.kindStr == "type_document_content" and
-                (PARSERTAG + "_mdout_method" in metaInfo.superNames or 
+                (PARSERTAG + "_mdout_method" in metaInfo.superNames or
                  PARSERTAG + "_mdout_system" in metaInfo.superNames or
                  "section_run" in metaInfo.superNames or
                  PARSERTAG + "_mdout_single_configuration_calculation" in metaInfo.superNames)
@@ -197,8 +196,8 @@ class NAMDParser(SmartParser.ParserBase):
     def onClose_section_run(self, backend, gIndex, section):
         """Trigger called when section_run is closed.
 
-        Write the keywords from control parametres and 
-        the NAMD output from the parsed log output, 
+        Write the keywords from control parametres and
+        the NAMD output from the parsed log output,
         which belong to settings_run.
         Variables are reset to ensure clean start for new run.
         """
@@ -211,7 +210,7 @@ class NAMDParser(SmartParser.ParserBase):
                 'dictionary' : section_frameseq_Dict
                 }
         self.metaStorage.update(updateFrameDict)
-        self.metaStorage.updateBackend(backend.superBackend, 
+        self.metaStorage.updateBackend(backend.superBackend,
                 startsection=['section_frame_sequence'],
                 autoopenclose=False)
         backend.addValue("frame_sequence_to_sampling_ref", self.secSamplingGIndex)
@@ -226,14 +225,14 @@ class NAMDParser(SmartParser.ParserBase):
 
         Determine whether topology, trajectory and input coordinate files are
         supplied to the parser
-        
+
         Initiates topology and trajectory file handles.
 
-        Captures topology, atomic positions, atom labels, lattice vectors and 
-        stores them before section_system and 
+        Captures topology, atomic positions, atom labels, lattice vectors and
+        stores them before section_system and
         section_single_configuration_calculation are encountered.
         """
-        # Checking whether topology, input 
+        # Checking whether topology, input
         # coordinates and trajectory files exist
         atLeastOneFileExist = False
         working_dir_name = os.path.dirname(os.path.abspath(self.fName))
@@ -287,7 +286,7 @@ class NAMDParser(SmartParser.ParserBase):
             'dictionary'   : section_control_Dict
             }
         self.metaStorage.update(updateDict)
-        self.metaStorage.updateBackend(backend.superBackend, 
+        self.metaStorage.updateBackend(backend.superBackend,
                 startsection=[PARSERTAG+'_section_control_parameters'],
                 autoopenclose=False)
         nparms = 0
@@ -298,7 +297,7 @@ class NAMDParser(SmartParser.ParserBase):
         if nparms>0:
             backend.superBackend.addValue(PARSERTAG+"_inout_control_number_of_parameters", int(nparms))
         # NAMD prints the initial and final energies to the log file.
-        # The total number of MD steps in NAMD is nsteps irrelevant 
+        # The total number of MD steps in NAMD is nsteps irrelevant
         # to the number of steps in log file of energy file (.edr)
         nsteps = 0
         nlogsteps = 0
@@ -307,8 +306,8 @@ class NAMDParser(SmartParser.ParserBase):
         noutputstep = 0
         nbinsteps = 0
         ntrajsteps = 0
-        nvelsteps = 0 
-        nforcesteps = 0 
+        nvelsteps = 0
+        nforcesteps = 0
         nstructKey = isMetaStrInDict("STRUCTURE FILE",self.cntrlDict)
         ninputKey = isMetaStrInDict("COORDINATE PDB",self.cntrlDict)
         noutputKey = isMetaStrInDict("OUTPUT FILENAME",self.cntrlDict)
@@ -354,7 +353,7 @@ class NAMDParser(SmartParser.ParserBase):
         if nfoutKey is not None:
             if self.cntrlDict[nfoutKey].activeInfo:
                 nforcesteps = conv_int(self.cntrlDict[nfoutKey].value, default=0)
-        
+
         if nlogsteps>0:
             logsteps = [i for i in range(0, nsteps, nlogsteps)]
             logsteps.append(nsteps)
@@ -442,11 +441,11 @@ class NAMDParser(SmartParser.ParserBase):
             'dictionary' : section_sampling_Dict
             }
         self.metaStorage.update(updateDict)
-        self.metaStorage.updateBackend(backend.superBackend, 
+        self.metaStorage.updateBackend(backend.superBackend,
                 startsection=['section_run'],
                 #startsection=['section_sampling_method'],
                 autoopenclose=False)
-    
+
     def onOpen_section_topology(self, backend, gIndex, section):
         # keep track of the latest topology description section
         if (gIndex is None or gIndex == -1 or gIndex == "-1"):
@@ -465,7 +464,7 @@ class NAMDParser(SmartParser.ParserBase):
             'dictionary' : section_topology_Dict
             }
         self.metaStorage.update(updateDict)
-        self.metaStorage.updateBackend(backend.superBackend, 
+        self.metaStorage.updateBackend(backend.superBackend,
                 startsection=['section_topology'],
                 autoopenclose=False)
         self.topology_atom_type_and_interactions(backend, gIndex)
@@ -491,7 +490,7 @@ class NAMDParser(SmartParser.ParserBase):
             SloppyBackend = backend.superBackend
         else:
             SloppyBackend = backend
-        
+
         numatoms = None
 
         # NAMD default unit vectors. If all are zeros than the simulation cell is not periodic.
@@ -515,10 +514,10 @@ class NAMDParser(SmartParser.ParserBase):
         if self.trajectory is not None:
             if self.trajectory.unitcell_vectors is None:
                 self.trajectory.unitcell_vectors = unit_vectors
-        
+
         if self.topology:
             if (self.secTopologyGIndex is None or
-                (self.secTopologyGIndex == -1 or 
+                (self.secTopologyGIndex == -1 or
                 self.secTopologyGIndex == "-1")):
                 self.onOpen_section_topology(backend, None, None)
                 self.onClose_section_topology(backend, None, None)
@@ -529,7 +528,7 @@ class NAMDParser(SmartParser.ParserBase):
         if self.trajectory is not None:
             coordinates=self.trajectory
             positions=self.atompositions
-        elif(self.inputcoords is not None and 
+        elif(self.inputcoords is not None and
              self.MDcurrentstep == steps[0]):
             coordinates=self.inputcoords
             positions=self.inputpositions
@@ -557,9 +556,9 @@ class NAMDParser(SmartParser.ParserBase):
                 SloppyBackend.addArrayValues('atom_positions', np.transpose(np.asarray(
                     self.metaStorage.convertUnits(positions, "Angstrom", self.unitDict))))
             if coordinates.velocities is not None:
-                # Velocities in PDB files are stored in A/ps units.(PDB files are read for input 
+                # Velocities in PDB files are stored in A/ps units.(PDB files are read for input
                 #     coordinates, velocities, and forces)
-                # Velocities in NAMD binary/DCD files are stored in NAMD internal units and must be multiplied 
+                # Velocities in NAMD binary/DCD files are stored in NAMD internal units and must be multiplied
                 #     by PDBVELFACTOR=20.45482706 to convert to A/ps. (These files are used for output trajectory)
                 SloppyBackend.addArrayValues('atom_velocities', np.transpose(np.asarray(
                     self.metaStorage.convertUnits(
@@ -663,7 +662,7 @@ class NAMDParser(SmartParser.ParserBase):
                 }
             self.secVDWGIndex = backend.superBackend.openSection("section_energy_van_der_Waals")
             self.metaStorage.update(updateDictVDW)
-            self.metaStorage.updateBackend(backend.superBackend, 
+            self.metaStorage.updateBackend(backend.superBackend,
                     startsection=['section_energy_van_der_Waals'],
                     autoopenclose=False)
             backend.superBackend.closeSection("section_energy_van_der_Waals", self.secVDWGIndex)
@@ -675,7 +674,7 @@ class NAMDParser(SmartParser.ParserBase):
                 'dictionary' : section_singlecalc_Dict
                 }
             self.metaStorage.update(updateDict)
-            self.metaStorage.updateBackend(backend.superBackend, 
+            self.metaStorage.updateBackend(backend.superBackend,
                     startsection=['section_single_configuration_calculation'],
                     autoopenclose=False)
         if self.MDcurrentstep in forcesteps:
@@ -688,7 +687,7 @@ class NAMDParser(SmartParser.ParserBase):
                         self.atompositions.velocities, "kcal/(mol*Angstrom)", self.unitDict))))
                 # need to transpose array since its shape is [number_of_atoms,3] in the metadata
 
-        if(self.MDcurrentstep in trajsteps or 
+        if(self.MDcurrentstep in trajsteps or
            self.MDcurrentstep in velsteps):
             #print("PRINTING traj steps:",self.MDcurrentstep,trajsteps)
             self.onOpen_section_system(backend, None, None)
@@ -696,12 +695,12 @@ class NAMDParser(SmartParser.ParserBase):
             backend.addValue('single_configuration_calculation_to_system_ref', self.secSystemGIndex)
             self.MDiter += 1
         else:
-            if(self.MDcurrentstep in logsteps or 
+            if(self.MDcurrentstep in logsteps or
                self.MDcurrentstep in forcesteps):
                 self.MDiter += 1
-            #if((self.MDcurrentstep in logsteps and 
-            #    self.MDiter+1 in steps) or 
-            #    (self.MDcurrentstep in forcesteps and 
+            #if((self.MDcurrentstep in logsteps and
+            #    self.MDiter+1 in steps) or
+            #    (self.MDcurrentstep in forcesteps and
             #    self.MDiter+1 in steps)):
             #    self.MDiter += 1
         #if self.MDiter<len(steps):
@@ -735,7 +734,7 @@ class NAMDParser(SmartParser.ParserBase):
             if fname in k:
                 return value+v
         return value
-    
+
     def mdInfoTrans(self, fname, value):
         mdInfoDict = {
                 "minimization" : [],
@@ -792,7 +791,7 @@ class NAMDParser(SmartParser.ParserBase):
                 else:
                     return value
         return value
-    
+
     def convertInt(self, fname, value):
         keyMapper = {
                 "TS" : "MDcurrentstep",
@@ -820,7 +819,7 @@ class NAMDParser(SmartParser.ParserBase):
                 if fname in k:
                     return float(value)*timestep
         return value
-    
+
     def build_subMatchers(self):
         """Builds the sub matchers to parse the main output file.
         """
@@ -834,24 +833,24 @@ class NAMDParser(SmartParser.ParserBase):
               "waitlist"          : None,
               "stopOnMatchStr"    : r"(?:^\s*$|\s*ENERGY:\s*)",
               "quitOnMatchStr"    : r"^====================================================",
-              "metaNameStart"     : PARSERTAG + "_mdout_", 
+              "metaNameStart"     : PARSERTAG + "_mdout_",
               "matchNameList"     : mddataNameList,
               "matchNameDict"     : "mddataDict",
               "updateMatchDict"   : True,
               "onlyCaseSensitive" : True,
               "stopOnFirstLine"   : False,
-              "parserOptions"     : { 
-                  "header"           : True, 
-                  "headersave"       : "mdoutHeaderDict", 
-                  "wrap"             : False, 
-                  "tablelines"       : 0, 
-                  "tablestartsat"    : r"\s*ETITLE:\s*", 
-                  "tableendsat"      : r"^\s*$", 
+              "parserOptions"     : {
+                  "header"           : True,
+                  "headersave"       : "mdoutHeaderDict",
+                  "wrap"             : False,
+                  "tablelines"       : 0,
+                  "tablestartsat"    : r"\s*ETITLE:\s*",
+                  "tableendsat"      : r"^\s*$",
                   "lineFilter"       : None,
                   "movetostopline"   : False,
                   "parsercntrlattr"  : "MDcurrentstep",
                   "parsercntrlin"    : "logsteps",
-                  "lookupdict"       : "stepcontrolDict" 
+                  "lookupdict"       : "stepcontrolDict"
                   }
               },
             # timestep energy outputs Parser
@@ -861,24 +860,24 @@ class NAMDParser(SmartParser.ParserBase):
               "waitlist"          : None,
               "stopOnMatchStr"    : r"(?:^\s*$|\s*ENERGY:\s*)",
               "quitOnMatchStr"    : r"^====================================================",
-              "metaNameStart"     : PARSERTAG + "_mdout_", 
+              "metaNameStart"     : PARSERTAG + "_mdout_",
               "matchNameList"     : mddataNameList,
               "matchNameDict"     : "mddataDict",
               "updateMatchDict"   : True,
               "onlyCaseSensitive" : True,
               "stopOnFirstLine"   : False,
-              "parserOptions"     : { 
-                  "header"           : False, 
-                  "headerList"       : "mdoutHeaderDict", 
-                  "wrap"             : False, 
-                  "tablelines"       : 0, 
-                  "tablestartsat"    : r"\s*ENERGY:\s*", 
-                  "tableendsat"      : r"^\s*$", 
+              "parserOptions"     : {
+                  "header"           : False,
+                  "headerList"       : "mdoutHeaderDict",
+                  "wrap"             : False,
+                  "tablelines"       : 0,
+                  "tablestartsat"    : r"\s*ENERGY:\s*",
+                  "tableendsat"      : r"^\s*$",
                   "lineFilter"       : None,
                   "movetostopline"   : False,
                   "parsercntrlattr"  : "MDcurrentstep",
                   "parsercntrlin"    : "logsteps",
-                  "lookupdict"       : "stepcontrolDict" 
+                  "lookupdict"       : "stepcontrolDict"
                   }
               },
             # trajectory Parser
@@ -887,15 +886,15 @@ class NAMDParser(SmartParser.ParserBase):
               "parsername"        : "dcd_parser",
               "stopOnMatchStr"    : r"\s*(?:ENERGY|TIMING|FINISHED|OPENING|The last)\s*",
               "quitOnMatchStr"    : r"\s*(?:ENERGY|TIMING|FINISHED|OPENING|The last)\s*",
-              "metaNameStart"     : PARSERTAG + "_mdout_", 
+              "metaNameStart"     : PARSERTAG + "_mdout_",
               "matchNameList"     : mddataNameList,
               "matchNameDict"     : "mddataDict",
               "updateMatchDict"   : False,
               "onlyCaseSensitive" : True,
               "stopOnFirstLine"   : True,
               "parserOptions"     : {
-                  "controlsections"  : ["section_single_configuration_calculation"], 
-                  "controlsave"      : "sectioncontrol", 
+                  "controlsections"  : ["section_single_configuration_calculation"],
+                  "controlsave"      : "sectioncontrol",
                   "controldict"      : "stepcontrolDict",
                   }
               },
@@ -905,15 +904,15 @@ class NAMDParser(SmartParser.ParserBase):
               "parsername"        : "veldcd_parser",
               "stopOnMatchStr"    : r"\s*(?:ENERGY|TIMING|FINISHED|OPENING|The last)\s*",
               "quitOnMatchStr"    : r"\s*(?:ENERGY|TIMING|FINISHED|OPENING|The last)\s*",
-              "metaNameStart"     : PARSERTAG + "_mdout_", 
+              "metaNameStart"     : PARSERTAG + "_mdout_",
               "matchNameList"     : mddataNameList,
               "matchNameDict"     : "mddataDict",
               "updateMatchDict"   : False,
               "onlyCaseSensitive" : True,
               "stopOnFirstLine"   : True,
               "parserOptions"     : {
-                  "controlsections"  : ["section_single_configuration_calculation"], 
-                  "controlsave"      : "sectioncontrol", 
+                  "controlsections"  : ["section_single_configuration_calculation"],
+                  "controlsave"      : "sectioncontrol",
                   "controldict"      : "stepcontrolDict",
                   }
               },
@@ -923,15 +922,15 @@ class NAMDParser(SmartParser.ParserBase):
               "parsername"        : "forcedcd_parser",
               "stopOnMatchStr"    : r"\s*(?:ENERGY|TIMING|FINISHED|OPENING|The last)\s*",
               "quitOnMatchStr"    : r"\s*(?:ENERGY|TIMING|FINISHED|OPENING|The last)\s*",
-              "metaNameStart"     : PARSERTAG + "_mdout_", 
+              "metaNameStart"     : PARSERTAG + "_mdout_",
               "matchNameList"     : mddataNameList,
               "matchNameDict"     : "mddataDict",
               "updateMatchDict"   : False,
               "onlyCaseSensitive" : True,
               "stopOnFirstLine"   : True,
               "parserOptions"     : {
-                  "controlsections"  : ["section_single_configuration_calculation"], 
-                  "controlsave"      : "sectioncontrol", 
+                  "controlsections"  : ["section_single_configuration_calculation"],
+                  "controlsave"      : "sectioncontrol",
                   "controldict"      : "stepcontrolDict",
                   }
               },
@@ -942,31 +941,31 @@ class NAMDParser(SmartParser.ParserBase):
               "waitlist"          : None,
               "stopOnMatchStr"    : "AlwaysStop",
               "quitOnMatchStr"    : "AlwaysStop",
-              "metaNameStart"     : PARSERTAG + "_mdout_", 
+              "metaNameStart"     : PARSERTAG + "_mdout_",
               "matchNameList"     : mddataNameList,
               "matchNameDict"     : "mddataDict",
               "updateMatchDict"   : True,
               "onlyCaseSensitive" : True,
               "stopOnFirstLine"   : True,
-              "parserOptions"     : { 
-                  "dictionary"       : "stepcontrolDict", 
+              "parserOptions"     : {
+                  "dictionary"       : "stepcontrolDict",
                   "dicttype"         : "standard", # (standard or smartparser)
-                  "readwritedict"    : "write", 
+                  "readwritedict"    : "write",
                   "keyMapper"        : {"TS" : "MDcurrentstep",
                                         "DCDSTEP" : "MDcurrentstep",
                                         "VELSTEP" : "MDcurrentstep",
                                         "FORCESTEP" : "MDcurrentstep"},
                   "updatefunc"       : "max",
                   "updateattrs"      : ["MDcurrentstep"],
-                  "controlsections"  : ["section_single_configuration_calculation"], 
-                  "controlsave"      : "sectioncontrol", 
+                  "controlsections"  : ["section_single_configuration_calculation"],
+                  "controlsave"      : "sectioncontrol",
                   "controldict"      : "stepcontrolDict",
                   "controlattrs"     : ["MDcurrentstep"],
                   "preprocess"       : self.convertInt,
                   "postprocess"      : self.convertInt,
                   #"parsercntrlattr"  : "MDcurrentstep",
                   #"parsercntrlin"    : "steps",
-                  #"lookupdict"       : "stepcontrolDict" 
+                  #"lookupdict"       : "stepcontrolDict"
                   }
               },
             # time save Parser
@@ -976,16 +975,16 @@ class NAMDParser(SmartParser.ParserBase):
               "waitlist"          : None,
               "stopOnMatchStr"    : "AlwaysStop",
               "quitOnMatchStr"    : "AlwaysStop",
-              "metaNameStart"     : PARSERTAG + "_mdout_", 
+              "metaNameStart"     : PARSERTAG + "_mdout_",
               "matchNameList"     : mddataNameList,
               "matchNameDict"     : "mddataDict",
               "updateMatchDict"   : True,
               "onlyCaseSensitive" : True,
               "stopOnFirstLine"   : True,
-              "parserOptions"     : { 
-                  "dictionary"       : "mddataDict", 
+              "parserOptions"     : {
+                  "dictionary"       : "mddataDict",
                   "dicttype"         : "smartparser", # (standard or smartparser)
-                  "readwritedict"    : "read", 
+                  "readwritedict"    : "read",
                   "keyMapper"        : {"TIME" : "TS"},
                   "preprocess"       : self.convertInt,
                   "postprocess"      : self.updateTime,
@@ -1007,16 +1006,16 @@ class NAMDParser(SmartParser.ParserBase):
               "updateMatchDict"   : False,
               "onlyCaseSensitive" : True,
               "stopOnFirstLine"   : True,
-              "parserOptions"     : { 
-                  "sectionname"      : "section_single_configuration_calculation", 
-                  "sectionopen"      : True, 
-                  "sectionopenattr"  : "MDcurrentstep", 
-                  "sectionopenin"    : "steps", 
-                  "sectionclose"     : True, 
-                  "sectioncloseattr" : "MDcurrentstep", 
-                  "sectionclosein"   : "steps", 
-                  "activatesection"  : "sectioncontrol", 
-                  "lookupdict"       : "stepcontrolDict" 
+              "parserOptions"     : {
+                  "sectionname"      : "section_single_configuration_calculation",
+                  "sectionopen"      : True,
+                  "sectionopenattr"  : "MDcurrentstep",
+                  "sectionopenin"    : "steps",
+                  "sectionclose"     : True,
+                  "sectioncloseattr" : "MDcurrentstep",
+                  "sectionclosein"   : "steps",
+                  "activatesection"  : "sectioncontrol",
+                  "lookupdict"       : "stepcontrolDict"
                   }
               },
             # Step Control Parser
@@ -1032,18 +1031,18 @@ class NAMDParser(SmartParser.ParserBase):
               "updateMatchDict"   : False,
               "onlyCaseSensitive" : True,
               "stopOnFirstLine"   : True,
-              "parserOptions"     : { 
+              "parserOptions"     : {
                   "waitatlineStr"    : r"\s*ENERGY:\s*",
-                  "controlwait"      : None, 
-                  #"controlwait"      : "nextlogsteps", 
-                  "controlattr"      : "MDcurrentstep", 
-                  "controlnextattr"  : "MDnextstep", 
-                  "controllast"      : -1, 
-                  "controlskip"      : [], 
-                  "controlin"        : "steps", 
-                  "controlcounter"   : "targetstep", 
+                  "controlwait"      : None,
+                  #"controlwait"      : "nextlogsteps",
+                  "controlattr"      : "MDcurrentstep",
+                  "controlnextattr"  : "MDnextstep",
+                  "controllast"      : -1,
+                  "controlskip"      : [],
+                  "controlin"        : "steps",
+                  "controlcounter"   : "targetstep",
                   "controldict"      : "stepcontrolDict",
-                  "lookupdict"       : "stepcontrolDict" 
+                  "lookupdict"       : "stepcontrolDict"
                   }
               }
             ]
@@ -1060,7 +1059,7 @@ class NAMDParser(SmartParser.ParserBase):
               "stopOnMatchStr"    : r"\s*Info:\s*(?:SUMMARY\s*OF\s*PARAMETERS:|"
                                      "STRUCTURE\s*SUMMARY:)",
               "quitOnMatchStr"    : None,
-              "metaNameStart"     : PARSERTAG + "_inout_control_", 
+              "metaNameStart"     : PARSERTAG + "_inout_control_",
               "matchNameList"     : cntrlNameList,
               "matchNameDict"     : "cntrlDict",
               "updateMatchDict"   : True,
@@ -1076,16 +1075,16 @@ class NAMDParser(SmartParser.ParserBase):
               "quitOnMatchStr"    : None,
               "stopOnMatchStr"    : "AlwaysStop",
               "quitOnMatchStr"    : "AlwaysStop",
-              "metaNameStart"     : PARSERTAG + "_mdin_method_", 
+              "metaNameStart"     : PARSERTAG + "_mdin_method_",
               "matchNameList"     : extraNameList,
               "matchNameDict"     : "extraDict",
               "updateMatchDict"   : True,
               "onlyCaseSensitive" : True,
               "stopOnFirstLine"   : True,
-              "parserOptions"     : { 
-                  "dictionary"       : "cntrlDict", 
+              "parserOptions"     : {
+                  "dictionary"       : "cntrlDict",
                   "dicttype"         : "smartparser", # (standard or smartparser)
-                  "readwritedict"    : "read", 
+                  "readwritedict"    : "read",
                   "keyMapper"        : {
                       "minimization" : "MINIMIZATION",
                       "minimization" : "VELOCITY QUENCHING",
@@ -1112,16 +1111,16 @@ class NAMDParser(SmartParser.ParserBase):
               "waitlist"          : None,
               "stopOnMatchStr"    : "AlwaysStop",
               "quitOnMatchStr"    : "AlwaysStop",
-              "metaNameStart"     : PARSERTAG + "_inout_file", 
+              "metaNameStart"     : PARSERTAG + "_inout_file",
               "matchNameList"     : fileNameList,
               "matchNameDict"     : "fileDict",
               "updateMatchDict"   : True,
               "onlyCaseSensitive" : True,
               "stopOnFirstLine"   : True,
-              "parserOptions"     : { 
-                  "dictionary"       : "cntrlDict", 
+              "parserOptions"     : {
+                  "dictionary"       : "cntrlDict",
                   "dicttype"         : "smartparser", # (standard or smartparser)
-                  "readwritedict"    : "read", 
+                  "readwritedict"    : "read",
                   "keyMapper"        : {
                       "structure"    : "STRUCTURE FILE",
                       "traj_coord"   : "Info: DCD FILENAME",
@@ -1151,31 +1150,31 @@ class NAMDParser(SmartParser.ParserBase):
                        startReStr=r"\s*Info:\s*NAMD\s*"
                                    "(?P<program_version>[0-9.]+)\s*for\s*"
                                    "(?P<"+PARSERTAG+"_build_osarch>.+)\s*"),
-                    SM(name='license', 
+                    SM(name='license',
                        startReStr=r"\s*Info:\s*Please\s*visit\s*",
-                       coverageIgnore=True, 
-                       adHoc=lambda p: 
-                       self.adHoc_read_store_text_stop_parsing(p, 
+                       coverageIgnore=True,
+                       adHoc=lambda p:
+                       self.adHoc_read_store_text_stop_parsing(p,
                            stopOnMatchStr=r"\s*Info:\s*(?:Info:Based|"
                                            "Built|Running|Configuration)\s*",
                            quitOnMatchStr=None,
-                           metaNameStart=PARSERTAG+"_", 
-                           metaNameStore=PARSERTAG+"_program_citation", 
+                           metaNameStart=PARSERTAG+"_",
+                           metaNameStore=PARSERTAG+"_program_citation",
                            matchNameList=None,
                            matchNameDict=None,
                            onlyCaseSensitive=True,
                            stopOnFirstLine=False,
                            storeFirstLine=True,
                            storeStopQuitLine=True,
-                           onQuitRunFunction=lambda p: p.backend.addValue( 
-                               PARSERTAG+"_program_citation", 
+                           onQuitRunFunction=lambda p: p.backend.addValue(
+                               PARSERTAG+"_program_citation",
                                p.lastMatch[
                                    PARSERTAG+"_program_citation"
                                    ].replace('\n', ' ').replace('Info:', ' ')
                                )
                            )
                        ),
-                    SM(name='loghostinfo', 
+                    SM(name='loghostinfo',
                        startReStr=r"\s*Info:\s*Built\s*"
                                    "(?P<"+PARSERTAG+"_program_build_date>"
                                    "[a-zA-Z0-9:. ]+)\s*by"),
@@ -1185,11 +1184,11 @@ class NAMDParser(SmartParser.ParserBase):
                                  "STRUCTURE\s*SUMMARY|Entering\s*startup)\s*",
                        forwardMatch=True,
                        sections=['section_sampling_method', PARSERTAG + '_section_control_parameters'],
-                       adHoc=lambda p: 
+                       adHoc=lambda p:
                        self.adHoc_takingover_parsing(p,
                            stopOnMatchStr=r"\s*Info:\s*(?:SUMMARY\s*OF\s*PARAMETERS|"
                                            "STRUCTURE\s*SUMMARY|Entering\s*startup)",
-                           quitOnMatchStr=None, 
+                           quitOnMatchStr=None,
                            stopControl="stopControl", # if None or True, stop with quitMatch, else wait
                            record=False, # if False or None, no record, no replay
                            replay=0, # if 0 or None= no replay, if <0 infinite replay
@@ -1201,8 +1200,8 @@ class NAMDParser(SmartParser.ParserBase):
                        startReStr=r"\s*Info:\s*Finished\s*startup",
                        forwardMatch=True,
                        sections=[PARSERTAG+'_section_input_output_files'],
-                       coverageIgnore=True, 
-                       adHoc=lambda p: 
+                       coverageIgnore=True,
+                       adHoc=lambda p:
                        self.adHoc_takingover_parsing(p,
                            stopOnMatchStr=r"^\s*$",
                            quitOnMatchStr=r"^\s*$",
@@ -1232,7 +1231,7 @@ class NAMDParser(SmartParser.ParserBase):
                                      startReStr=r"\s*ETITLE:\s*TS\s*"
                                                  "(?P<"+PARSERTAG+"_mdin_finline>.*)(?:'|\")?\s*,?",
                                      forwardMatch=True,
-                                     adHoc=lambda p: 
+                                     adHoc=lambda p:
                                      self.adHoc_takingover_parsing(p,
                                          stopOnMatchStr=r"^====================================================",
                                          quitOnMatchStr=r"^====================================================",
@@ -1252,12 +1251,35 @@ class NAMDParser(SmartParser.ParserBase):
                        subMatchers=[
                            SM(r"^WallClock:\s*[0-9:.eEdD]+\s*CPUTime:\s*[0-9.:eEdD]+\s*Memory:\s*[0-9:.KMGTB ]+"),
                        ]), # END Computation
-                    SM(name='end_run', 
+                    SM(name='end_run',
                        startReStr=r"\s*End\s*of\s*program\s*"),
                 ]) # END NewRun
             ]
 
 
+class NamdParserInterface():
+   """ A proper class envolop for running this parser from within python. """
+   def __init__(self, backend, **kwargs):
+       self.backend_factory = backend
+
+   def parse(self, mainfile):
+        from unittest.mock import patch
+        logging.info('namd parser started')
+        logging.getLogger('nomadcore').setLevel(logging.WARNING)
+        backend = self.backend_factory("namd.nomadmetainfo.json")
+        parserInfo = {'name': 'namd-parser', 'version': '1.0'}
+        context = NAMDParser()
+        with patch.object(sys, 'argv', ['<exe>', '--uri', 'nmd://uri', mainfile]):
+            mainFunction(
+                mainFileDescription=context.mainFileDescription(),
+                metaInfoEnv=None,
+                parserInfo=parserInfo,
+                cachingLevelForMetaName=context.cachingLevelForMetaName,
+                superContext=context,
+                superBackend=backend)
+        return backend
+
+
 if __name__ == "__main__":
     parser = NAMDParser()
     parser.parse()
diff --git a/namdparser/__init__.py b/namdparser/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..5aa590cecd582b44463b6fccbd7e0516572abd0f
--- /dev/null
+++ b/namdparser/__init__.py
@@ -0,0 +1 @@
+from .NAMDParser import NamdParserInterface as NamdParser
\ No newline at end of file
diff --git a/namdparser/metainfo/__init__.py b/namdparser/metainfo/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..642e1b94c74757def3adce5eccffccafd1fb0e52
--- /dev/null
+++ b/namdparser/metainfo/__init__.py
@@ -0,0 +1,13 @@
+import sys
+from nomad.metainfo import Environment
+from nomad.metainfo.legacy import LegacyMetainfoEnvironment
+import namdparser.metainfo.namd
+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['namdparser.metainfo.namd'].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/namdparser/metainfo/namd.py b/namdparser/metainfo/namd.py
new file mode 100644
index 0000000000000000000000000000000000000000..e890535d157fa2f043cf9bd823e4b81e1e334ceb
--- /dev/null
+++ b/namdparser/metainfo/namd.py
@@ -0,0 +1,2062 @@
+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
+from nomad.datamodel.metainfo import common
+
+m_package = Package(
+    name='namd_nomadmetainfo_json',
+    description='None',
+    a_legacy=LegacyDefinition(name='namd.nomadmetainfo.json'))
+
+
+class x_namd_mdin_input_output_files(MCategory):
+    '''
+    Parameters of mdin belonging to x_namd_section_control_parameters.
+    '''
+
+    m_def = Category(
+        a_legacy=LegacyDefinition(name='x_namd_mdin_input_output_files'))
+
+
+class x_namd_mdin_control_parameters(MCategory):
+    '''
+    Parameters of mdin belonging to x_namd_section_control_parameters.
+    '''
+
+    m_def = Category(
+        a_legacy=LegacyDefinition(name='x_namd_mdin_control_parameters'))
+
+
+class x_namd_mdin_method(MCategory):
+    '''
+    Parameters of mdin belonging to section method.
+    '''
+
+    m_def = Category(
+        a_legacy=LegacyDefinition(name='x_namd_mdin_method'))
+
+
+class x_namd_mdout_single_configuration_calculation(MCategory):
+    '''
+    Parameters of mdout belonging to section_single_configuration_calculation.
+    '''
+
+    m_def = Category(
+        a_legacy=LegacyDefinition(name='x_namd_mdout_single_configuration_calculation'))
+
+
+class x_namd_mdout_method(MCategory):
+    '''
+    Parameters of mdin belonging to section method.
+    '''
+
+    m_def = Category(
+        a_legacy=LegacyDefinition(name='x_namd_mdout_method'))
+
+
+class x_namd_mdout_run(MCategory):
+    '''
+    Parameters of mdin belonging to settings run.
+    '''
+
+    m_def = Category(
+        categories=[public.settings_run],
+        a_legacy=LegacyDefinition(name='x_namd_mdout_run'))
+
+
+class x_namd_mdin_run(MCategory):
+    '''
+    Parameters of mdin belonging to settings run.
+    '''
+
+    m_def = Category(
+        categories=[public.settings_run],
+        a_legacy=LegacyDefinition(name='x_namd_mdin_run'))
+
+
+class x_namd_section_input_output_files(MSection):
+    '''
+    Section to store input and output file names
+    '''
+
+    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_namd_section_input_output_files'))
+
+    x_namd_inout_file_structure = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD input topology file.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_file_structure'))
+
+    x_namd_inout_file_traj_coord = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD output trajectory file.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_file_traj_coord'))
+
+    x_namd_inout_file_traj_vel = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD output file for velocities in the trajectory.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_file_traj_vel'))
+
+    x_namd_inout_file_traj_force = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD output file for forces in the trajectory.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_file_traj_force'))
+
+    x_namd_inout_file_output_coord = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD output coordinates file.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_file_output_coord'))
+
+    x_namd_inout_file_output_vel = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD output velocities file.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_file_output_vel'))
+
+    x_namd_inout_file_output_force = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD output forces file.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_file_output_force'))
+
+    x_namd_inout_file_input_coord = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD input coordinates file.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_file_input_coord'))
+
+    x_namd_inout_file_input_vel = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD input velocities file.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_file_input_vel'))
+
+    x_namd_inout_file_restart_coord = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD restart coordinates file.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_file_restart_coord'))
+
+    x_namd_inout_file_restart_vel = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD restart velocities file.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_file_restart_vel'))
+
+    x_namd_inout_file_fftw_datafile = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD FFTW data file.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_file_fftw_datafile'))
+
+    x_namd_inout_file_mdlog = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD MD output log file.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_file_mdlog'))
+
+
+class x_namd_section_control_parameters(MSection):
+    '''
+    Section to store the input and output control parameters
+    '''
+
+    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_namd_section_control_parameters'))
+
+    x_namd_inout_control_timestep = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_timestep'))
+
+    x_namd_inout_control_number_of_steps = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_number_of_steps'))
+
+    x_namd_inout_control_steps_per_cycle = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_steps_per_cycle'))
+
+    x_namd_inout_control_periodic_cell_basis_1 = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_periodic_cell_basis_1'))
+
+    x_namd_inout_control_periodic_cell_basis_2 = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_periodic_cell_basis_2'))
+
+    x_namd_inout_control_periodic_cell_basis_3 = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_periodic_cell_basis_3'))
+
+    x_namd_inout_control_periodic_cell_center = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_periodic_cell_center'))
+
+    x_namd_inout_control_load_balancer = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_load_balancer'))
+
+    x_namd_inout_control_load_balancing_strategy = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_load_balancing_strategy'))
+
+    x_namd_inout_control_ldb_period = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_ldb_period'))
+
+    x_namd_inout_control_first_ldb_timestep = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_first_ldb_timestep'))
+
+    x_namd_inout_control_last_ldb_timestep = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_last_ldb_timestep'))
+
+    x_namd_inout_control_ldb_background_scaling = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_ldb_background_scaling'))
+
+    x_namd_inout_control_hom_background_scaling = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_hom_background_scaling'))
+
+    x_namd_inout_control_pme_background_scaling = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_pme_background_scaling'))
+
+    x_namd_inout_control_min_atoms_per_patch = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_min_atoms_per_patch'))
+
+    x_namd_inout_control_initial_temperature = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_initial_temperature'))
+
+    x_namd_inout_control_center_of_mass_moving_initially = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_center_of_mass_moving_initially'))
+
+    x_namd_inout_control_dielectric = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_dielectric'))
+
+    x_namd_inout_control_excluded_species_or_groups = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_excluded_species_or_groups'))
+
+    x_namd_inout_control_1_4_electrostatics_scale = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_1_4_electrostatics_scale'))
+
+    x_namd_inout_control_traj_dcd_filename = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_traj_dcd_filename'))
+
+    x_namd_inout_control_traj_dcd_frequency = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_traj_dcd_frequency'))
+
+    x_namd_inout_control_traj_dcd_first_step = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_traj_dcd_first_step'))
+
+    x_namd_inout_control_velocity_dcd_filename = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_velocity_dcd_filename'))
+
+    x_namd_inout_control_velocity_dcd_frequency = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_velocity_dcd_frequency'))
+
+    x_namd_inout_control_velocity_dcd_first_step = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_velocity_dcd_first_step'))
+
+    x_namd_inout_control_force_dcd_filename = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_force_dcd_filename'))
+
+    x_namd_inout_control_force_dcd_frequency = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_force_dcd_frequency'))
+
+    x_namd_inout_control_force_dcd_first_step = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_force_dcd_first_step'))
+
+    x_namd_inout_control_output_filename = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_output_filename'))
+
+    x_namd_inout_control_binary_output = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_binary_output'))
+
+    x_namd_inout_control_restart_filename = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_restart_filename'))
+
+    x_namd_inout_control_restart_frequency = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_restart_frequency'))
+
+    x_namd_inout_control_binary_restart = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_binary_restart'))
+
+    x_namd_inout_control_switching = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_switching'))
+
+    x_namd_inout_control_switching_on = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_switching_on'))
+
+    x_namd_inout_control_switching_off = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_switching_off'))
+
+    x_namd_inout_control_pairlist_distance = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_pairlist_distance'))
+
+    x_namd_inout_control_pairlist_shrink_rate = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_pairlist_shrink_rate'))
+
+    x_namd_inout_control_pairlist_grow_rate = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_pairlist_grow_rate'))
+
+    x_namd_inout_control_pairlist_trigger = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_pairlist_trigger'))
+
+    x_namd_inout_control_pairlists_per_cycle = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_pairlists_per_cycle'))
+
+    x_namd_inout_control_pairlists = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_pairlists'))
+
+    x_namd_inout_control_margin = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_margin'))
+
+    x_namd_inout_control_hydrogen_group_cutoff = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_hydrogen_group_cutoff'))
+
+    x_namd_inout_control_patch_dimension = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_patch_dimension'))
+
+    x_namd_inout_control_energy_output_steps = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_energy_output_steps'))
+
+    x_namd_inout_control_crossterm_energy = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_crossterm_energy'))
+
+    x_namd_inout_control_timing_output_steps = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_timing_output_steps'))
+
+    x_namd_inout_control_velocity_rescale_freq = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_velocity_rescale_freq'))
+
+    x_namd_inout_control_velocity_rescale_temp = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_velocity_rescale_temp'))
+
+    x_namd_inout_control_velocity_reassignment_freq = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_velocity_reassignment_freq'))
+
+    x_namd_inout_control_velocity_reassignment_temp = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_velocity_reassignment_temp'))
+
+    x_namd_inout_control_velocity_reassignment_incr = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_velocity_reassignment_incr'))
+
+    x_namd_inout_control_velocity_reassignment_hold = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_velocity_reassignment_hold'))
+
+    x_namd_inout_control_lowe_andersen_dynamics = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_lowe_andersen_dynamics'))
+
+    x_namd_inout_control_lowe_andersen_temperature = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_lowe_andersen_temperature'))
+
+    x_namd_inout_control_lowe_andersen_rate = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_lowe_andersen_rate'))
+
+    x_namd_inout_control_lowe_andersen_cutoff = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_lowe_andersen_cutoff'))
+
+    x_namd_inout_control_langevin_dynamics = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_langevin_dynamics'))
+
+    x_namd_inout_control_langevin_temperature = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_langevin_temperature'))
+
+    x_namd_inout_control_langevin_integrator = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_langevin_integrator'))
+
+    x_namd_inout_control_langevin_damping_file = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_langevin_damping_file'))
+
+    x_namd_inout_control_langevin_damping_column = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_langevin_damping_column'))
+
+    x_namd_inout_control_langevin_damping_coefficient_unit = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_langevin_damping_coefficient_unit'))
+
+    x_namd_inout_control_langevin_dynamics_not_applied_to = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_langevin_dynamics_not_applied_to'))
+
+    x_namd_inout_control_temperature_coupling = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_temperature_coupling'))
+
+    x_namd_inout_control_coupling_temperature = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_coupling_temperature'))
+
+    x_namd_inout_control_berendsen_pressure_coupling = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_berendsen_pressure_coupling'))
+
+    x_namd_inout_control_berendsen_compressibility_estimate = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_berendsen_compressibility_estimate'))
+
+    x_namd_inout_control_berendsen_relaxation_time = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_berendsen_relaxation_time'))
+
+    x_namd_inout_control_berendsen_coupling_frequency = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_berendsen_coupling_frequency'))
+
+    x_namd_inout_control_langevin_piston_pressure_control = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_langevin_piston_pressure_control'))
+
+    x_namd_inout_control_target_pressure = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_target_pressure'))
+
+    x_namd_inout_control_langevin_oscillation_period = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_langevin_oscillation_period'))
+
+    x_namd_inout_control_langevin_decay_time = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_langevin_decay_time'))
+
+    x_namd_inout_control_langevin_piston_temperature = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_langevin_piston_temperature'))
+
+    x_namd_inout_control_pressure_control = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_pressure_control'))
+
+    x_namd_inout_control_initial_strain_rate = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_initial_strain_rate'))
+
+    x_namd_inout_control_cell_fluctuation = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_cell_fluctuation'))
+
+    x_namd_inout_control_particle_mesh_ewald = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_particle_mesh_ewald'))
+
+    x_namd_inout_control_pme_tolerance = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_pme_tolerance'))
+
+    x_namd_inout_control_pme_ewald_coefficient = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_pme_ewald_coefficient'))
+
+    x_namd_inout_control_pme_interpolation_order = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_pme_interpolation_order'))
+
+    x_namd_inout_control_pme_grid_dimensions = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_pme_grid_dimensions'))
+
+    x_namd_inout_control_pme_maximum_grid_spacing = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_pme_maximum_grid_spacing'))
+
+    x_namd_inout_control_fftw_data_file = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_fftw_data_file'))
+
+    x_namd_inout_control_full_electrostatic_evaluation_frequency = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_full_electrostatic_evaluation_frequency'))
+
+    x_namd_inout_control_minimization = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_minimization'))
+
+    x_namd_inout_control_velocity_quenching = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_velocity_quenching'))
+
+    x_namd_inout_control_verlet_integrator = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_verlet_integrator'))
+
+    x_namd_inout_control_random_number_seed = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_random_number_seed'))
+
+    x_namd_inout_control_use_hydrogen_bonds = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_use_hydrogen_bonds'))
+
+    x_namd_inout_control_coordinate_pdb = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_coordinate_pdb'))
+
+    x_namd_inout_control_structure_file = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_structure_file'))
+
+    x_namd_inout_control_parameter_file = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_parameter_file'))
+
+    x_namd_inout_control_number_of_parameters = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_number_of_parameters'))
+
+    x_namd_inout_control_parameters = Quantity(
+        type=str,
+        shape=['x_namd_inout_control_number_of_parameters'],
+        description='''
+        NAMD running environment and control parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_inout_control_parameters'))
+
+
+class x_namd_section_atom_to_atom_type_ref(MSection):
+    '''
+    Section to store atom label to atom type definition list
+    '''
+
+    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_namd_section_atom_to_atom_type_ref'))
+
+    x_namd_atom_to_atom_type_ref = Quantity(
+        type=np.dtype(np.int64),
+        shape=['number_of_atoms_per_type'],
+        description='''
+        Reference to the atoms of each atom type.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_atom_to_atom_type_ref'))
+
+
+class x_namd_section_single_configuration_calculation(MSection):
+    '''
+    section for gathering values for MD steps
+    '''
+
+    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_namd_section_single_configuration_calculation'))
+
+
+class section_system(public.section_system):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_system'))
+
+    x_namd_atom_positions_image_index = Quantity(
+        type=np.dtype(np.int32),
+        shape=['number_of_atoms', 3],
+        unit='dimensionless',
+        description='''
+        PBC image flag index.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_atom_positions_image_index'))
+
+    x_namd_atom_positions_scaled = Quantity(
+        type=np.dtype(np.float64),
+        shape=['number_of_atoms', 3],
+        unit='dimensionless',
+        description='''
+        Position of the atoms in a scaled format [0, 1].
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_atom_positions_scaled'))
+
+    x_namd_atom_positions_wrapped = Quantity(
+        type=np.dtype(np.float64),
+        shape=['number_of_atoms', 3],
+        unit='meter',
+        description='''
+        Position of the atoms wrapped back to the periodic box.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_atom_positions_wrapped'))
+
+    x_namd_lattice_lengths = Quantity(
+        type=np.dtype(np.float64),
+        shape=[3],
+        description='''
+        Lattice dimensions in a vector. Vector includes [a, b, c] lengths.
+        ''',
+        categories=[public.configuration_core],
+        a_legacy=LegacyDefinition(name='x_namd_lattice_lengths'))
+
+    x_namd_lattice_angles = Quantity(
+        type=np.dtype(np.float64),
+        shape=[3],
+        description='''
+        Angles of lattice vectors. Vector includes [alpha, beta, gamma] in degrees.
+        ''',
+        categories=[public.configuration_core],
+        a_legacy=LegacyDefinition(name='x_namd_lattice_angles'))
+
+    x_namd_dummy = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        dummy
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_dummy'))
+
+    x_namd_mdin_finline = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        finline in mdin
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_mdin_finline'))
+
+    x_namd_traj_timestep_store = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_traj_timestep_store'))
+
+    x_namd_traj_number_of_atoms_store = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_traj_number_of_atoms_store'))
+
+    x_namd_traj_box_bound_store = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_traj_box_bound_store'))
+
+    x_namd_traj_box_bounds_store = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_traj_box_bounds_store'))
+
+    x_namd_traj_variables_store = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_traj_variables_store'))
+
+    x_namd_traj_atoms_store = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_traj_atoms_store'))
+
+
+class section_sampling_method(public.section_sampling_method):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_sampling_method'))
+
+    x_namd_barostat_target_pressure = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='pascal',
+        description='''
+        MD barostat target pressure.
+        ''',
+        categories=[public.settings_molecular_dynamics, public.settings_sampling, public.settings_barostat],
+        a_legacy=LegacyDefinition(name='x_namd_barostat_target_pressure'))
+
+    x_namd_barostat_tau = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='second',
+        description='''
+        MD barostat relaxation time.
+        ''',
+        categories=[public.settings_molecular_dynamics, public.settings_sampling, public.settings_barostat],
+        a_legacy=LegacyDefinition(name='x_namd_barostat_tau'))
+
+    x_namd_barostat_type = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        MD barostat type, valid values are defined in the barostat_type wiki page.
+        ''',
+        categories=[public.settings_molecular_dynamics, public.settings_sampling, public.settings_barostat],
+        a_legacy=LegacyDefinition(name='x_namd_barostat_type'))
+
+    x_namd_integrator_dt = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='second',
+        description='''
+        MD integration time step.
+        ''',
+        categories=[public.settings_molecular_dynamics, public.settings_sampling, public.settings_integrator],
+        a_legacy=LegacyDefinition(name='x_namd_integrator_dt'))
+
+    x_namd_integrator_type = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        MD integrator type, valid values are defined in the integrator_type wiki page.
+        ''',
+        categories=[public.settings_molecular_dynamics, public.settings_sampling, public.settings_integrator],
+        a_legacy=LegacyDefinition(name='x_namd_integrator_type'))
+
+    x_namd_periodicity_type = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Periodic boundary condition type in the sampling (non-PBC or PBC).
+        ''',
+        categories=[public.settings_molecular_dynamics, public.settings_sampling, public.settings_integrator],
+        a_legacy=LegacyDefinition(name='x_namd_periodicity_type'))
+
+    x_namd_langevin_gamma = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='second',
+        description='''
+        Langevin thermostat damping factor.
+        ''',
+        categories=[public.settings_sampling, public.settings_molecular_dynamics, public.settings_thermostat],
+        a_legacy=LegacyDefinition(name='x_namd_langevin_gamma'))
+
+    x_namd_number_of_steps_requested = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Number of requested MD integration time steps.
+        ''',
+        categories=[public.settings_molecular_dynamics, public.settings_sampling, public.settings_integrator],
+        a_legacy=LegacyDefinition(name='x_namd_number_of_steps_requested'))
+
+    x_namd_thermostat_level = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        MD thermostat level (see wiki: single, multiple, regional).
+        ''',
+        categories=[public.settings_sampling, public.settings_molecular_dynamics, public.settings_thermostat],
+        a_legacy=LegacyDefinition(name='x_namd_thermostat_level'))
+
+    x_namd_thermostat_target_temperature = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='kelvin',
+        description='''
+        MD thermostat target temperature.
+        ''',
+        categories=[public.settings_sampling, public.settings_molecular_dynamics, public.settings_thermostat],
+        a_legacy=LegacyDefinition(name='x_namd_thermostat_target_temperature'))
+
+    x_namd_thermostat_tau = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='second',
+        description='''
+        MD thermostat relaxation time.
+        ''',
+        categories=[public.settings_sampling, public.settings_molecular_dynamics, public.settings_thermostat],
+        a_legacy=LegacyDefinition(name='x_namd_thermostat_tau'))
+
+    x_namd_thermostat_type = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        MD thermostat type, valid values are defined in the thermostat_type wiki page.
+        ''',
+        categories=[public.settings_sampling, public.settings_molecular_dynamics, public.settings_thermostat],
+        a_legacy=LegacyDefinition(name='x_namd_thermostat_type'))
+
+
+class section_atom_type(common.section_atom_type):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_atom_type'))
+
+    x_namd_atom_name = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Atom name of an atom in topology definition.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_atom_name'))
+
+    x_namd_atom_type = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Atom type of an atom in topology definition.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_atom_type'))
+
+    x_namd_atom_element = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Atom type of an atom in topology definition.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_atom_element'))
+
+    x_namd_atom_type_element = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Element symbol of an atom type.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_atom_type_element'))
+
+    x_namd_atom_type_radius = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        van der Waals radius of an atom type.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_atom_type_radius'))
+
+    number_of_atoms_per_type = Quantity(
+        type=int,
+        shape=[],
+        description='''
+        Number of atoms involved in this type.
+        ''',
+        a_legacy=LegacyDefinition(name='number_of_atoms_per_type'))
+
+
+class section_interaction(common.section_interaction):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_interaction'))
+
+    x_namd_interaction_atom_to_atom_type_ref = Quantity(
+        type=common.section_atom_type,
+        shape=['number_of_atoms_per_interaction'],
+        description='''
+        Reference to the atom type of each interaction atoms.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_interaction_atom_to_atom_type_ref'))
+
+    x_namd_number_of_defined_pair_interactions = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        Number of defined pair interactions (L-J pairs).
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_number_of_defined_pair_interactions'))
+
+    x_namd_pair_interaction_atom_type_ref = Quantity(
+        type=common.section_atom_type,
+        shape=['x_namd_number_of_defined_pair_interactions', 'number_of_atoms_per_interaction'],
+        description='''
+        Reference to the atom type for pair interactions.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_pair_interaction_atom_type_ref'))
+
+    x_namd_pair_interaction_parameters = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_namd_number_of_defined_pair_interactions', 2],
+        description='''
+        Pair interactions parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_pair_interaction_parameters'))
+
+
+class section_molecule_interaction(common.section_molecule_interaction):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_molecule_interaction'))
+
+    x_namd_molecule_interaction_atom_to_atom_type_ref = Quantity(
+        type=common.section_atom_type,
+        shape=['number_of_atoms_per_interaction'],
+        description='''
+        Reference to the atom type of each molecule interaction atoms.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_molecule_interaction_atom_to_atom_type_ref'))
+
+    x_namd_number_of_defined_molecule_pair_interactions = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        Number of defined pair interactions within a molecule (L-J pairs).
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_number_of_defined_molecule_pair_interactions'))
+
+    x_namd_pair_molecule_interaction_parameters = Quantity(
+        type=np.dtype(np.float64),
+        shape=['number_of_defined_molecule_pair_interactions', 2],
+        description='''
+        Molecule pair interactions parameters.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_pair_molecule_interaction_parameters'))
+
+    x_namd_pair_molecule_interaction_to_atom_type_ref = Quantity(
+        type=common.section_atom_type,
+        shape=['x_namd_number_of_defined_pair_interactions', 'number_of_atoms_per_interaction'],
+        description='''
+        Reference to the atom type for pair interactions within a molecule.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_pair_molecule_interaction_to_atom_type_ref'))
+
+
+class section_run(public.section_run):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_run'))
+
+    x_namd_program_version_date = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Program version date.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_program_version_date'))
+
+    x_namd_parallel_task_nr = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Program task no.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_parallel_task_nr'))
+
+    x_namd_build_osarch = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Program Build OS/ARCH
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_build_osarch'))
+
+    x_namd_program_build_date = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Program Build date
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_program_build_date'))
+
+    x_namd_program_citation = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Program citations
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_program_citation'))
+
+    x_namd_number_of_tasks = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Number of tasks in parallel program (MPI).
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_number_of_tasks'))
+
+    x_namd_program_module_version = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD program module version.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_program_module_version'))
+
+    x_namd_program_license = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        NAMD program license.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_program_license'))
+
+    x_namd_xlo_xhi = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        test
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_xlo_xhi'))
+
+    x_namd_data_file_store = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Filename of data file
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_data_file_store'))
+
+    x_namd_program_working_path = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_program_working_path'))
+
+    x_namd_program_execution_host = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_program_execution_host'))
+
+    x_namd_program_execution_path = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_program_execution_path'))
+
+    x_namd_program_module = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_program_module'))
+
+    x_namd_program_execution_date = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_program_execution_date'))
+
+    x_namd_program_execution_time = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_program_execution_time'))
+
+    x_namd_mdin_header = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_mdin_header'))
+
+    x_namd_mdin_wt = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_mdin_wt'))
+
+    x_namd_section_input_output_files = SubSection(
+        sub_section=SectionProxy('x_namd_section_input_output_files'),
+        repeats=True,
+        a_legacy=LegacyDefinition(name='x_namd_section_input_output_files'))
+
+    x_namd_section_control_parameters = SubSection(
+        sub_section=SectionProxy('x_namd_section_control_parameters'),
+        repeats=True,
+        a_legacy=LegacyDefinition(name='x_namd_section_control_parameters'))
+
+
+class section_topology(common.section_topology):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_topology'))
+
+    x_namd_input_units_store = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        It determines the units of all quantities specified in the input script and data
+        file, as well as quantities output to the screen, log file, and dump files.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_input_units_store'))
+
+    x_namd_data_bond_types_store = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        store temporarly
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_data_bond_types_store'))
+
+    x_namd_data_bond_count_store = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        store temporarly
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_data_bond_count_store'))
+
+    x_namd_data_angle_count_store = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        store temporarly
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_data_angle_count_store'))
+
+    x_namd_data_atom_types_store = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        store temporarly
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_data_atom_types_store'))
+
+    x_namd_data_dihedral_count_store = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        store temporarly
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_data_dihedral_count_store'))
+
+    x_namd_data_angles_store = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        store temporarly
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_data_angles_store'))
+
+    x_namd_data_angle_list_store = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_data_angle_list_store'))
+
+    x_namd_data_bond_list_store = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_data_bond_list_store'))
+
+    x_namd_data_dihedral_list_store = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_data_dihedral_list_store'))
+
+    x_namd_data_dihedral_coeff_list_store = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_data_dihedral_coeff_list_store'))
+
+    x_namd_masses_store = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_masses_store'))
+
+    x_namd_data_topo_list_store = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        tmp
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_data_topo_list_store'))
+
+    x_namd_section_atom_to_atom_type_ref = SubSection(
+        sub_section=SectionProxy('x_namd_section_atom_to_atom_type_ref'),
+        repeats=True,
+        a_legacy=LegacyDefinition(name='x_namd_section_atom_to_atom_type_ref'))
+
+
+class section_frame_sequence(public.section_frame_sequence):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_frame_sequence'))
+
+    x_namd_number_of_volumes_in_sequence = Quantity(
+        type=int,
+        shape=[],
+        description='''
+        Gives the number of volumes in this sequence of frames, see
+        x_namd_frame_sequence_volume.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_number_of_volumes_in_sequence'))
+
+    x_namd_number_of_densities_in_sequence = Quantity(
+        type=int,
+        shape=[],
+        description='''
+        Gives the number of densities in this sequence of frames, see
+        x_namd_frame_sequence_density.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_number_of_densities_in_sequence'))
+
+    x_namd_number_of_bond_energies_in_sequence = Quantity(
+        type=int,
+        shape=[],
+        description='''
+        Gives the number of bond_energies in this sequence of frames, see
+        x_namd_frame_sequence_bond_energy.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_number_of_bond_energies_in_sequence'))
+
+    x_namd_number_of_angle_energies_in_sequence = Quantity(
+        type=int,
+        shape=[],
+        description='''
+        Gives the number of angle_energies in this sequence of frames, see
+        x_namd_frame_sequence_angle_energy.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_number_of_angle_energies_in_sequence'))
+
+    x_namd_number_of_proper_dihedral_energies_in_sequence = Quantity(
+        type=int,
+        shape=[],
+        description='''
+        Gives the number of proper_dihedral_energies in this sequence of frames, see
+        x_namd_frame_sequence_proper_dihedral_energy.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_number_of_proper_dihedral_energies_in_sequence'))
+
+    x_namd_number_of_improper_dihedral_energies_in_sequence = Quantity(
+        type=int,
+        shape=[],
+        description='''
+        Gives the number of improper_dihedral_energies in this sequence of frames, see
+        x_namd_frame_sequence_improper_dihedral_energy.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_number_of_improper_dihedral_energies_in_sequence'))
+
+    x_namd_number_of_cmap_dihedral_energies_in_sequence = Quantity(
+        type=int,
+        shape=[],
+        description='''
+        Gives the number of cmap_dihedral_energies in this sequence of frames, see
+        x_namd_frame_sequence_cmap_dihedral_energy.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_number_of_cmap_dihedral_energies_in_sequence'))
+
+    x_namd_number_of_vdw_energies_in_sequence = Quantity(
+        type=int,
+        shape=[],
+        description='''
+        Gives the number of vdw_energies in this sequence of frames, see
+        x_namd_frame_sequence_vdw_energy.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_number_of_vdw_energies_in_sequence'))
+
+    x_namd_number_of_boundary_energies_in_sequence = Quantity(
+        type=int,
+        shape=[],
+        description='''
+        Gives the number of boundary_energies in this sequence of frames, see
+        x_namd_frame_sequence_boundary_energy.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_number_of_boundary_energies_in_sequence'))
+
+    x_namd_number_of_electrostatic_energies_in_sequence = Quantity(
+        type=int,
+        shape=[],
+        description='''
+        Gives the number of electrostatic_energies in this sequence of frames, see
+        x_namd_frame_sequence_electrostatic_energy.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_number_of_electrostatic_energies_in_sequence'))
+
+    x_namd_number_of_total2_energies_in_sequence = Quantity(
+        type=int,
+        shape=[],
+        description='''
+        Gives the number of total2_energies in this sequence of frames, see
+        x_namd_frame_sequence_total2_energy.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_number_of_total2_energies_in_sequence'))
+
+    x_namd_number_of_total3_energies_in_sequence = Quantity(
+        type=int,
+        shape=[],
+        description='''
+        Gives the number of total3_energies in this sequence of frames, see
+        x_namd_frame_sequence_total3_energy.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_number_of_total3_energies_in_sequence'))
+
+    x_namd_number_of_misc_energies_in_sequence = Quantity(
+        type=int,
+        shape=[],
+        description='''
+        Gives the number of misc_energies in this sequence of frames, see
+        x_namd_frame_sequence_misc_energy.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_number_of_misc_energies_in_sequence'))
+
+    x_namd_frame_sequence_density_frames = Quantity(
+        type=np.dtype(np.int32),
+        shape=['x_namd_number_of_densities_in_sequence'],
+        description='''
+        Array containing the strictly increasing indices of the frames the
+        x_namd_frame_sequence_densities values refers to. If not given it defaults to the
+        trivial mapping 0,1,...
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_density_frames'))
+
+    x_namd_frame_sequence_density = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_namd_number_of_densities_in_sequence'],
+        description='''
+        Array containing the values of the density along this sequence of frames (i.e., a
+        trajectory, a frame is one section_single_configuration_calculation). If not all
+        frames have a value the indices of the frames that have a value are stored in
+        frame_sequence_density_frames.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_density'))
+
+    x_namd_frame_sequence_cmap_dihedral_energy_frames = Quantity(
+        type=np.dtype(np.int32),
+        shape=['x_namd_number_of_cmap_dihedral_energy_in_sequence'],
+        description='''
+        Array containing the strictly increasing indices of the frames the
+        x_namd_frame_sequence_cmap_dihedral_energy values refers to. If not given it
+        defaults to the trivial mapping 0,1,...
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_cmap_dihedral_energy_frames'))
+
+    x_namd_frame_sequence_cmap_dihedral_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_namd_number_of_cmap_dihedral_energy_in_sequence'],
+        description='''
+        Array containing the values of the cmap_dihedral_energy along this sequence of
+        frames (i.e., a trajectory, a frame is one
+        section_single_configuration_calculation). If not all frames have a value the
+        indices of the frames that have a value are stored in
+        frame_sequence_cmap_dihedral_energy_frames.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_cmap_dihedral_energy'))
+
+    x_namd_frame_sequence_improper_dihedral_energy_frames = Quantity(
+        type=np.dtype(np.int32),
+        shape=['x_namd_number_of_improper_dihedral_energy_in_sequence'],
+        description='''
+        Array containing the strictly increasing indices of the frames the
+        x_namd_frame_sequence_improper_dihedral_energy values refers to. If not given it
+        defaults to the trivial mapping 0,1,...
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_improper_dihedral_energy_frames'))
+
+    x_namd_frame_sequence_improper_dihedral_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_namd_number_of_improper_dihedral_energy_in_sequence'],
+        description='''
+        Array containing the values of the improper_dihedral_energy along this sequence of
+        frames (i.e., a trajectory, a frame is one
+        section_single_configuration_calculation). If not all frames have a value the
+        indices of the frames that have a value are stored in
+        frame_sequence_improper_dihedral_energy_frames.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_improper_dihedral_energy'))
+
+    x_namd_frame_sequence_proper_dihedral_energy_frames = Quantity(
+        type=np.dtype(np.int32),
+        shape=['x_namd_number_of_proper_dihedral_energy_in_sequence'],
+        description='''
+        Array containing the strictly increasing indices of the frames the
+        x_namd_frame_sequence_proper_dihedral_energy values refers to. If not given it
+        defaults to the trivial mapping 0,1,...
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_proper_dihedral_energy_frames'))
+
+    x_namd_frame_sequence_proper_dihedral_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_namd_number_of_proper_dihedral_energy_in_sequence'],
+        description='''
+        Array containing the values of the proper_dihedral_energy along this sequence of
+        frames (i.e., a trajectory, a frame is one
+        section_single_configuration_calculation). If not all frames have a value the
+        indices of the frames that have a value are stored in
+        frame_sequence_proper_dihedral_energy_frames.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_proper_dihedral_energy'))
+
+    x_namd_frame_sequence_bond_energy_frames = Quantity(
+        type=np.dtype(np.int32),
+        shape=['x_namd_number_of_bond_energies_in_sequence'],
+        description='''
+        Array containing the strictly increasing indices of the frames the
+        x_namd_frame_sequence_bond_energy values refers to. If not given it defaults to
+        the trivial mapping 0,1,...
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_bond_energy_frames'))
+
+    x_namd_frame_sequence_bond_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_namd_number_of_bond_energies_in_sequence'],
+        description='''
+        Array containing the values of the bond_energy along this sequence of frames
+        (i.e., a trajectory, a frame is one section_single_configuration_calculation). If
+        not all frames have a value the indices of the frames that have a value are stored
+        in frame_sequence_bond_energy_frames.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_bond_energy'))
+
+    x_namd_frame_sequence_boundary_frames = Quantity(
+        type=np.dtype(np.int32),
+        shape=['x_namd_number_of_boundary_energies_in_sequence'],
+        description='''
+        Array containing the strictly increasing indices of the frames the
+        x_namd_frame_sequence_boundary values refers to. If not given it defaults to the
+        trivial mapping 0,1,...
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_boundary_frames'))
+
+    x_namd_frame_sequence_boundary = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_namd_number_of_boundary_energies_in_sequence'],
+        description='''
+        Array containing the values of the boundary along this sequence of frames (i.e., a
+        trajectory, a frame is one section_single_configuration_calculation). If not all
+        frames have a value the indices of the frames that have a value are stored in
+        frame_sequence_boundary_frames.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_boundary'))
+
+    x_namd_frame_sequence_angle_energy_frames = Quantity(
+        type=np.dtype(np.int32),
+        shape=['x_namd_number_of_angle_energies_in_sequence'],
+        description='''
+        Array containing the strictly increasing indices of the frames the
+        x_namd_frame_sequence_angle_energy values refers to. If not given it defaults to
+        the trivial mapping 0,1,...
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_angle_energy_frames'))
+
+    x_namd_frame_sequence_angle_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_namd_number_of_angle_energies_in_sequence'],
+        description='''
+        Array containing the values of the angle_energy along this sequence of frames
+        (i.e., a trajectory, a frame is one section_single_configuration_calculation). If
+        not all frames have a value the indices of the frames that have a value are stored
+        in frame_sequence_angle_energy_frames.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_angle_energy'))
+
+    x_namd_frame_sequence_vdw_energy_frames = Quantity(
+        type=np.dtype(np.int32),
+        shape=['x_namd_number_of_vdw_energies_in_sequence'],
+        description='''
+        Array containing the strictly increasing indices of the frames the
+        x_namd_frame_sequence_vdw_energy values refers to. If not given it defaults to the
+        trivial mapping 0,1,...
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_vdw_energy_frames'))
+
+    x_namd_frame_sequence_vdw_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_namd_number_of_vdw_energies_in_sequence'],
+        description='''
+        Array containing the values of the vdw_energy along this sequence of frames (i.e.,
+        a trajectory, a frame is one section_single_configuration_calculation). If not all
+        frames have a value the indices of the frames that have a value are stored in
+        frame_sequence_vdw_energy_frames.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_vdw_energy'))
+
+    x_namd_frame_sequence_electrostatic_energy_frames = Quantity(
+        type=np.dtype(np.int32),
+        shape=['x_namd_number_of_electrostatic_energies_in_sequence'],
+        description='''
+        Array containing the strictly increasing indices of the frames the
+        x_namd_frame_sequence_electrostatic_energy values refers to. If not given it
+        defaults to the trivial mapping 0,1,...
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_electrostatic_energy_frames'))
+
+    x_namd_frame_sequence_electrostatic_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_namd_number_of_electrostatic_energies_in_sequence'],
+        description='''
+        Array containing the values of the electrostatic_energy along this sequence of
+        frames (i.e., a trajectory, a frame is one
+        section_single_configuration_calculation). If not all frames have a value the
+        indices of the frames that have a value are stored in
+        frame_sequence_electrostatic_energy_frames.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_electrostatic_energy'))
+
+    x_namd_frame_sequence_total2_energy_frames = Quantity(
+        type=np.dtype(np.int32),
+        shape=['x_namd_number_of_total2_energies_in_sequence'],
+        description='''
+        Array containing the strictly increasing indices of the frames the
+        x_namd_frame_sequence_total2_energy values refers to. If not given it defaults to
+        the trivial mapping 0,1,...
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_total2_energy_frames'))
+
+    x_namd_frame_sequence_total2_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_namd_number_of_total2_energies_in_sequence'],
+        description='''
+        Array containing the values of the total2_energy along this sequence of frames
+        (i.e., a trajectory, a frame is one section_single_configuration_calculation). If
+        not all frames have a value the indices of the frames that have a value are stored
+        in frame_sequence_total2_energy_frames.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_total2_energy'))
+
+    x_namd_frame_sequence_total3_energy_frames = Quantity(
+        type=np.dtype(np.int32),
+        shape=['x_namd_number_of_total3_energies_in_sequence'],
+        description='''
+        Array containing the strictly increasing indices of the frames the
+        x_namd_frame_sequence_total3_energy values refers to. If not given it defaults to
+        the trivial mapping 0,1,...
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_total3_energy_frames'))
+
+    x_namd_frame_sequence_total3_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_namd_number_of_total3_energies_in_sequence'],
+        description='''
+        Array containing the values of the total3_energy along this sequence of frames
+        (i.e., a trajectory, a frame is one section_single_configuration_calculation). If
+        not all frames have a value the indices of the frames that have a value are stored
+        in frame_sequence_total3_energy_frames.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_total3_energy'))
+
+    x_namd_frame_sequence_misc_energy_frames = Quantity(
+        type=np.dtype(np.int32),
+        shape=['x_namd_number_of_misc_energies_in_sequence'],
+        description='''
+        Array containing the strictly increasing indices of the frames the
+        x_namd_frame_sequence_misc_energy values refers to. If not given it defaults to
+        the trivial mapping 0,1,...
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_misc_energy_frames'))
+
+    x_namd_frame_sequence_misc_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_namd_number_of_misc_energies_in_sequence'],
+        description='''
+        Array containing the values of the misc_energy along this sequence of frames
+        (i.e., a trajectory, a frame is one section_single_configuration_calculation). If
+        not all frames have a value the indices of the frames that have a value are stored
+        in frame_sequence_misc_energy_frames.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_misc_energy'))
+
+    x_namd_frame_sequence_volume_frames = Quantity(
+        type=np.dtype(np.int32),
+        shape=['x_namd_number_of_volumes_in_sequence'],
+        description='''
+        Array containing the strictly increasing indices of the frames the
+        x_namd_frame_sequence_volume values refers to. If not given it defaults to the
+        trivial mapping 0,1,...
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_volume_frames'))
+
+    x_namd_frame_sequence_volume = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_namd_number_of_volumes_in_sequence'],
+        description='''
+        Array containing the values of the volume along this sequence of frames (i.e., a
+        trajectory, a frame is one section_single_configuration_calculation). If not all
+        frames have a value the indices of the frames that have a value are stored in
+        frame_sequence_volume_frames.
+        ''',
+        a_legacy=LegacyDefinition(name='x_namd_frame_sequence_volume'))
+
+
+class section_single_configuration_calculation(public.section_single_configuration_calculation):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_single_configuration_calculation'))
+
+    x_namd_section_single_configuration_calculation = SubSection(
+        sub_section=SectionProxy('x_namd_section_single_configuration_calculation'),
+        repeats=True,
+        a_legacy=LegacyDefinition(name='x_namd_section_single_configuration_calculation'))
+
+
+m_package.__init_metainfo__()
diff --git a/parser/parser-namd/setup_paths.py b/setup.py
similarity index 55%
rename from parser/parser-namd/setup_paths.py
rename to setup.py
index f13f57280e68c2733a9b291d81fdd080dd19f9a7..2e7df3a996c6280b15d52599cbf6d21ec0c8e996 100644
--- a/parser/parser-namd/setup_paths.py
+++ b/setup.py
@@ -1,22 +1,34 @@
-# Copyright 2018-2018 Berk Onat, Fawzi Mohamed
-# 
+# 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.
 
-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"))
+from setuptools import setup, find_packages
 
-if not commondir in sys.path:
-    sys.path.insert(0, commondir)
+
+def main():
+    setup(
+        name='namdparser',
+        version='0.1',
+        description='NOMAD parser implementation for Namd.',
+        license='APACHE 2.0',
+        package_dir={'': './'},
+        packages=find_packages(),
+        install_requires=[
+            'nomadcore',
+            'nomad'
+        ],
+    )
+
+
+if __name__ == '__main__':
+    main()
diff --git a/src/main/scala/eu/nomad_lab/parsers/NAMDParser.scala b/src/main/scala/eu/nomad_lab/parsers/NAMDParser.scala
deleted file mode 100644
index 59d9dc6c281b44c5bec8d34ce56b81d64d8a11cc..0000000000000000000000000000000000000000
--- a/src/main/scala/eu/nomad_lab/parsers/NAMDParser.scala
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2018-2018 Berk Onat, Fawzi Mohamed
- * 
- *   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.
- */
-
-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 NamdParser extends SimpleExternalParserGenerator(
-  name = "NamdParser",
-  parserInfo = jn.JObject(
-    ("name" -> jn.JString("NamdParser")) ::
-      ("parserId" -> jn.JString("NamdParser" + lab.NamdVersionInfo.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.NamdVersionInfo.toMap.map {
-            case (key, value) =>
-              (key -> jn.JString(value.toString))
-          }(breakOut): List[(String, jn.JString)])
-      )) :: Nil
-  ),
-  mainFileTypes = Seq("text/.*"),
-  mainFileRe = """\s*Info:\s*NAMD\s*[0-9.]+\s*for\s*""".r,
-  cmd = Seq(DefaultPythonInterpreter.pythonExe(), "${envDir}/parsers/namd/parser/parser-namd/NAMDParser.py",
-    "${mainFilePath}"),
-  resList = Seq(
-    "parser-namd/NAMDParser.py",
-    "parser-namd/NAMDDictionary.py",
-    "parser-namd/NAMDCommon.py",
-    "parser-namd/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/namd.nomadmetainfo.json"
-  ) ++ DefaultPythonInterpreter.commonFiles(),
-  dirMap = Map(
-    "parser-namd" -> "parsers/namd/parser/parser-namd",
-    "nomad_meta_info" -> "nomad-meta-info/meta_info/nomad_meta_info",
-    "python" -> "python-common/common/python/nomadcore"
-  ) ++ DefaultPythonInterpreter.commonDirMapping(),
-  metaInfoEnv = Some(lab.meta.KnownMetaInfoEnvs.namd)
-)
-
diff --git a/src/test/scala/eu/nomad_lab/parsers/NAMDParserSpec.scala b/src/test/scala/eu/nomad_lab/parsers/NAMDParserSpec.scala
deleted file mode 100644
index d38d2a15218f60b45b2d72972bc83ab383ed9739..0000000000000000000000000000000000000000
--- a/src/test/scala/eu/nomad_lab/parsers/NAMDParserSpec.scala
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2018-2018 Berk Onat, Fawzi Mohamed
- * 
- *   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.
- */
-
-package eu.nomad_lab.parsers
-
-import org.specs2.mutable.Specification
-
-object NamdParserTests extends Specification {
-  "NAMDParserTest" >> {
-    "[tiny with 507 atoms] test with json-events" >> {
-      ParserRun.parse(NamdParser, "parsers/namd/test/examples/tiny/tiny.log", "json-events") must_== ParseResult.ParseSuccess
-    }
-    "[tiny with 507 atoms] test with json" >> {
-      ParserRun.parse(NamdParser, "parsers/namd/test/examples/tiny/tiny.log", "json") must_== ParseResult.ParseSuccess
-    }
-    "[apoa1-trajectory with 92224 atoms] test with json-events" >> {
-      ParserRun.parse(NamdParser, "parsers/namd/test/examples/apoa1-trajectory/apoa1.log", "json-events") must_== ParseResult.ParseSuccess
-    }
-    "[apoa1-trajectory with 92224 atoms] test with json" >> {
-      ParserRun.parse(NamdParser, "parsers/namd/test/examples/apoa1-trajectory/apoa1.log", "json") must_== ParseResult.ParseSuccess
-    }
-  }
-}