Functions for modifying chemical structures.

Copyright Schrodinger, LLC. All rights reserved., atomlist1, atomlist2)

Perform a connect between the atoms in the CT “st” based on the heavy atoms in atomlist1 and those in atomlist2. Usually each list will contain one atom each, from different molecules. Hydrogens bound to the specified atoms are removed as necessary, and the molecule of atomlist2 will be rotated and translated such that the newly formed bond(s) are proper length, and bond angles are valid.

Returns a dictionary of atom renumbering. Keys are old atom numbers, values are new atom numbers (or None if the atom was deleted, i.e. a hydrogen)., fromatom, toatom, fraggroup, fragname, direction=None, torsion_group=None, conformation=None)

Attach fragment <fragname> of group <fraggroup> to <fromatom> in place of atom <toatom>. Will use growbond atom labels in the incoming fragment.

Optionally specify a <direction> string. Usually one of the following: ‘forward’, ‘backward’, ‘forward(N-to-C)’, ‘backward(C-to-N)’.

Optionally specify a torsion group and associated conformation. Usually this will be a secondary structure string such as “extended” for torsion group “Secondary_Structure:”

Returns a dictionary of atom renumbering. Keys are old atom numbers, values are new atom numbers (or None if the atom was deleted, i.e. a hydrogen).

  • st (structure.Structure) – structure to work on

  • fromatom (int) – atom on which to make the attachment

  • toatom (int) – atom to be replaced by the attachment

  • fraggroup (str) – mmfrag category of the fragment to attach

  • fragname (str) – name of the fragment to attach

  • direction (str) – direction of the attachment

  • torsion_group (str) – a torsion group specifier

  • conformation (str) – a conformations specifier, mmfrag_handle, grow_atoms1, grow_atoms2)

Grow for fragments with multiple connections, such as two-stranded DNA & RNA.

The st is the structure to which to add the fragment. The frag handle is an mmfrag instance of the fragment to grow.

Returns a tuple of (new-grow-atom-1, new-grow-atom-2, renumber-map). The new-grow-atom-1 and new-grow-atom-2 are lists that match the renumbered atoms corresponding to grow_atoms1 and grow_atoms2. The reunumber map is a dictionary of atom renumbering. Keys are old atom numbers, values are new atom numbers (or None if the atom was deleted, i.e. a hydrogen)., st_atom_from, st_atom_to, frag_st, frag_atom_from, frag_atom_to)

Similar to attach_fragment(), but takes a fragment CT instead of name. From and to atoms in the fragment must also be specified., atom_in_res, res_type)

Mutate the residue containing atom number ‘atom_in_res’ in Structure object ‘st’ to be of residue type ‘res_type’. The residue type may be one of the 20 amino acids (including the HIS/HIP/HIE variants), a D-amino acids, or other non-standard residues. For a list of alternate residues, see the $MMSHARE/data/res/nonstandard_peptide.bld.

There is no error if the residue is already of the type requested.

  • st (Structure object) – Structure object which should be mutated.

  • atom_in_res (int) – Mutate the residue that this atom is in.

  • res_type (str) – Desired residue type (e.g. “ALA”).

Return type



A dictionary of renumbered atoms. Keys are old atom numbers, values are new atom numbers or None if the atom was deleted., treatment='All-atom with No-Lp', atom_list=None)

Adds hydrogens to the Structure ‘st’.

Default treatment is suitable for nearly all purposes. Hydrogens are added in standard geometry and no attempt is made to optimize the treatment in order to maximize hydrogen bonds, etc.



A list of atom indices (or _StructureAtom objects) to add hydrogens to (The default, None, means all atoms).

Deletes hydrogens from the Structure ‘st’.

Delete all zero-order bonds from the given structure.

Delete all bonds to the requested atoms. Use like:

build.delete_bonds_to_atoms(st.atom) build.delete_bonds_to_atoms(residue.atom) build.delete_bonds_to_atoms(map(st.atom.__getitem__, atom_indices))


atoms (iterable of atom objects) – atoms whose bonds should be deleted

Delete the requested bonds. Bonds can be StructureBond or pairs of _StructureAtom.


bonds (iterable[StructureBond] or list[(_StructureAtom, _StructureAtom)]) – Bonds to delete, new_order)

Create a new structure from the provided one, with atoms reordered as specified in the new_order list.


new_order (list of ints) – The new_order list must be the same size as the number atoms in the provided structure, and atom indices begin at one.

Renumbers structure.Structure atoms by Residue order and returns a new structure object. New structure has atom numbering in sequence order via connectivity (not residue numbering) and allows behavior matching a properly ordered pdb structure.


st (structure.Structure) – structure object to reorder

Return type



copy of input structure with atoms reordered schrodinger.structure._structure.Structure) schrodinger.structure._structure.Structure

Reorder water molecules so that they always stay at the end of the CT. A modified copy of st will be returned.

Returns a desalted copy of a specified structure


st (schrodinger.structure.Structure) – Structure to be desalted


Desalted copy of the structure

Return type


Return a copy of the structure with each functional group neutralized.

Attempts to make atoms neutral - it does not attempt to neutralize the overall charge. For instance, zwitterions will be neutralized such that all atoms have a 0 formal charge. Some atoms may not be adjusted.


st (schrodinger.structure.Structure) – Structure to be neutralized, hydrogens already present


Neutralized copy of the structure

Return type


Merge the input structure objects into one CT, while giving each chain a unique name.


sts (Iterable of structure.Structure objects.) – Subunit structures

Return type

tuple(structure.Structure, bool)


a tuple of the merged structure and a boolean indicating whether the renaming went OK (False if could not re-name chains due to running out of available names)., indices, copy_props=False, renumber_map=False)

Return a new structure object which contains the atoms of the struct that appear in the indices list and renumber map if requested.

  • indices (list[int]) – Atom indices to extract

  • copy_props (bool) – If True, then the new structure object will get structure-level properties from struct

  • renumber_map (bool) – If True, return a also a renumbering dictionary

Return type

structure.Structure or structure.Structure, dict


Extracted structure if renumber_map is False. Extracted structure and renumbering dictionary, if renumber_map is True. In renumber_map, keys are atom numbers before extraction, and value for each is the new atom number

Remove the alternate position of atoms in the structure.


st (structure.Structure object) – input structure.

Return type

structure.Structure object

Remove the alternate position of atom


atom (structure._StructureAtom object) – input atom, value, atom1, atom2, atom3, atom4)

Adjust an improper dihedral angle (generated, for example, from analyze.improper_dihedral_iterator)

The improper dihedral angle (in degrees) made by atom1, atom2, atom3 and atom4 will be set to value and atom4 and all other atoms attached to that will be moved.

NOTE: To adjust proper dihedrals, use Structure.adjust instead

  • st (Structure object) – the structure being modified

  • value (float) – value the internal coordinate will be set to

  • atom1 (int or _StructureAtom) – first atom in the coordinate

  • atom2 (int or _StructureAtom) – second atom in the coordinate

  • atom3 (int or _StructureAtom or None) – third atom in the coordinate (if None, the coordinate is a bond)

  • atom4 (int or _StructureAtom or None) – fourth atom in the coordinate (if None, the coordinate is an angle)


AtomsInRingError – if specified atoms are within a ring system.