Skip to content

Commit

Permalink
Merge pull request #111 from goldmanm/auto_optical_isomers_and_log_re…
Browse files Browse the repository at this point in the history
…factor_pair_pr

Update determine_qm_software to new Arkane
  • Loading branch information
alongd committed Apr 25, 2019
2 parents 0510966 + 2f19efe commit d40572b
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 27 deletions.
7 changes: 3 additions & 4 deletions arc/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import numpy as np
import os

from arkane.statmech import Log
from arkane.statmech import determine_qm_software

from arc.species.converter import get_xyz_string, standardize_xyz_string
from arc.arc_exceptions import InputError
Expand Down Expand Up @@ -97,9 +97,8 @@ def parse_xyz_from_file(path):
else:
break
elif 'out' in file_extension or 'log' in file_extension:
log = Log(path='')
log.determine_qm_software(fullpath=path)
coord, number, _ = log.software_log.loadGeometry()
log = determine_qm_software(fullpath=path)
coord, number, _ = log.loadGeometry()
xyz = get_xyz_string(coord=coord, number=number)
else:
record = False
Expand Down
27 changes: 11 additions & 16 deletions arc/scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

import cclib

from arkane.statmech import Log
from arkane.statmech import determine_qm_software
from rmgpy.reaction import Reaction
from rmgpy.exceptions import InputError as RMGInputError

Expand Down Expand Up @@ -742,9 +742,8 @@ def parse_conformer_energy(self, job, label, i):
Parse E0 (J/mol) from the conformer opt output file, and save it in the 'conformer_energies' attribute.
"""
if job.job_status[1] == 'done':
log = Log(path='')
log.determine_qm_software(fullpath=job.local_path_to_output_file)
self.species_dict[label].conformer_energies[i] = log.software_log.loadEnergy() # in J/mol
log = determine_qm_software(fullpath=job.local_path_to_output_file)
self.species_dict[label].conformer_energies[i] = log.loadEnergy() # in J/mol
logging.debug('energy for {0} is {1}'.format(i, self.species_dict[label].conformer_energies[i]))
else:
logging.warn('Conformer {i} for {label} did not converge!'.format(i=i, label=label))
Expand All @@ -767,14 +766,13 @@ def determine_most_stable_conformer(self, label):
else:
conformer_xyz = None
xyzs = list()
log = Log(path='')
if self.species_dict[label].conformer_energies:
xyzs = self.species_dict[label].conformers
else:
for job in self.job_dict[label]['conformers'].values():
log.determine_qm_software(fullpath=job.local_path_to_output_file)
log = determine_qm_software(fullpath=job.local_path_to_output_file)
try:
coord, number, _ = log.software_log.loadGeometry()
coord, number, _ = log.loadGeometry()
except RMGInputError:
xyzs.append(None)
else:
Expand Down Expand Up @@ -903,9 +901,8 @@ def parse_composite_geo(self, label, job):
logging.debug('parsing composite geo for {0}'.format(job.job_name))
freq_ok = False
if job.job_status[1] == 'done':
log = Log(path='')
log.determine_qm_software(fullpath=job.local_path_to_output_file)
coord, number, _ = log.software_log.loadGeometry()
log = determine_qm_software(fullpath=job.local_path_to_output_file)
coord, number, _ = log.loadGeometry()
self.species_dict[label].final_xyz = get_xyz_string(coord=coord, number=number)
self.output[label]['status'] += 'composite converged; '
self.output[label]['composite'] = os.path.join(job.local_path, 'output.out')
Expand Down Expand Up @@ -944,9 +941,8 @@ def parse_opt_geo(self, label, job):
"""
logging.debug('parsing opt geo for {0}'.format(job.job_name))
if job.job_status[1] == 'done':
log = Log(path='')
log.determine_qm_software(fullpath=job.local_path_to_output_file)
coord, number, _ = log.software_log.loadGeometry()
log = determine_qm_software(fullpath=job.local_path_to_output_file)
coord, number, _ = log.loadGeometry()
self.species_dict[label].final_xyz = get_xyz_string(coord=coord, number=number)
if not job.fine and self.fine:
# Run opt again using a finer grid.
Expand Down Expand Up @@ -1110,10 +1106,9 @@ def check_scan_job(self, label, job):
invalidate = False
if job.job_status[1] == 'done':
# ESS converged. Get PES scan using Arkane:
log = Log(path='')
log.determine_qm_software(fullpath=job.local_path_to_output_file)
log = determine_qm_software(fullpath=job.local_path_to_output_file)
try:
v_list, angle = log.software_log.loadScanEnergies()
v_list, angle = log.loadScanEnergies()
except ZeroDivisionError:
logging.error('Energies from rotor scan of {label} between pivots {pivots} could not'
'be read. Invalidating rotor.'.format(label=label, pivots=job.pivots))
Expand Down
12 changes: 5 additions & 7 deletions arc/species/species.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import pybel as pyb

from arkane.common import ArkaneSpecies, symbol_by_number
from arkane.statmech import Log
from arkane.statmech import determine_qm_software
from rmgpy.molecule.converter import toOBMol
from rmgpy.molecule.element import getElement
from rmgpy.molecule.molecule import Atom, Molecule
Expand Down Expand Up @@ -1374,9 +1374,8 @@ def determine_rotor_symmetry(rotor_path, label, pivots):
A second criterion for a symmetric rotor is that the highest and lowest peaks must be within 10% of
the highest peak value. This is only applied if the highest peak is above 2 kJ/mol.
"""
log = Log(path='')
log.determine_qm_software(fullpath=rotor_path)
energies, _ = log.software_log.loadScanEnergies()
log = determine_qm_software(fullpath=rotor_path)
energies, _ = log.loadScanEnergies()

symmetry = None
max_e = max(energies)
Expand Down Expand Up @@ -1460,9 +1459,8 @@ def determine_rotor_type(rotor_path):
Determine whether this rotor should be treated as a HinderedRotor of a FreeRotor
according to it's maximum peak
"""
log = Log(path='')
log.determine_qm_software(fullpath=rotor_path)
energies, _ = log.software_log.loadScanEnergies()
log = determine_qm_software(fullpath=rotor_path)
energies, _ = log.loadScanEnergies()
max_val = max(energies) * 0.001 # convert to kJ/mol (Arkane used SI)
return 'FreeRotor' if max_val < minimum_barrier else 'HinderedRotor'

Expand Down

0 comments on commit d40572b

Please sign in to comment.