Source code for openmicron.utils.redefinetop
[docs]
class RedefineTopology(object):
def __init__(self):
pass
[docs]
def get_mini_component_set(self,chains):
"""
To get minimal component set
Parameters
----------
top: topology
The topology of OpenMM System.
Return
------
num_mini_set: int
The number of minimal component set.
"""
sequence = []
for _,i_chian in enumerate(chains):
i_seq = ''
for ires in i_chian._residues:
i_seq+=ires.name
sequence.append(i_seq)
self.unique_sequence = list(set(sequence))
len_mini_component = len(self.unique_sequence)
self.num_mini_component_set = int(len(chains)/len_mini_component)
self.num_atom_per_set = 0
add_chain = []
for i,iseq in enumerate(sequence):
if iseq in self.unique_sequence and iseq not in add_chain:
self.num_atom_per_set +=len(list(chains[i].atoms()))
add_chain.append(iseq)
#return self.num_mini_component_set,self.num_atom_per_set
[docs]
def redefine_bond(self,top,bonds):
"""
To redefine the bonds in topology.
Parameters
----------
top: topology
The topology of OpenMM System.
bonds: bond
bonds in system.
Return
------
top: openmm topology
"""
self.top = top
self.atoms = list(self.top.atoms())
self.top._bonds = []
chains = self.top._chains
self.get_mini_component_set(chains)
for ic in range(self.num_mini_component_set):
for i_bond in bonds:
index1 = ic*self.num_atom_per_set + i_bond[0].index
index2 = ic*self.num_atom_per_set + i_bond[1].index
self.top.addBond(self.atoms[index1],self.atoms[index2])