From 9591699dbe048143bebd2ab248fc4f220635ee3d Mon Sep 17 00:00:00 2001 From: Jintao Date: Wed, 22 May 2024 08:41:22 +0800 Subject: [PATCH] report energy in `conformers_before_optimization.txt` --- arc/plotter.py | 15 ++++++++++----- arc/scheduler.py | 2 ++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/arc/plotter.py b/arc/plotter.py index 8ec8063adf..e9219d33c2 100644 --- a/arc/plotter.py +++ b/arc/plotter.py @@ -900,6 +900,7 @@ def save_conformers_file(project_directory: str, ts_methods: Optional[List[str]] = None, im_freqs: Optional[List[List[float]]] = None, log_content: bool = False, + before_optimized: Optional[bool] = None, ): """ Save the conformers before or after optimization. @@ -923,18 +924,22 @@ def save_conformers_file(project_directory: str, geo_dir = os.path.join(project_directory, 'output', spc_dir, label, 'geometry', 'conformers') if not os.path.exists(geo_dir): os.makedirs(geo_dir) - if energies is not None and any(e is not None for e in energies): + if before_optimized or energies is None or not any(e is not None for e in energies): + optimized = False + conf_path = os.path.join(geo_dir, 'conformers_before_optimization.txt') + min_e = extremum_list(energies, return_min=True) if before_optimized else None + else: optimized = True min_e = extremum_list(energies, return_min=True) conf_path = os.path.join(geo_dir, 'conformers_after_optimization.txt') - else: - optimized = False - conf_path = os.path.join(geo_dir, 'conformers_before_optimization.txt') with open(conf_path, 'w') as f: content = '' if optimized: level_of_theory = level_of_theory.simple() if isinstance(level_of_theory, Level) else level_of_theory content += f'Conformers for {label}, optimized at the {level_of_theory} level:\n\n' + if before_optimized: + level_of_theory = level_of_theory.simple() if isinstance(level_of_theory, Level) else level_of_theory + content += f'Conformers for {label}, generated at the {level_of_theory} level:\n\n' for i, xyz in enumerate(xyzs): content += f'conformer {i}:\n' if xyz is not None: @@ -950,7 +955,7 @@ def save_conformers_file(project_directory: str, content += f'TS guess method: {ts_methods[i]}\n' if im_freqs is not None and im_freqs[i] is not None: content += f'Imaginary frequencies: {im_freqs[i]}\n' - if optimized: + if optimized or before_optimized: if energies[i] == min_e: content += 'Relative Energy: 0 kJ/mol (lowest)' elif energies[i] is not None: diff --git a/arc/scheduler.py b/arc/scheduler.py index 50cd96cbaa..7e3f39c70d 100644 --- a/arc/scheduler.py +++ b/arc/scheduler.py @@ -1845,6 +1845,8 @@ def process_conformers(self, label): multiplicity=self.species_dict[label].multiplicity, charge=self.species_dict[label].charge, is_ts=False, + energies=self.species_dict[label].conformer_energies, + before_optimized=True, ) # before optimization self.species_dict[label].conformers_before_opt = tuple(self.species_dict[label].conformers) if self.species_dict[label].initial_xyz is None and self.species_dict[label].final_xyz is None \