Source code for molecular_simulations.utils.amber_utils
import string
import MDAnalysis as mda
[docs]
def assign_chainids(
u: mda.Universe, terminus_selection: str = 'name OXT'
) -> mda.Universe:
if not hasattr(u.atoms, 'chainIDs'):
u.add_TopologyAttr('chainIDs')
termini_atoms = u.select_atoms(terminus_selection)
termini_resindices = set(termini_atoms.resindices)
def get_chain_label(index):
if index < 26:
return string.ascii_uppercase[index]
first = string.ascii_uppercase[(index // 26) - 1]
second = string.ascii_uppercase[index % 26]
return first + second
chain_index = 0
assert u.residues is not None
for residue in u.residues:
residue.atoms.chainIDs = get_chain_label(chain_index)
if residue.resindex in termini_resindices:
chain_index += 1
return u