diff --git a/parser/parser-asap/parser_asap.py b/parser/parser-asap/parser_asap.py index 386818da6b726fc2c4f872b0079d6696a9c76c05..968b1b74a7b45dfd74edd480f408e647f6e4d974 100644 --- a/parser/parser-asap/parser_asap.py +++ b/parser/parser-asap/parser_asap.py @@ -37,14 +37,27 @@ metaInfoEnv, warns = loadJsonFile(filePath=metaInfoPath, def parse(filename): + t = Trajectory(filename, 'r') + # some sanity checks + if hasattr(t.backend, 'calculator'): + if t.backend.calculator.get('name') != 'emt': # Asap reports 'emt'! + return + + if hasattr(t, 'description'): # getting ready for improved traj format + ds = t.description + else: + ds = {} + p = JsonParseEventsWriterBackend(metaInfoEnv) o = open_section - t = Trajectory(filename, 'r') p.startedParsingSession(filename, parser_info) - with o(p, 'section_run'): p.addValue('program_name', 'ASAP') - p.addValue('program_version', 'unknown') + if hasattr(t, 'ase_version'): + aversion = t.ase_version + else: + aversion = 3 # default Asap version + p.addValue('program_version', aversion) with o(p, 'section_topology'): p.addValue('topology_force_field_name', 'EMT') with o(p, 'section_constraint'): # assuming constraints do not @@ -61,7 +74,7 @@ def parse(filename): with o(p, 'section_method') as method_gid: p.addValue('calculation_method', 'EMT') with o(p, 'section_frame_sequence'): - for f in t: + for f in t: # loop over frames with o(p, 'section_system') as system_gid: p.addArrayValues('simulation_cell', c(f.get_cell(), 'angstrom')) @@ -89,7 +102,21 @@ def parse(filename): c(f.get_forces(apply_constraint=False), 'eV/angstrom')) with o(p, 'section_sampling_method'): - p.addValue('ensemble_type', 'NVE') + ensemble_type = 'NVE' # default ensemble_type + if ds: # if there is a traj.description + print('d:', ds) + if ds['type'] == 'optimization': + p.addValue('geometry_optimization_method', ds['optimizer']) + elif d['type'] == 'molecular-dynamics': + md_type = ds['md-type'] + if 'Langevin' in md_type or 'NVT' in md_type: + ensemble_type = 'NVT' + elif 'Verlet' in md_type: + ensemble_type = 'NVE' + elif 'NPT' in md_type: + ensemble_type = 'NPT' + p.addValue('ensemble_type', ensemble_type) + p.finishedParsingSession("ParseSuccess", None) if __name__ == '__main__':