schrodinger.structutils.interactions package

Detect interactions between structures using the same underlying rules as maestro. Currently has functions to detect pi-pi interactions, pi-cation interactions, salt bridges, and steric clashes.

Examples

Pi-cation interactions:

from schrodinger.structutils import interactions
from schrodinger import structure

with structure.StructureReader(input_file) as reader:
    recep = next(reader)
    # Precalculate receptor rings and cations to save time
    rings = interactions.gather_rings(recep)
    cations = interactions.get_receptor_positive_centroids(recep)

    for st in reader:
        picats = interactions.find_pi_cation_interactions(recep,
                                    rings1=rings, cations1=cations,
                                    struct2=st)

Pi-pi interactions:

from schrodinger.structutils import interactions
from schrodinger import structure

with structure.StructureReader(input_file) as reader:
    recep = next(reader)
    # Precalculate receptor rings to save time
    rings = interactions.gather_rings(recep)
    for st in reader:
        pipi = interactions.find_pi_pi_interactions(recep,
                                        rings1=rings, struct2=st)

Find all salt bridge interactions within a protein:

from schrodinger.structutils import interactions
from schrodinger.structure import StructureReader
st = Structure.read("protein.maegz")
for atom1, atom2 in interactions.get_salt_bridges(st):
    print(f"Salt bridge between atoms {atom1.index} and {atom2.index}")

Find all salt bridges within a single protein chain:

st = Structure.read("protein.mae.gz")
atoms = st.chain["C"].getAtomIndices()
for atom1, atom2 in interactions.get_salt_bridges(st, atoms):
    print(f"Salt bridge between atoms {atom1.index} and {atom2.index}")

Find all salt bridges between a protein and a ligand:

with StructureReader("protein_and_ligand.mae.gz") as reader:
    prot, lig = reader
for atom1, atom2 in interactions.get_salt_bridges(prot, struc2=lig):
    print(f"Salt bridge between atoms {atom1.index} and {atom2.index}")