#### Corin Wagen and Eugene Kwan, 2019 filenames = sys.argv[1] info = [] text_width = 70 to_rotate = [[1, 3, 5, 7], [9, 11, 13, 15], [5, 3, 6, 8], [12, 11, 14, 16]] ensemble = ConformationalEnsemble() for filename in sorted(glob.glob(filenames, recursive=True)): if re.search("slurm", filename): continue try: output_file = GaussianFile.read_file(filename) if len(output_file.energies) > 0: mol = output_file.get_molecule() ensemble.add_molecule(mol, energy=output_file.energies[-1] * 627.509) except: print(f"skipping f{filename} due to error...") print(f"{len(ensemble.molecules)} conformers before elimination of redundant") ensemble.eliminate_redundant(cutoff=0.6) print(f"{len(ensemble.molecules)} conformers after elimination of redundant") best_confs = ensemble.get_within_cutoff(cutoff=10) for idx, molecule in enumerate(best_confs): GaussianFile.write_molecule_to_file(
import sys, os, argparse, glob, re, copy import numpy as np from cctk import GaussianFile, Molecule, Group, Ensemble from cctk.load_groups import load_group parser = argparse.ArgumentParser(prog="hammett_swap.py") parser.add_argument("filename") args = vars(parser.parse_args(sys.argv[1:])) assert args["filename"], "Can't resubmit files without a filename!" #### read in output file output_file = GaussianFile.read_file(args["filename"]) #### read in genecp footer footer = "" with open('footer', 'r') as file: footer = file.read() #### define groups and atoms groups = ["NMe2", "OMe", "Me", "CF3", "CO2Me", "CN", "NO2", "F", "Cl", "SF5"] p_atoms = [19, 30, 41] ensemble = Ensemble() headers = [] args = [] for group_name in groups: print(f"adding {group_name}") mol = copy.deepcopy(output_file.get_molecule().assign_connectivity()) group = load_group(group_name)
filenames = sys.argv[1] energies = {} dipole = {} nics = {} C1_charge = {} O7_charge = {} C8_charge = {} C9_charge = {} C12_charge = {} for filename in sorted(glob.glob(filenames, recursive=True)): if re.search("slurm", filename): continue (output_file, lines) = GaussianFile.read_file(filename, return_lines=True) dist = int(round(output_file.get_molecule().get_distance(1, 8) * 1000)) energies[dist] = output_file.energies[-1] try: nics[dist] = -1 * parse.find_parameter(lines, "17 Bq Isotropic", 8, 4)[0] except: pass try: dipole_line = parse.search_for_block(lines, "Dipole", "Quadrupole") fields = re.split(" +", dipole_line) fields = list(filter(None, fields)) dipole[dist] = float(fields[-1])
import numpy as np from cctk import ConformationalEnsemble, GaussianFile path = "starting_structure.gjf" cent = 1 lg = 7 nu = 8 file = GaussianFile.read_file(path) mol = file.get_molecule() mol.assign_connectivity() footer = f"B {cent} {lg} F\nB {cent} {nu} F\n" for lg_dist in np.arange(1.5, 3.3, 0.1): for nu_dist in np.arange(1.2, 3.0, 0.1): mol.set_distance(cent, lg, lg_dist) mol.set_distance(cent, nu, nu_dist) mol.check_for_conflicts() GaussianFile.write_molecule_to_file( f"scan_{int(round(lg_dist*100))}_{int(round(nu_dist*100))}.gjf", mol, "#p opt=modredundant b3lyp/6-31+g(d) scrf=(smd, solvent=tetrahydrofuran)", footer=footer)