Source code for pyqmmm.qm.extract_gibbs_free_energies
import os
import csv
[docs]def get_directories():
"""Get a sorted list of directories in the current working directory."""
return sorted([d for d in os.listdir() if os.path.isdir(d)])
[docs]def parse_orca_out(file_path):
"""Extract the last instances of 'Final Gibbs free energy' and 'G-E(el)' from a file."""
gibbs_energy = None
gibbs_correction = None
try:
with open(file_path, 'r') as file:
for line in file:
if line.startswith("Final Gibbs free energy"):
gibbs_energy = line.split()[5]
elif line.startswith("G-E(el)"):
gibbs_correction = line.split()[2]
except FileNotFoundError:
print(f"File not found: {file_path}")
except IndexError:
print(f"Malformed line in file: {file_path}")
return gibbs_energy, gibbs_correction
[docs]def extract():
"""Main function to extract Gibbs free energies and corrections from ORCA output files."""
output_csv = "gibbs_energies.csv"
directories = get_directories()
energy_data = []
for directory in directories:
orca_out_path = os.path.join(directory, "orca.out")
gibbs_energy, gibbs_correction = parse_orca_out(orca_out_path)
if gibbs_energy and gibbs_correction:
energy_data.append({
"Directory": directory,
"Gibbs Free Energy": gibbs_energy,
"Gibbs Free Energy Correction": gibbs_correction
})
else:
print(f"Missing data in {orca_out_path}, skipping.")
write_to_csv(output_csv, energy_data)
print(f"Gibbs free energies and corrections have been extracted and saved to '{output_csv}'.")
[docs]def write_to_csv(output_file, data):
"""Write energy data to a CSV file."""
with open(output_file, 'w', newline='') as csvfile:
fieldnames = ["Directory", "Gibbs Free Energy", "Gibbs Free Energy Correction"]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(data)
if __name__ == "__main__":
extract()