示例#1
0
        if sub.conf_num > 1:
            s += "%-20s" % name
            # if (i + 1) % 3 == 0:
            if (i + 1) % 1 == 0:
                s += "\n"

    print(s.strip())
    sys.exit(0)

detect_subs = False

s = ""

skipped = 0

for infile in glob_files(args.infile, parser=makeconf_parser):
    if isinstance(infile, str):
        if args.input_format is not None:
            f = FileReader((infile, args.input_format[0], infile))
        else:
            f = FileReader(infile)
    else:
        if args.input_format is not None:
            f = FileReader(("from stdin", args.input_format[0], infile))
        else:
            f = FileReader(("from stdin", "xyz", infile))

    geom = Geometry(f)

    target_list = []
    explicit_subnames = []
示例#2
0
    help="print all diastereomers for selected chiral centers")

changechiral_parser.add_argument(
    "-m",
    "--minimize",
    action="store_true",
    default=False,
    dest="minimize",
    help="rotate substituents to mitigate steric clashing",
)

args = changechiral_parser.parse_args()

s = ""

for infile in glob_files(args.infile, parser=changechiral_parser):
    if isinstance(infile, str):
        if args.input_format is not None:
            f = FileReader((infile, args.input_format[0], infile))
        else:
            f = FileReader(infile)
    else:
        if args.input_format is not None:
            f = FileReader(("from stdin", args.input_format[0], stdin))
        else:
            f = FileReader(("from stdin", "xyz", stdin))

    geom = Geometry(f)

    target_list = []
    if args.targets is None:
示例#3
0
)

args = maplig_parser.parse_args()

if args.list_avail is not False:
    s = ""
    for i, name in enumerate(sorted(get_matching_ligands(args.list_avail))):
        s += "%-35s" % name
        if (i + 1) % 3 == 0:
            # if (i + 1) % 1 == 0:
            s += "\n"

    print(s.strip())
    sys.exit(0)

for infile in glob_files(args.infile, parser=maplig_parser):
    if isinstance(infile, str):
        if args.input_format is not None:
            f = FileReader((infile, args.input_format[0], infile))
        else:
            f = FileReader(infile)
    else:
        if args.input_format is not None:
            f = FileReader(("from stdin", args.input_format[0], infile))
        else:
            f = FileReader(("from stdin", "xyz", infile))

    cat = Geometry(f)

    if args.center:
        cat.detect_components(center=args.center)
示例#4
0
def main(argv):
    vbur_parser = argparse.ArgumentParser(
        description=
        "calculate Boltzmann-weighted percent buried volume parameters",
        formatter_class=argparse.RawTextHelpFormatter)

    vbur_parser.add_argument("infiles",
                             metavar="input files",
                             type=str,
                             nargs="+",
                             help="file containing coordinates and energy")

    vbur_parser.add_argument("-if",
                             "--input-format",
                             type=str,
                             default=None,
                             choices=["log", "out", "dat"],
                             dest="input_format",
                             help="file format of input")

    vbur_parser.add_argument("-o",
                             "--output",
                             type=str,
                             default=False,
                             required=False,
                             metavar="output destination",
                             dest="outfile",
                             help="output destination\n" + "Default: stdout")

    vbur_parser.add_argument(
        "-l",
        "--ligand-atoms",
        default=None,
        required=False,
        dest="targets",
        help=
        "atoms to consider in calculation\nDefault: use all atoms except the center",
    )

    vbur_parser.add_argument(
        "-e",
        "--exclude-atoms",
        default=None,
        required=False,
        dest="exclude_atoms",
        help=
        "atoms to exclude from the calculation\nDefault: exclude no ligand atoms",
    )

    vbur_parser.add_argument(
        "-c",
        "--center",
        action="append",
        default=None,
        required=False,
        dest="center",
        help="atom the sphere is centered on\n" +
        "Default: detect metal center (centroid of all metals if multiple are present)",
    )

    vbur_parser.add_argument(
        "-r",
        "--radius",
        default=3.5,
        type=float,
        dest="radius",
        help="radius around center\nDefault: 3.5 Ångström")

    vbur_parser.add_argument(
        "-vdw",
        "--vdw-radii",
        type=str,
        default="bondi",
        choices=["bondi", "umn"],
        dest="radii",
        help="VDW radii to use in calculation\n" +
        "umn: main group vdw radii from J. Phys. Chem. A 2009, 113, 19, 5806–5812\n"
        + "    (DOI: 10.1021/jp8111556)\n" +
        "    transition metals are crystal radii from Batsanov, S.S. Van der Waals\n"
        + "    Radii of Elements. Inorganic Materials 37, 871–885 (2001).\n" +
        "    (DOI: 10.1023/A:1011625728803)\n" +
        "bondi: radii from J. Phys. Chem. 1964, 68, 3, 441–451 (DOI: 10.1021/j100785a001)\n"
        + "Default: bondi")

    vbur_parser.add_argument(
        "-s",
        "--scale",
        default=1.17,
        type=float,
        dest="scale",
        help="scale VDW radii by this amount\nDefault: 1.17",
    )

    vbur_parser.add_argument("-t",
                             "--temperature",
                             type=str,
                             default=298.15,
                             required=False,
                             dest="temperature",
                             help="temperature in K\nDefault: 298.15")

    vbur_parser.add_argument(
        "-f",
        "--frequency",
        action="store_true",
        default=False,
        required=False,
        dest="frequency",
        help="input files are frequency job output files\n"
        "additional average values will be calculated for ZPE, H, G, etc.")

    vbur_parser.add_argument(
        "-w0",
        "--frequency-cutoff",
        type=float,
        default=100.0,
        required=False,
        dest="w0",
        help="cutoff frequency for quasi free energy corrections (1/cm)\n" +
        "Default: 100 cm^-1")

    vbur_parser.add_argument("-v",
                             "--verbose",
                             action="store_true",
                             default=False,
                             required=False,
                             dest="verbose",
                             help="also print population")

    vbur_parser.add_argument(
        "-m",
        "--method",
        default="Lebedev",
        type=lambda x: x.capitalize() if x.lower() == "lebedev" else x.upper(),
        choices=["MC", "Lebedev"],
        dest="method",
        help=
        "integration method - Monte-Carlo (MC) or Lebedev quadrature (Lebedev)\nDefault: Lebedev"
    )

    grid_options = vbur_parser.add_argument_group(
        "Lebedev integration options")
    grid_options.add_argument(
        "-rp",
        "--radial-points",
        type=int,
        default=20,
        choices=[20, 32, 64, 75, 99, 127],
        dest="rpoints",
        help="number of radial shells for Gauss-Legendre integration\n" +
        "of the radial component\n" +
        "lower values are faster, but at the cost of accuracy\nDefault: 20")

    grid_options.add_argument(
        "-ap",
        "--angular-points",
        type=int,
        default=1454,
        choices=[110, 194, 302, 590, 974, 1454, 2030, 2702, 5810],
        dest="apoints",
        help="number of angular points for Lebedev integration\n" +
        "lower values are faster, but at the cost of accuracy\nDefault: 1454")

    mc_options = vbur_parser.add_argument_group(
        "Monte-Carlo integration options")
    mc_options.add_argument(
        "-i",
        "--minimum-iterations",
        type=int,
        default=25,
        metavar="ITERATIONS",
        dest="min_iter",
        help="minimum iterations - each is a batch of 3000 points\n" +
        "MC will continue after this until convergence criteria are met\n" +
        "Default: 25",
    )

    args = vbur_parser.parse_args(args=argv)

    targets = None
    if args.exclude_atoms and not args.targets:
        targets = (NotAny(args.exclude_atoms))
    elif args.exclude_atoms and args.targets:
        targets = (NotAny(args.exclude_atoms), args.targets)
    else:
        targets = NotAny(args.center)

    geoms = []
    energies = {"E": []}
    if args.frequency:
        energies["E+ZPE"] = []
        energies["H(RRHO)"] = []
        energies["G(RRHO)"] = []
        energies["G(Quasi-RRHO)"] = []
        energies["G(Quasi-Harmonic)"] = []

    for infile in glob_files(args.infiles, parser=vbur_parser):
        if args.input_format is not None:
            fr = FileReader((infile, args.input_format, infile),
                            just_geom=False)
        else:
            fr = FileReader(infile, just_geom=False)

        geom = Geometry(fr)
        geoms.append(geom)

        nrg = fr.other["energy"]
        energies["E"].append(nrg)
        if args.frequency:
            co = CompOutput(fr)
            dE, dH, entropy = co.therm_corr(temperature=args.temperature)
            rrho_dG = co.calc_G_corr(v0=0,
                                     temperature=args.temperature,
                                     method="RRHO")
            qrrho_dG = co.calc_G_corr(v0=args.w0,
                                      temperature=args.temperature,
                                      method="QRRHO")
            qharm_dG = co.calc_G_corr(v0=args.w0,
                                      temperature=args.temperature,
                                      method="QHARM")
            energies["E+ZPE"].append(nrg + co.ZPVE)
            energies["H(RRHO)"].append(nrg + dH)
            energies["G(RRHO)"].append(nrg + rrho_dG)
            energies["G(Quasi-RRHO)"].append(nrg + qrrho_dG)
            energies["G(Quasi-Harmonic)"].append(nrg + qharm_dG)

    s = ""
    for nrg_type in energies:
        energies_arr = np.array(energies[nrg_type])
        energies_arr *= UNIT.HART_TO_KCAL
        if args.verbose and nrg_type == "E":
            s += "\t".join(["%Vbur", "file"])
            s += "\n"
            for f, geom in zip(args.infiles, geoms):
                data = geom.percent_buried_volume(
                    targets=targets,
                    center=args.center,
                    radius=args.radius,
                    radii=args.radii,
                    scale=args.scale,
                    method=args.method,
                    rpoints=args.rpoints,
                    apoints=args.apoints,
                    min_iter=args.min_iter,
                )
                s += "%.1f%%\t%s\n" % (data, f)
            s += "\n"

        s += "weighted using %s:\n" % nrg_type
        data = Geometry.weighted_percent_buried_volume(
            geoms,
            energies_arr,
            args.temperature,
            targets=targets,
            center=args.center,
            radius=args.radius,
            radii=args.radii,
            scale=args.scale,
            method=args.method,
            rpoints=args.rpoints,
            apoints=args.apoints,
            min_iter=args.min_iter,
        )

        if args.verbose:
            coeff = boltzmann_coefficients(energies_arr, args.temperature)
            coeff /= sum(coeff)
            coeff *= 100
            for f, c, e in zip(args.infiles, coeff, energies_arr):
                s += "%s  %.1f%% (%.1f kcal/mol)\n" % (f, c,
                                                       e - min(energies_arr))

        s += "%%Vbur: %.2f\n\n" % data

    if not args.outfile:
        print(s)
    else:
        with open(args.outfile, "w") as f:
            f.write(s)
示例#5
0
)

args = substitute_parser.parse_args()

if args.list_avail:
    s = ""
    for i, name in enumerate(sorted(Substituent.list())):
        s += "%-20s" % name
        # if (i + 1) % 3 == 0:
        if (i + 1) % 1 == 0:
            s += "\n"

    print(s.strip())
    sys.exit(0)

for infile in glob_files(args.infile, parser=substitute_parser):
    if isinstance(infile, str):
        if args.input_format is not None:
            f = FileReader((infile, args.input_format, infile))
        else:
            f = FileReader(infile)
    else:
        if args.input_format is not None:
            f = FileReader(("from stdin", args.input_format, infile))
        else:
            f = FileReader(("from stdin", "xyz", infile))

    geom = Geometry(f)

    target_list = []
    for sub in args.substitutions:
示例#6
0
def main(argv):
    sterimol_parser = argparse.ArgumentParser(
        description=
        "calculate B1-B5, and L sterimol parameters for ligands - see Verloop, A. and Tipker, J. (1976), Use of linear free energy related and other parameters in the study of fungicidal selectivity. Pestic. Sci., 7: 379-390.",
        formatter_class=argparse.RawTextHelpFormatter)

    sterimol_parser.add_argument("infile",
                                 metavar="input file",
                                 type=str,
                                 nargs="*",
                                 default=[sys.stdin],
                                 help="a coordinate file")

    sterimol_parser.add_argument(
        "-if",
        "--input-format",
        type=str,
        default=None,
        choices=read_types,
        dest="input_format",
        help="file format of input\nxyz is assumed if input is stdin")

    sterimol_parser.add_argument(
        "-k",
        "--key-atoms",
        type=str,
        required=True,
        dest="key",
        help="1-indexed position of the ligand's coordinating atoms")

    sterimol_parser.add_argument("-c",
                                 "--center-atom",
                                 type=str,
                                 required=True,
                                 dest="center",
                                 help="atom the ligand is coordinated to")

    sterimol_parser.add_argument(
        "-r",
        "--radii",
        type=str,
        default="bondi",
        choices=["bondi", "umn"],
        dest="radii",
        help="VDW radii to use in calculation\n"
        "umn: main group vdw radii from J. Phys. Chem. A 2009, 113, 19, 5806–5812\n"
        "    (DOI: 10.1021/jp8111556)\n"
        "    transition metals are crystal radii from Batsanov, S.S. Van der Waals\n"
        "    Radii of Elements. Inorganic Materials 37, 871–885 (2001).\n"
        "    (DOI: 10.1023/A:1011625728803)\n"
        "bondi: radii from J. Phys. Chem. 1964, 68, 3, 441–451\n(DOI: 10.1021/j100785a001)\n"
        "Default: bondi")

    sterimol_parser.add_argument(
        "-bl",
        "--bisect-L",
        action="store_true",
        required=False,
        dest="bisect_L",
        help="L axis will bisect (or analogous for higher denticity\n"
        "ligands) the L-M-L angle\n"
        "Default: center to centroid of key atoms")

    sterimol_parser.add_argument(
        "-al",
        "--at-L",
        default=[None],
        dest="L_value",
        type=lambda x: [float(v) for v in x.split(",")],
        help="get widths at specific L values (comma-separated)\n"
        "can be used for Sterimol2Vec parameters\n"
        "Default: use the entire ligand",
    )

    sterimol_parser.add_argument(
        "-v",
        "--vector",
        action="store_true",
        required=False,
        dest="vector",
        help=
        "print Chimera/ChimeraX bild file for vectors instead of parameter values"
    )

    sterimol_parser.add_argument("-o",
                                 "--output",
                                 type=str,
                                 default=False,
                                 required=False,
                                 metavar="output destination",
                                 dest="outfile",
                                 help="output destination\n" +
                                 "Default: stdout")

    args = sterimol_parser.parse_args(args=argv)

    s = ""
    if not args.vector:
        s += "B1\tB2\tB3\tB4\tB5\tL\tfile\n"

    for infile in glob_files(args.infile, parser=sterimol_parser):
        if isinstance(infile, str):
            if args.input_format is not None:
                f = FileReader((infile, args.input_format, infile))
            else:
                f = FileReader(infile)
        else:
            if args.input_format is not None:
                f = FileReader(("from stdin", args.input_format, infile))
            else:
                f = FileReader(("from stdin", "xyz", infile))

        geom = Geometry(f, refresh_ranks=False)
        comp = Component(
            geom.get_fragment(args.key, stop=args.center),
            to_center=geom.find(args.center),
            key_atoms=args.key,
            detect_backbone=False,
        )
        for val in args.L_value:
            data = comp.sterimol(
                to_center=geom.find(args.center),
                return_vector=args.vector,
                radii=args.radii,
                bisect_L=args.bisect_L,
                at_L=val,
            )

            if args.vector:
                for key, color in zip(
                    ["B1", "B2", "B3", "B4", "B5", "L"],
                    ["black", "green", "purple", "orange", "red", "blue"]):
                    start, end = data[key]
                    s += ".color %s\n" % color
                    s += ".note Sterimol %s\n" % key
                    s += ".arrow %6.3f %6.3f %6.3f   %6.3f %6.3f %6.3f\n" % (
                        *start, *end)
            else:
                s += "%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%s\n" % (
                    data["B1"],
                    data["B2"],
                    data["B3"],
                    data["B4"],
                    data["B5"],
                    data["L"],
                    infile,
                )

    if not args.outfile:
        print(s)
    else:
        with open(args.outfile, "w") as f:
            f.write(s)
示例#7
0
    help=
    "CSV file containing observed spectrum data, which will be plotted on top\n"
    "frequency job files should not come directly after this flag")

args = ir_parser.parse_args()

exp_data = None
if args.exp_data:
    exp_data = []
    for f in args.exp_data:
        data = np.loadtxt(f, delimiter=",")

        for i in range(1, data.shape[1]):
            exp_data.append((data[:, 0], data[:, i], None))

for f in glob_files(args.infiles, parser=ir_parser):
    fr = FileReader(f, just_geom=False)

    freq = fr.other["frequency"]

    fig = plt.gcf()
    fig.clear()

    freq.plot_ir(
        fig,
        centers=args.centers,
        widths=args.widths,
        plot_type=args.plot_type,
        peak_type=args.peak_type,
        reverse_x=args.reverse_x,
        fwhm=args.fwhm,
示例#8
0
    help="print all symmetry elements",
)

pg_parser.add_argument(
    "-b",
    "--bild",
    action="store_true",
    default=False,
    dest="print_bild",
    help="print Chimera(X) bild file to display various symmetry elements",
)

args = pg_parser.parse_args()

s = ""
for f in glob_files(args.infile, parser=pg_parser):
    if isinstance(f, str):
        if args.input_format is not None:
            infile = FileReader((f, args.input_format, None), just_geom=True)
        else:
            infile = FileReader(f, just_geom=True)
    else:
        if args.input_format is not None:
            infile = FileReader(("from stdin", args.input_format[0], f),
                                just_geom=True)
        else:
            if len(sys.argv) >= 1:
                infile = FileReader(("from stdin", "xyz", f), just_geom=True)

    geom = Geometry(infile)
    pg = PointGroup(
示例#9
0
if args.csv:
    if args.csv == "comma":
        sep = ","
    elif args.csv == "tab":
        sep = "\t"
    elif args.csv == "semicolon":
        sep = ";"
    else:
        sep = " "

s = ""

np.set_printoptions(precision=5)

for f in glob_files(args.infile, parser=info_parser):
    if isinstance(f, str):
        if args.input_format is not None:
            infile = FileReader((f, args.input_format[0], None),
                                just_geom=False)
        else:
            infile = FileReader(f, just_geom=False)
    else:
        if args.input_format is not None:
            infile = FileReader(("from stdin", args.input_format[0], f),
                                just_geom=False)
        else:
            if len(sys.argv) >= 1:
                infile = FileReader(("from stdin", "xyz", f), just_geom=False)

    if args.list:
示例#10
0
                         help="also try swapping target order when minimizing")

args = ring_parser.parse_args()

if args.list_avail:
    s = ""
    for i, name in enumerate(sorted(Ring.list())):
        s += "%-20s" % name
        # if (i + 1) % 3 == 0:
        if (i + 1) % 1 == 0:
            s += "\n"

    print(s.strip())
    exit(0)

for infile in glob_files(args.infile, parser=ring_parser):
    if isinstance(infile, str):
        if args.input_format is not None:
            f = FileReader((infile, args.input_format, infile))
        else:
            f = FileReader(infile)
    else:
        if args.input_format is not None:
            f = FileReader(("from stdin", args.input_format, stdin))
        else:
            f = FileReader(("from stdin", "xyz", stdin))

    geom = Geometry(f)

    targets = {}
示例#11
0
    help=
    "put structures in specified directory\nDefault: don't output structures",
)

args = unique_parser.parse_args()

if args.energy_filter is None:
    args.energy_filter = 0.2

mirror_mat = np.eye(3)
mirror_mat[0][0] *= -1

# dictionary of structures, which will be ordered by number of atoms, elements, etc.
structures = {}

for f in glob_files(args.infile, parser=unique_parser):
    if isinstance(f, str):
        if args.input_format is not None:
            infile = FileReader((f, args.input_format, None), just_geom=False)
        else:
            infile = FileReader(f, just_geom=False)
    else:
        if args.input_format is not None:
            infile = FileReader(("from stdin", args.input_format, f),
                                just_geom=False)
        else:
            if len(sys.argv) >= 1:
                infile = FileReader(("from stdin", "xyz", f), just_geom=False)

    geom = Geometry(infile)
    geom.other = infile.other
示例#12
0
if args.angle is None and args.num is None:
    raise ValueError("must specified one of ('--angle', '--number')")
elif args.num is None and args.angle is not None:
    args.num = 1
    args.angle = args.angle
elif args.num is not None and args.angle is None:
    args.num = args.num
    args.angle = 360.0 / args.num
elif args.num is not None and args.angle is not None:
    args.num = args.num
    args.angle = args.angle

if not args.radians:
    args.angle = np.deg2rad(args.angle)

for f in glob_files(args.infile, parser=rotate_parser):
    if isinstance(f, str):
        if args.input_format is not None:
            infile = FileReader((f, args.input_format, None))
        else:
            infile = FileReader(f)
    else:
        if args.input_format is not None:
            infile = FileReader(("from stdin", args.input_format, f))
        else:
            infile = FileReader(("from stdin", "xyz", f))

    geom = Geometry(infile)
    center = args.center

    if args.fragment is not None:
示例#13
0
    dest="comment",
    help="comment line"
)

xyz_parser.add_argument(
    "-a", "--append",
    action="store_true",
    default=False,
    required=False,
    dest="append",
    help="append structures to output file if it already exists\nDefault: false"
)

args = xyz_parser.parse_args()

for f in glob_files(args.infile, parser=xyz_parser):
    if isinstance(f, str):
        if args.input_format is not None:
            infile = FileReader((f, args.input_format, None))
        else:
            infile = FileReader(f)
    else:
        if args.input_format is not None:
            infile = FileReader(("from stdin", args.input_format, f))
        else:
            if len(sys.argv) >= 1:
                infile = FileReader(("from stdin", "xyz", f))

    geom = Geometry(infile, refresh_connected=False, refresh_ranks=False)
    if args.comment:
        geom.comment = args.comment
示例#14
0
angle_parser.add_argument(
    "-o",
    "--output",
    type=str,
    default=False,
    required=False,
    dest="outfile",
    metavar="output destination",
    help="output destination\n" +
    "$INFILE will be replaced with the name of the input file\n" +
    "Default: stdout")

args = angle_parser.parse_args()

for f in glob_files(args.infile, parser=angle_parser):
    if isinstance(f, str):
        if args.input_format is not None:
            infile = FileReader((f, args.input_format[0], None))
        else:
            infile = FileReader(f)
    else:
        if args.input_format is not None:
            infile = FileReader(("from stdin", args.input_format[0], f))
        else:
            infile = FileReader(("from stdin", "xyz", f))

    geom = Geometry(infile)

    #set angle to specified value
    for angle in args.set_ang:
示例#15
0
stat_parser.add_argument("-o",
                         "--output",
                         type=str,
                         nargs="+",
                         default=None,
                         required=False,
                         dest="outfile",
                         help="output destination\nDefault: stdout")

args = stat_parser.parse_args()

s = ""

header_vals = [None]

for f in glob_files(args.infile, parser=stat_parser):
    if isinstance(f, str):
        if args.input_format is not None:
            infile = FileReader((f, args.input_format[0], None),
                                just_geom=False)
        else:
            infile = FileReader(f, just_geom=False)
    else:
        if args.input_format is not None:
            infile = FileReader(("from stdin", args.input_format[0], f),
                                just_geom=False)
        else:
            stat_parser.print_help()
            raise RuntimeError(
                "when no input file is given, stdin is read and a format must be specified"
            )
示例#16
0
        kwargs[pos].extend(opt)

for pos in [PSI4_BEFORE_GEOM, PSI4_AFTER_JOB, PSI4_BEFORE_JOB, GAUSSIAN_POST]:
    opt = getattr(args, pos)
    if opt:
        if pos not in kwargs:
            kwargs[pos] = []

        kwargs[pos].extend([" ".join(word) for word in opt])

if args.comments:
    kwargs["comments"] = [" ".join(comment) for comment in args.comments]

# Theory() is made for each file because we might be using things from the input file
for f in glob_files(args.infile, parser=theory_parser):
    if isinstance(f, str):
        if args.input_format is not None:
            infile = FileReader((f, args.input_format[0], None),
                                just_geom=False,
                                get_all=True)
        else:
            infile = FileReader(f, just_geom=False, get_all=True)
    else:
        if args.input_format is not None:
            infile = FileReader(("from stdin", args.input_format[0], f),
                                just_geom=False,
                                get_all=True)
        else:
            if len(sys.argv) >= 1:
                infile = FileReader(("from stdin", "xyz", f),
示例#17
0
    anharm_header = delim.join([
        "E", "E+ZPE", "E+ZPE(anh)", "H(RRHO)", "G(RRHO)", "G(Quasi-RRHO)",
        "G(Quasi-harmonic)", "ZPE", "ZPE(anh)", "dH(RRHO)", "dG(RRHO)",
        "dG(Quasi-RRHO)", "dG(Quasi-harmonic)", "SP_File", "Thermo_File"
    ])
    harm_header = delim.join([
        "E", "E+ZPE", "H(RRHO)", "G(RRHO)", "G(Quasi-RRHO)",
        "G(Quasi-harmonic)", "ZPE", "dH(RRHO)", "dG(RRHO)", "dG(Quasi-RRHO)",
        "dG(Quasi-harmonic)", "SP_File", "Thermo_File"
    ])

header = None
output = ""

if args.pattern is None:
    infiles = glob_files(args.infile, parser=thermo_parser)
else:
    infiles = []
    if args.infile == [sys.stdin]:
        directories = [os.getcwd()]
    else:
        directories = []
        for directory in args.infile:
            directories.extend(glob(directory))

    for directory in directories:
        for root, dirs, files in os.walk(directory, topdown=True):
            for pattern in args.pattern:
                full_glob = os.path.join(root, pattern)
                infiles.extend(glob(full_glob))
示例#18
0
eye = np.identity(3)

if args.yz_plane:
    eye[0, 0] *= -1

if args.xz_plane:
    eye[1, 1] *= -1

if args.xy_plane:
    eye[2, 2] *= -1

if np.sum(eye) == 3:
    eye[0, 0] *= -1

for f in glob_files(args.infile, parser=mirror_parser):
    if isinstance(f, str):
        if args.input_format is not None:
            infile = FileReader((f, args.input_format, None))
        else:
            infile = FileReader(f)
    else:
        if args.input_format is not None:
            infile = FileReader(("from stdin", args.input_format, f))
        else:
            infile = FileReader(("from stdin", "xyz", f))

    geom = Geometry(infile)

    geom.update_geometry(np.dot(geom.coords, eye))
示例#19
0
    help="translate the centroid of the targets to the destination")

translate_parser.add_argument(
    "-o",
    "--output",
    type=str,
    default=False,
    required=False,
    dest="outfile",
    help="output destination\n" +
    "$INFILE will be replaced with the name of the input file\n" +
    "Default: stdout")

args = translate_parser.parse_args()

for f in glob_files(args.infile, parser=translate_parser):
    if isinstance(f, str):
        if args.input_format is not None:
            infile = FileReader((f, args.input_format, None))
        else:
            infile = FileReader(f)
    else:
        if args.input_format is not None:
            infile = FileReader(("from stdin", args.input_format, f))
        else:
            infile = FileReader(("from stdin", "xyz", f))

    geom = Geometry(infile)

    # targets to move
    targets = []
示例#20
0
mc_options.add_argument(
    "-i", "--minimum-iterations",
    type=int,
    default=25,
    metavar="ITERATIONS",
    dest="min_iter",
    help="minimum iterations - each is a batch of 3000 points\n" +
    "MC will continue after this until convergence criteria are met\n" +
    "Default: 25",
)

args = vbur_parser.parse_args()

s = ""

for f in glob_files(args.infile, parser=vbur_parser):
    if isinstance(f, str):
        if args.input_format is not None:
            infile = FileReader((f, args.input_format[0], None))
        else:
            infile = FileReader(f, just_geom=False)
    else:
        if args.input_format is not None:
            infile = FileReader(("from stdin", args.input_format[0], f))
        else:
            if len(sys.argv) >= 1:
                infile = FileReader(("from stdin", "xyz", f))

    geom = Geometry(infile)

    targets = None
示例#21
0
    "Default: umn",
)

cone_parser.add_argument(
    "-b", "--cone-bild",
    action="store_true",
    default=False,
    dest="print_cones",
    help="print Chimera/ChimeraX bild file containing cones",
)

args = cone_parser.parse_args()

s = ""

for f in glob_files(args.infile, parser=cone_parser):
    if isinstance(f, str):
        if args.input_format is not None:
            infile = FileReader((f, args.input_format[0], None))
        else:
            infile = FileReader(f, just_geom=False)
    else:
        if args.input_format is not None:
            infile = FileReader(("from stdin", args.input_format[0], f))
        else:
            if len(sys.argv) >= 1:
                infile = FileReader(("from stdin", "xyz", f))

    geom = Geometry(infile)

    ligand = geom.get_fragment(args.key_atoms, stop=args.center)
示例#22
0
def main(argv):
    sterimol_parser = argparse.ArgumentParser(
        description=
        "calculate Boltzmann-weighted Sterimol parameters - see doi 10.1021/acscatal.8b04043",
        formatter_class=argparse.RawTextHelpFormatter)

    sterimol_parser.add_argument("infiles",
                                 metavar="input files",
                                 type=str,
                                 nargs="+",
                                 help="file containing coordinates and energy")

    sterimol_parser.add_argument("-if",
                                 "--input-format",
                                 type=str,
                                 default=None,
                                 choices=["log", "out", "dat"],
                                 dest="input_format",
                                 help="file format of input")

    sterimol_parser.add_argument(
        "-s",
        "--substituent-atom",
        type=str,
        required=True,
        dest="targets",
        help="substituent atom\n" +
        "1-indexed position of the starting position of the\n" +
        "substituent of which you are calculating sterimol\nparameters")

    sterimol_parser.add_argument(
        "-a",
        "--attached-to",
        type=str,
        required=True,
        dest="avoid",
        help="non-substituent atom\n" +
        "1-indexed position of the starting position of the atom\n" +
        "connected to the substituent of which you are calculating\n" +
        "sterimol parameters")

    sterimol_parser.add_argument(
        "-r",
        "--radii",
        type=str,
        default="bondi",
        choices=["bondi", "umn"],
        dest="radii",
        help="VDW radii to use in calculation\n" +
        "umn: main group vdw radii from J. Phys. Chem. A 2009, 113, 19, 5806–5812\n"
        + "    (DOI: 10.1021/jp8111556)\n" +
        "    transition metals are crystal radii from Batsanov, S.S. Van der Waals\n"
        + "    Radii of Elements. Inorganic Materials 37, 871–885 (2001).\n" +
        "    (DOI: 10.1023/A:1011625728803)\n" +
        "bondi: radii from J. Phys. Chem. 1964, 68, 3, 441–451 (DOI: 10.1021/j100785a001)\n"
        + "Default: bondi")

    sterimol_parser.add_argument(
        "-l",
        "--old-l",
        action="store_true",
        required=False,
        dest="old_L",
        help="approximate FORTRAN Sterimol method for determining L\n"
        "This is 0.4 + the ideal bond length for a target-H bond\n"
        "to outer VDW radii of atoms projected onto L-axis\n"
        "Default: L value is from VDW radii of target atom to outer\n"
        "VDW radii of atoms projected onto L-axis")

    sterimol_parser.add_argument("-t",
                                 "--temperature",
                                 type=float,
                                 default=298.15,
                                 required=False,
                                 dest="temperature",
                                 help="temperature in K\nDefault: 298.15")

    sterimol_parser.add_argument(
        "-f",
        "--frequency",
        action="store_true",
        default=False,
        required=False,
        dest="frequency",
        help="input files are frequency job output files\n"
        "additional average values will be calculated for ZPE, H, G, etc.")

    sterimol_parser.add_argument(
        "-w0",
        "--frequency-cutoff",
        type=float,
        default=100.0,
        required=False,
        dest="w0",
        help="cutoff frequency for quasi free energy corrections (1/cm)\n" +
        "Default: 100 cm^-1")

    sterimol_parser.add_argument("-v",
                                 "--verbose",
                                 action="store_true",
                                 default=False,
                                 required=False,
                                 dest="verbose",
                                 help="also print population")

    sterimol_parser.add_argument("-o",
                                 "--output",
                                 type=str,
                                 default=False,
                                 required=False,
                                 metavar="output destination",
                                 dest="outfile",
                                 help="output destination\n" +
                                 "Default: stdout")

    args = sterimol_parser.parse_args(args=argv)

    subs = []
    energies = {"E": []}
    if args.frequency:
        energies["E+ZPE"] = []
        energies["H(RRHO)"] = []
        energies["G(RRHO)"] = []
        energies["G(Quasi-RRHO)"] = []
        energies["G(Quasi-Harmonic)"] = []

    for infile in glob_files(args.infiles, parser=sterimol_parser):
        if args.input_format is not None:
            fr = FileReader((infile, args.input_format, infile),
                            just_geom=False)
        else:
            fr = FileReader(infile, just_geom=False)

        geom = Geometry(fr)
        target = args.targets
        avoid = args.avoid
        end = geom.find(avoid)[0]
        frag = geom.get_fragment(target, stop=end)
        sub = Substituent(frag, end=end, detect=False)
        subs.append(sub)

        nrg = fr.other["energy"]
        energies["E"].append(nrg)
        if args.frequency:
            co = CompOutput(fr)
            dE, dH, entropy = co.therm_corr(temperature=args.temperature)
            rrho_dG = co.calc_G_corr(v0=0,
                                     temperature=args.temperature,
                                     method="RRHO")
            qrrho_dG = co.calc_G_corr(v0=args.w0,
                                      temperature=args.temperature,
                                      method="QRRHO")
            qharm_dG = co.calc_G_corr(v0=args.w0,
                                      temperature=args.temperature,
                                      method="QHARM")
            energies["E+ZPE"].append(nrg + co.ZPVE)
            energies["H(RRHO)"].append(nrg + dH)
            energies["G(RRHO)"].append(nrg + rrho_dG)
            energies["G(Quasi-RRHO)"].append(nrg + qrrho_dG)
            energies["G(Quasi-Harmonic)"].append(nrg + qharm_dG)

    s = ""
    for nrg_type in energies:
        energies_arr = np.array(energies[nrg_type])
        energies_arr *= UNIT.HART_TO_KCAL

        if args.verbose and nrg_type == "E":
            s += "\t".join(["B1", "B2", "B3", "B4", "B5", "L", "file"])
            s += "\n"
            for f, sub in zip(args.infiles, subs):
                data = sub.sterimol(
                    radii=args.radii,
                    old_L=args.old_L,
                )
                s += "\t".join([
                    "%.2f" % data[x]
                    for x in ["B1", "B2", "B3", "B4", "B5", "L"]
                ])
                s += "\t%s\n" % f
        s += "weighted using %s:\n" % nrg_type
        data = Substituent.weighted_sterimol(
            subs,
            energies_arr,
            args.temperature,
            radii=args.radii,
            old_L=args.old_L,
        )
        if args.verbose:
            coeff = boltzmann_coefficients(energies_arr, args.temperature)
            coeff /= sum(coeff)
            coeff *= 100
            for f, c, e in zip(args.infiles, coeff, energies_arr):
                s += "%s  %.1f%% (%.1f kcal/mol)\n" % (f, c,
                                                       e - min(energies_arr))

        s += "\t".join(["B1", "B2", "B3", "B4", "B5", "L"])
        s += "\n"
        s += "\t".join(
            ["%.2f" % data[x] for x in ["B1", "B2", "B3", "B4", "B5", "L"]])
        s += "\n"
        s += "\n"

    if not args.outfile:
        print(s)
    else:
        with open(args.outfile, "w") as f:
            f.write(s)
示例#23
0
if args.geometry:
    new_vsepr = args.geometry.replace("_", " ")

if adjust_hs == 0 and new_vsepr is None:
    adjust_structure = False
elif adjust_hs == 0 and new_vsepr:
    goal = len(Atom.get_shape(new_vsepr)) - 1
    def goal_func(atom, goal=goal):
        return goal - len(atom.connected)
    adjust_structure = (goal_func, new_vsepr)
elif adjust_hs is True:
    adjust_structure = True
else:
    adjust_structure = (adjust_hs, new_vsepr)

for f in glob_files(args.infile, parser=element_parser):
    if isinstance(f, str):
        if args.input_format is not None:
            infile = FileReader((f, args.input_format, None))
        else:
            infile = FileReader(f)
    else:
        if args.input_format is not None:
            infile = FileReader(("from stdin", args.input_format, f))
        else:
            if len(sys.argv) >= 1:
                infile = FileReader(("from stdin", "xyz", f))

    geom = Geometry(infile)

    target_list = []
示例#24
0
                          help="scale VDW radii by this amount\nDefault: 1.17")

args = steric_parser.parse_args()

oop_vector = args.oop_vector
if args.oop_vector is not None:
    oop_vector = np.array(args.oop_vector)

ip_vector = args.ip_vector
if args.ip_vector is not None:
    ip_vector = np.array(args.ip_vector)

if args.vbur is None:
    args.vbur = "Lebedev"

for f in glob_files(args.infile, parser=steric_parser):
    if isinstance(f, str):
        if args.input_format is not None:
            infile = FileReader((f, args.input_format[0], None))
        else:
            infile = FileReader(f, just_geom=False)
    else:
        if args.input_format is not None:
            infile = FileReader(("from stdin", args.input_format[0], f))
        else:
            if len(sys.argv) >= 1:
                infile = FileReader(("from stdin", "xyz", f))

    geom = Geometry(infile)

    x, y, z, min_alt, max_alt, basis, targets = geom.steric_map(
示例#25
0
dihedral_parser.add_argument(
    "-o",
    "--output",
    type=str,
    default=False,
    required=False,
    dest="outfile",
    metavar="output destination",
    help="output destination\n" +
    "$INFILE will be replaced with the name of the input file\n" +
    "Default: stdout")

args = dihedral_parser.parse_args()

for f in glob_files(args.infile, dihedral_parser):
    if isinstance(f, str):
        if args.input_format is not None:
            infile = FileReader((f, args.input_format, None))
        else:
            infile = FileReader(f)
    else:
        if args.input_format is not None:
            infile = FileReader(("from stdin", args.input_format, f))
        else:
            infile = FileReader(("from stdin", "xyz", f))

    geom = Geometry(infile)

    # set dihedral to specified value
    for dihedral in args.set_ang:
示例#26
0
if args.chiral:
    finders.append(ChiralCenters())

if args.delim == "comma":
    delim = ","
elif args.delim == "space":
    delim = " "
elif args.delim == "tab":
    delim = "\t"
elif args.delim == "semicolon":
    delim = ";"

s = ""

for f in glob_files(args.infile, parser=find_parser):
    if isinstance(f, str):
        if args.input_format is not None:
            infile = FileReader((f, args.input_format, None))
        else:
            infile = FileReader(f)
    else:
        if args.input_format is not None:
            infile = FileReader(("from stdin", args.input_format, f))
        else:
            if len(sys.argv) >= 1:
                infile = FileReader(("from stdin", "xyz", f))

    geom = Geometry(infile)

    geom_finders = [x for x in finders]
示例#27
0
    "atom on the molecule that is connected to the fragment being removed\nDefault: longest fragment",
)

remove_frag_parser.add_argument(
    "-a",
    "--add-hydrogen",
    action="store_true",
    required=False,
    default=False,
    dest="add_H",
    help="add hydrogen to cap where the fragment was removed",
)

args = remove_frag_parser.parse_args()

for infile in glob_files(args.infile, parser=remove_frag_parser):
    if isinstance(infile, str):
        if args.input_format is not None:
            f = FileReader((infile, args.input_format[0], infile))
        else:
            f = FileReader(infile)
    else:
        if args.input_format is not None:
            f = FileReader(("from stdin", args.input_format[0], infile))
        else:
            f = FileReader(("from stdin", "xyz", infile))

    geom = Geometry(f)

    for atom in geom.find(args.target):
        if atom in geom.atoms:
示例#28
0
    dest="wait_last",
    help="wait for the last job to finish before exiting",
)

submit_parser.add_argument(
    "-we",
    "--wait-each",
    action="store_true",
    default=False,
    dest="wait_each",
    help="wait for each job to finish before submitting the next",
)

args = submit_parser.parse_args()

for i, f in enumerate(glob_files(args.infile, parser=submit_parser)):
    # TODO: if processors etc. is not specified, read the input file to see if
    #       processors were specified

    processors = args.processors
    memory = args.memory
    walltime = args.time
    template = args.template

    if args.section is not None:
        if args.processors is None:
            processors = config.getint(args.section,
                                       "processors",
                                       fallback=None)
        if args.memory is None:
            memory = config.getint(args.section, "memory", fallback=None)
示例#29
0
def main(argv):
    sterimol_parser = argparse.ArgumentParser(
        description="calculate B1-B5, and L sterimol parameters for substituents - see Verloop, A. and Tipker, J. (1976), Use of linear free energy related and other parameters in the study of fungicidal selectivity. Pestic. Sci., 7: 379-390.",
        formatter_class=argparse.RawTextHelpFormatter
    )
    
    sterimol_parser.add_argument(
        "infile", metavar="input file",
        type=str,
        nargs="*",
        default=[sys.stdin],
        help="a coordinate file"
    )
    
    sterimol_parser.add_argument(
        "-if", "--input-format",
        type=str,
        default=None,
        choices=read_types,
        dest="input_format",
        help="file format of input\nxyz is assumed if input is stdin"
    )
    
    sterimol_parser.add_argument(
        "-s", "--substituent-atom",
        type=str,
        required=True,
        dest="targets",
        help="substituent atom\n" +
        "1-indexed position of the starting position of the\n" +
        "substituent of which you are calculating sterimol\nparameters"
    )
    
    sterimol_parser.add_argument(
        "-a", "--attached-to",
        type=str,
        required=True,
        dest="avoid",
        help="non-substituent atom\n" +
        "1-indexed position of the starting position of the atom\n" +
        "connected to the substituent of which you are calculating\n" +
        "sterimol parameters"
    )
    
    sterimol_parser.add_argument(
        "-r", "--radii",
        type=str,
        default="bondi",
        choices=["bondi", "umn"],
        dest="radii",
        help="VDW radii to use in calculation\n" + 
        "umn: main group vdw radii from J. Phys. Chem. A 2009, 113, 19, 5806–5812\n" +
        "    (DOI: 10.1021/jp8111556)\n" + 
        "    transition metals are crystal radii from Batsanov, S.S. Van der Waals\n" +
        "    Radii of Elements. Inorganic Materials 37, 871–885 (2001).\n" +
        "    (DOI: 10.1023/A:1011625728803)\n" + 
        "bondi: radii from J. Phys. Chem. 1964, 68, 3, 441–451 (DOI: 10.1021/j100785a001)\n" +
        "Default: bondi"
    )
    
    sterimol_parser.add_argument(
        "-l", "--old-l",
        action="store_true",
        required=False,
        dest="old_L",
        help="approximate FORTRAN Sterimol method for determining L\n"
        "This is 0.4 + the ideal bond length for a target-H bond\n"
        "Default: L value is from VDW radii of target atom to outer\n"
        "VDW radii of atoms projected onto L-axis"
    )

    sterimol_parser.add_argument(
        "-al", "--at-L",
        default=[None],
        dest="L_value",
        type=lambda x: [float(v) for v in x.split(",")],
        help="get widths at specific L values (comma-separated)\n"
        "Default: use the entire ligand",
    )

    sterimol_parser.add_argument(
        "-v", "--vector",
        action="store_true",
        required=False,
        dest="vector",
        help="print Chimera/ChimeraX bild file for vectors instead of parameter values"
    )
    
    sterimol_parser.add_argument(
        "-o", "--output",
        type=str,
        default=False,
        required=False,
        metavar="output destination",
        dest="outfile",
        help="output destination\n" +
        "Default: stdout"
    )
    
    args = sterimol_parser.parse_args(args=argv)
    
    s = ""
    if not args.vector:
        s += "B1\tB2\tB3\tB4\tB5\tL\tfile\n"
    
    for infile in glob_files(args.infile, parser=sterimol_parser):
        if isinstance(infile, str):
            if args.input_format is not None:
                f = FileReader((infile, args.input_format, infile))
            else:
                f = FileReader(infile)
        else:
            if args.input_format is not None:
                f = FileReader(("from stdin", args.input_format, infile))
            else:
                f = FileReader(("from stdin", "xyz", infile))
    
        geom = Geometry(f)
        target = args.targets
        avoid = args.avoid
        end = geom.find(avoid)[0]
        frag = geom.get_fragment(target, stop=end)
        sub = Substituent(frag, end=end, detect=False)
        for val in args.L_value:
            data = sub.sterimol(
                return_vector=args.vector,
                radii=args.radii,
                old_L=args.old_L,
                at_L=val,
            )
            if args.vector:
                for key, color in zip(
                        ["B1", "B2", "B3", "B4", "B5", "L"],
                        ["black", "green", "purple", "orange", "red", "blue"]
                ):
                    start, end = data[key]
                    s += ".color %s\n" % color
                    s += ".note Sterimol %s\n" % key
                    s += ".arrow %6.3f %6.3f %6.3f   %6.3f %6.3f %6.3f\n" % (*start, *end)
            else:
                s += "%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%s\n" % (
                    data["B1"],
                    data["B2"],
                    data["B3"],
                    data["B4"],
                    data["B5"],
                    data["L"],
                    infile,
                )
    
    if not args.outfile:
        print(s)
    else:
        with open(args.outfile, "w") as f:
            f.write(s)