Esempio n. 1
0
        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(
        f"conformer_v2_{idx:03d}.gjf", molecule,
        "#p opt freq=noraman m062x/6-31g(d) scrf=(smd,solvent=diethylether)",
        None)

for idx, molecule in enumerate(
        list(ensemble.molecules[np.argsort(ensemble.energies)])):
    items = [idx + 1, np.sort(ensemble.energies)[idx]]

    for atoms in to_rotate:
        items.append(molecule.get_dihedral(*atoms))

    if idx == 0:
        print("Molecule    Energy    D" +
              str(" D".join(str(a) for a in to_rotate)))

    print(str("        ".join(str(x)[0:8] for x in items)))
Esempio n. 2
0
        list of cctk.Molecule objects (with len(thetas) * len(structures) elements)
    """
    if idx >= len(angles):
        return structures

    else:
        new_structures = [None] * (len(structures) * len(thetas))
        current_idx = 0
        for structure in structures:
            for theta in thetas:
                new_structures[current_idx] = copy.deepcopy(
                    structure.set_dihedral(*angles[idx],
                                           theta,
                                           check_result=False))
                current_idx += 1

    print(len(structures))
    return rotate_angles_one_by_one(idx + 1, angles, thetas, new_structures)


mols = rotate_angles_one_by_one(0, to_rotate, angles, [output_file.molecule])
mols = rotate_angles_one_by_one(0, to_bin_rotate, bin_angles, mols)

for idx, molecule in enumerate(mols):
    try:
        molecule.check_for_conflicts()
        GaussianFile.write_molecule_to_file(f"conformer_{idx:05d}.gjf",
                                            molecule, "#p opt pm7", None)
    except:
        pass
Esempio n. 3
0
import sys, argparse, re
from cctk import GaussianFile, XYZFile

#### Usage: python read_from_xyz.py -h "#p opt freq=noraman b3lyp/6-31g(d)" path/to/file.xyz

parser = argparse.ArgumentParser(prog="read_from_xyz.py")
parser.add_argument("--header", "-H", type=str)
parser.add_argument("filename")
args = vars(parser.parse_args(sys.argv[1:]))

assert args["filename"], "Can't read file without a filename!"
assert args["header"], "Can't write file without a header!"

file = XYZFile.read_file(args["filename"])
newfile = args["filename"].rsplit('/',1)[-1]
newfile = re.sub(r"xyz$", "gjf", newfile)

GaussianFile.write_molecule_to_file(
    newfile,
    file.molecule,
    route_card=args["header"],
    link0={"nprocshared": 16, "mem": "32GB"},
    footer=None,
)
Esempio n. 4
0
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)
Esempio n. 5
0
#### Usage: ``python generate_pop.py "path/to/output/*.out"``
#### NOTE: It's crucial to wrap the wildcard-containing path in quotes!

#### NOTE: This file will reject any file that contains the string "slurm."

#### Corin Wagen and Eugene Kwan, 2019

parser = argparse.ArgumentParser(prog="resubmit.py")
parser.add_argument("filename")
args = vars(parser.parse_args(sys.argv[1:]))

assert args["filename"], "Can't resubmit files without a filename!"

ensembles = []

for filename in glob.iglob(args["filename"], recursive=True):
    if re.search("slurm", filename):
        continue

    output_file = GaussianFile.read_file(filename)
    ensembles.append(output_file.molecules)

new_ensemble = ConformationalEnsemble.join_ensembles(ensembles)

for mol in new_ensemble.molecules:
    cc_dist = mol.get_distance(1, 8)
    newfile = f"pop_{int(round(cc_dist*1000))}.gjf"
    GaussianFile.write_molecule_to_file(newfile, mol, "#p pop=hirshfeld m062x/6-31g(d)", None)
    print(f"generating {newfile}...")

Esempio n. 6
0
import glob
import cctk
from cctk import GaussianFile, ConformationalEnsemble

filenames = sorted(list(glob.iglob("path*.gjf")))
ensemble = ConformationalEnsemble()
for filename in filenames:
    output_file = GaussianFile.read_file(filename)
    molecule = output_file.ensemble.molecules[-1]
    ensemble.add_molecule(molecule)
template = ensemble.molecules[0]
atoms = [1, 2, 3, 4, 5, 6]
#ensemble = ensemble.align(to_geometry=0, comparison_atoms="heavy", compute_RMSD=False)
ensemble = ensemble.align(to_geometry=0,
                          comparison_atoms=atoms,
                          compute_RMSD=False)
template = ensemble.molecules[0]
for i, molecule in enumerate(ensemble.molecules):
    filename = f"aligned_path_{i+1:03d}.gjf"
    header = "#p"
    footer = "\n"
    GaussianFile.write_molecule_to_file(filename, molecule, header, footer)
Esempio n. 7
0
#### NOTE: This file will reject any file that contains the string "slurm."

#### Corin Wagen and Eugene Kwan, 2019

parser = argparse.ArgumentParser(prog="resubmit.py")
parser.add_argument("filename")
args = vars(parser.parse_args(sys.argv[1:]))

assert args["filename"], "Can't resubmit files without a filename!"

ensembles = []

for filename in glob.iglob(args["filename"], recursive=True):
    if re.search("slurm", filename):
        continue

    output_file = GaussianFile.read_file(filename)
    ensembles.append(output_file.molecules)

new_ensemble = ConformationalEnsemble.join_ensembles(ensembles)

for mol in new_ensemble.molecules:
    mol.add_atom_at_centroid("Bq", [1, 7, 15, 12, 9, 8])
    cc_dist = mol.get_distance(1, 8)

    newfile = f"nics_{int(round(cc_dist*1000))}.gjf"
    GaussianFile.write_molecule_to_file(newfile, mol, "#p nmr m062x/6-31g(d)",
                                        None)
    print(f"generating {newfile}...")
Esempio n. 8
0
ensemble = ConformationalEnsemble()

angles = [0, 60, 120, 180, 240, 241, 300]
for x in angles:
    for y in angles:
        mol.set_dihedral(1, 7, 6, 8, x)
        mol.set_dihedral(23, 24, 25, 1, y)
        ensemble.add_molecule(mol, copy=True)

old_num = len(ensemble)
ensemble = ensemble.eliminate_redundant()
new_num = len(ensemble)
print(
    f"originally {old_num} conformers, but after eliminating redundant there are {new_num}!"
)

count = 0
for molecule in ensemble.molecules:
    x = int(round(molecule.get_dihedral(1, 7, 6, 8)))
    y = int(round(molecule.get_dihedral(23, 24, 25, 1)))
    if molecule.check_for_conflicts():
        GaussianFile.write_molecule_to_file(f"CpG_{x}_{y}.gjf",
                                            molecule,
                                            route_card="#p opt b3lyp/6-31g(d)")
        count += 1
    else:
        print(f"x={x} y={y} no good - error")

print(f"wrote {count} molecules to files")