def test_generateResidueTemplate(): """ Test GAFF residue template generation from OEMol molecules. """ from openeye import oechem, oeiupac from pkg_resources import resource_filename gaff_xml_filename = utils.get_data_filename("parameters/gaff.xml") # Test independent ForceField instances. for molecule_name in IUPAC_molecule_names: mol = createOEMolFromIUPAC(molecule_name) # Generate an ffxml residue template. from openmoltools.forcefield_generators import generateResidueTemplate [template, ffxml] = generateResidueTemplate(mol) # Create a ForceField object. forcefield = ForceField(gaff_xml_filename) # Add the additional parameters and template to the forcefield. forcefield.registerResidueTemplate(template) forcefield.loadFile(StringIO(ffxml)) # Create a Topology from the molecule. from openmoltools.forcefield_generators import generateTopologyFromOEMol topology = generateTopologyFromOEMol(mol) # Parameterize system. system = forcefield.createSystem(topology, nonbondedMethod=NoCutoff) # Check potential is finite. positions = extractPositionsFromOEMOL(mol) check_potential_is_finite(system, positions) # Test adding multiple molecules to a single ForceField instance. forcefield = ForceField(gaff_xml_filename) for molecule_name in IUPAC_molecule_names: mol = createOEMolFromIUPAC(molecule_name) # Generate an ffxml residue template. from openmoltools.forcefield_generators import generateResidueTemplate [template, ffxml] = generateResidueTemplate(mol) # Add the additional parameters and template to the forcefield. forcefield.registerResidueTemplate(template) forcefield.loadFile(StringIO(ffxml)) # Create a Topology from the molecule. from openmoltools.forcefield_generators import generateTopologyFromOEMol topology = generateTopologyFromOEMol(mol) # Parameterize system. system = forcefield.createSystem(topology, nonbondedMethod=NoCutoff) # Check potential is finite. positions = extractPositionsFromOEMOL(mol) check_potential_is_finite(system, positions)
def createSystemFromIUPAC(iupac_name): """ Create an openmm system out of an oemol Parameters ---------- iupac_name : str IUPAC name Returns ------- molecule : openeye.OEMol OEMol molecule system : openmm.System object OpenMM system positions : [n,3] np.array of floats Positions topology : openmm.app.Topology object Topology """ from perses.utils.data import get_data_filename from perses.utils.openeye import extractPositionsFromOEMol # Create OEMol molecule = iupac_to_oemol(iupac_name) # Generate a topology. from openmoltools.forcefield_generators import generateTopologyFromOEMol topology = generateTopologyFromOEMol(molecule) # Initialize a forcefield with GAFF. # TODO: Fix path for `gaff.xml` since it is not yet distributed with OpenMM from simtk.openmm.app import ForceField gaff_xml_filename = get_data_filename('data/gaff.xml') forcefield = ForceField(gaff_xml_filename) # Generate template and parameters. from openmoltools.forcefield_generators import generateResidueTemplate [template, ffxml] = generateResidueTemplate(molecule) # Register the template. forcefield.registerResidueTemplate(template) # Add the parameters. forcefield.loadFile(StringIO(ffxml)) # Create the system. system = forcefield.createSystem(topology, removeCMMotion=False) # Extract positions positions = extractPositionsFromOEMol(molecule) return (molecule, system, positions, topology)
def createSystemFromIUPAC(iupac_name): """ Create an openmm system out of an oemol Parameters ---------- iupac_name : str IUPAC name Returns ------- molecule : openeye.OEMol OEMol molecule system : openmm.System object OpenMM system positions : [n,3] np.array of floats Positions topology : openmm.app.Topology object Topology """ # Create OEMol molecule = createOEMolFromIUPAC(iupac_name) # Generate a topology. from openmoltools.forcefield_generators import generateTopologyFromOEMol topology = generateTopologyFromOEMol(molecule) # Initialize a forcefield with GAFF. # TODO: Fix path for `gaff.xml` since it is not yet distributed with OpenMM from simtk.openmm.app import ForceField gaff_xml_filename = get_data_filename('data/gaff.xml') forcefield = ForceField(gaff_xml_filename) # Generate template and parameters. from openmoltools.forcefield_generators import generateResidueTemplate [template, ffxml] = generateResidueTemplate(molecule) # Register the template. forcefield.registerResidueTemplate(template) # Add the parameters. forcefield.loadFile(StringIO(ffxml)) # Create the system. system = forcefield.createSystem(topology) # Extract positions positions = extractPositionsFromOEMOL(molecule) return (molecule, system, positions, topology)