def to_omm_topology(self): ''' Generate OpenMM topology from this topology Returns ------- omm_topology : mm.app.Topology ''' try: from simtk.openmm import app as omm_app from simtk.openmm.app.element import Element as omm_Element except ImportError: raise Exception('cannot import openmm') omm_top = omm_app.Topology() omm_chain = omm_top.addChain() for mol in self._molecules: omm_residue = omm_top.addResidue(mol.name, omm_chain) for atom in mol.atoms: try: omm_element = omm_Element.getBySymbol(atom.symbol) except: omm_element = None omm_top.addAtom(atom.name, omm_element, omm_residue) if self.cell.volume != 0: omm_top.setPeriodicBoxVectors(self.cell.vectors) omm_atoms = list(omm_top.atoms()) for bond in self.bonds: omm_top.addBond(omm_atoms[bond.atom1.id], omm_atoms[bond.atom2.id]) return omm_top