Esempio n. 1
0
def lig(config, inp: str, center: int, out: click.File):
    """Get all substructures (or ligands) that are bound to the center atom."""

    # setup reference molecular structure
    ref = ksr.constructMolecule(geometry=inp, out=out)
    nat = ref.get_number_of_atoms()

    # get all covalent bonding partner in reference complex
    covbonds = config.context.invoke(bonds, inp=inp)

    from kallisto.rmsd import recursiveGetSubstructures

    silentPrinter(config.silent,
                  "Write out substructures for {}".format(center), out)

    substructures = recursiveGetSubstructures(nat, covbonds, center)

    k = 0
    for path in substructures:
        silentPrinter(
            config.silent,
            "Substructure {}: {}".format(k, path),
            out,
        )
        k += 1
Esempio n. 2
0
def vdw(config, inp: str, out: click.File, chrg: int, vdwtype: str, angstrom: bool):
    """Charge-dependent atomic van der Waals radii in Bohr."""

    # Available VDWs
    availableVDW = ("rahm", "truhlar")
    if vdwtype not in availableVDW:
        errorbye(
            'VDW definition "{}" is not implemented. Please use "rahm" or "truhlar"'.format(
                vdwtype
            )
        )

    molecule = ksr.constructMolecule(geometry=inp, out=out)
    nat = molecule.get_number_of_atoms()

    if angstrom:
        from kallisto.units import Bohr

        scale = Bohr
    else:
        scale = 1.0

    vdw = molecule.get_vdw(chrg, vdwtype, scale)
    for i in range(nat):
        silentPrinter(config.silent, vdw[i], out)

    return vdw
Esempio n. 3
0
def rms(config, inp: Tuple[str, str], out: click.File):
    """Calculate the root mean squared deviation between two structures using quaternions.
    Based on a Fortran implementation by Chaok Seok, Evangelos
    Coutsias, and Ken Dill."""

    from kallisto.rmsd import rmsd

    mol1 = ksr.constructMolecule(geometry=inp[0], out=out)
    nat1 = mol1.get_number_of_atoms()
    mol2 = ksr.constructMolecule(geometry=inp[1], out=out)
    nat2 = mol2.get_number_of_atoms()

    # for RMSD comparison both coordinates need the same atom count
    if nat1 != nat2:
        errorbye(
            "Error: number of atoms do not match in {} and in {}".format(
                inp[0], inp[1]), )

    coord1 = mol1.get_positions()
    coord2 = mol2.get_positions()

    # get RMSD error and rotation matrix u
    error, u = rmsd(nat1, coord1, coord2)

    silentPrinter(config.silent, "RMSD {} Angstrom".format(error), out)
    silentPrinter(config.silent, "Rotation Matrix", out)
    click.echo(u, file=out)  # type: ignore

    return error, u
Esempio n. 4
0
def bonds(config, inp: str, partner: int, constrain: bool, out: click.File):
    """Get information about covalent bonding partner."""

    import os

    molecule = ksr.constructMolecule(geometry=inp, out=out)

    if partner == "X":
        # Get index table of covalent bonding partners
        bonds = molecule.get_bonds(partner=partner)
    else:
        # Get all covalent bonding partners of atom #partner
        bonds = molecule.get_bonds(partner=partner)

    nat = molecule.get_number_of_atoms()
    # write constrain file in xtb format
    if constrain:
        f = open("constrain.inp", "w")
        s = os.linesep
        f.write("$constrain" + s)
        for i in range(nat):
            for partner in bonds[i]:
                f.write(" distance: {}, {}, auto".format(
                    i + 1 + config.shift, partner + 1 + config.shift) + s)
        f.write("$end" + s)
        f.close()

    if partner != "X":
        silentPrinter(config.silent, str(bonds), out)
    else:
        for i in range(nat):
            silentPrinter(config.silent, str(bonds[i]), out)

    return bonds
Esempio n. 5
0
def prox(config, inp: str, size: Tuple[int, int], out: click.File):
    """Atomic proximity shells."""

    molecule = ksr.constructMolecule(geometry=inp, out=out)
    nat = molecule.get_number_of_atoms()
    prox = molecule.get_prox(size)
    for i in range(nat):
        silentPrinter(config.silent, prox[i], out)

    return prox
Esempio n. 6
0
def cns(config, inp: str, out: click.File, cntype: str):
    """Atomic coordination numbers."""

    molecule = ksr.constructMolecule(geometry=inp, out=out)
    cns = molecule.get_cns(cntype)
    nat = molecule.get_number_of_atoms()
    for i in range(nat):
        silentPrinter(config.silent, cns[i], out)

    return cns
Esempio n. 7
0
def eeq(config, inp: str, out: click.File, chrg: int):
    """Electronegativity equilibration atomic partial charges."""

    molecule = ksr.constructMolecule(geometry=inp, out=out)
    nat = molecule.get_number_of_atoms()
    eeq = molecule.get_eeq(chrg)
    for i in range(nat):
        silentPrinter(config.silent, eeq[i], out)

    return eeq
Esempio n. 8
0
def alp(config, inp: str, out: click.File, chrg: int, molecular: bool):
    """Static atomic polarizabilities in Bohr^3."""

    molecule = ksr.constructMolecule(geometry=inp, out=out)
    nat = molecule.get_number_of_atoms()
    alp = molecule.get_alp(charge=chrg)
    if molecular:
        silentPrinter(config.silent, np.sum(alp), out)
    else:
        for i in range(nat):
            silentPrinter(config.silent, alp[i], out)

    return alp
Esempio n. 9
0
def prox(config, inp: str, size: Tuple[int, int], out: click.File):
    """Atomic proximity shells."""

    # Stop if outer border is smaller than inner one
    if size[0] > size[1]:
        errorbye("Outer border is smaller than inner one. Switch them and try again!")

    molecule = ksr.constructMolecule(geometry=inp, out=out)
    nat = molecule.get_number_of_atoms()
    prox = molecule.get_prox(size)
    for i in range(nat):
        silentPrinter(config.silent, prox[i], out)

    return prox
Esempio n. 10
0
def cns(config, inp: str, out: click.File, cntype: str):
    """Atomic coordination numbers."""

    # Available CNs
    availableCN = ("erf", "cov", "exp")
    if cntype not in availableCN:
        errorbye(
            'CN definition "{}" is not implemented. Please use "erf", "cov", or "exp"'
            .format(cntype))

    molecule = ksr.constructMolecule(geometry=inp, out=out)
    cns = molecule.get_cns(cntype)
    nat = molecule.get_number_of_atoms()
    for i in range(nat):
        silentPrinter(config.silent, cns[i], out)

    return cns
Esempio n. 11
0
def vdw(config, inp: str, out: click.File, chrg: int, vdwtype: str,
        angstrom: bool):
    """Charge-dependent atomic van der Waals radii in Bohr."""

    molecule = ksr.constructMolecule(geometry=inp, out=out)
    nat = molecule.get_number_of_atoms()

    if angstrom:
        from kallisto.units import Bohr

        scale = Bohr
    else:
        scale = 1.0

    vdw = molecule.get_vdw(chrg, vdwtype, scale)
    for i in range(nat):
        silentPrinter(config.silent, vdw[i], out)

    return vdw
Esempio n. 12
0
def stm(config, inp: str, origin: int, partner: int, out: click.File):
    """Calculate sterimol descriptors using kallisto van der Waals radii."""

    # setup molecular structure
    mol = ksr.constructMolecule(geometry=inp, out=out)

    # calculate Sterimol descriptors: L, bmin, bmax
    from kallisto.sterics import getClassicalSterimol

    L, bmin, bmax = getClassicalSterimol(mol, origin, partner)

    # print origin and partner
    silentPrinter(
        config.silent,
        "Calculated for atom {0} (origin) and atom {1} (partner)".format(
            origin, partner
        ),
        out,
    )

    # descriptors in Bohr
    silentPrinter(
        config.silent,
        "L, Bmin, Bmax / au: {:8.6f} {:8.6f} {:8.6f}".format(L, bmin, bmax),
        out,
    )

    # descriptors in Angstrom
    from kallisto.units import Bohr

    silentPrinter(
        config.silent,
        "L, Bmin, Bmax / A: {:8.6f} {:8.6f} {:8.6f}".format(
            L * Bohr, bmin * Bohr, bmax * Bohr
        ),
        out,
    )

    return L, bmin, bmax