本文整理汇总了Python中mdtraj.utils.delay_import.import_函数的典型用法代码示例。如果您正苦于以下问题:Python import_函数的具体用法?Python import_怎么用?Python import_使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了import_函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: iupac_to_oemol
def iupac_to_oemol(iupac_name):
"""Create a OEMolBuilder from a iupac name.
Parameters
----------
iupac_name : str
IUPAC name of desired molecule.
Returns
-------
molecule : OEMol
A normalized molecule with desired iupac name.
"""
oechem = import_("openeye.oechem")
if not oechem.OEChemIsLicensed():
raise (ImportError("Need License for OEChem!"))
oeiupac = import_("openeye.oeiupac")
if not oeiupac.OEIUPACIsLicensed():
raise (ImportError("Need License for OEIupac!"))
# Create an OEMol molecule from IUPAC name.
molecule = oechem.OEMol() # create a molecule
# Populate the MoleCule from the IUPAC name
if not oeiupac.OEParseIUPACName(molecule, iupac_name):
raise ValueError(
"The supplied IUPAC name '%s' could not be parsed." % iupac_name
)
molecule = normalize_molecule(molecule)
return molecule
示例2: assignELF10charges
def assignELF10charges(molecule, max_confs: int = -1, strictStereo=True):
"""
This function computes atomic partial charges for an OEMol by
using the ELF10 method
Parameters:
-----------
molecule : OEMol object
The molecule that needs to be charged
max_confs : integer
The max number of conformers used to calculate the atomic partial charges.
Select -1 to use dense conformers.
strictStereo : bool
a flag used to check if atoms need to have assigned stereo chemistry or not
Return:
-------
mol_copy : OEMol
a copy of the original molecule with assigned atomic partial charges
"""
oechem = import_("openeye.oechem")
if not oechem.OEChemIsLicensed():
raise (ImportError("Need License for OEChem!"))
oequacpac = import_("openeye.oequacpac")
if not oequacpac.OEQuacPacIsLicensed():
raise (ImportError("Need License for oequacpac!"))
oeomega = import_("openeye.oeomega")
mol_copy = molecule.CreateCopy()
if max_confs < 0:
omegaOpts = oeomega.OEOmegaOptions(oeomega.OEOmegaSampling_Dense)
omega = oeomega.OEOmega(omegaOpts)
omega.SetStrictStereo(strictStereo)
if not omega(mol_copy):
raise Exception("Omega failed.")
else:
if not mol_copy.GetMaxConfIdx() > max_confs:
# Generate up to max_confs conformers
mol_copy = generate_conformers(
mol_copy, max_confs=max_confs, strictStereo=strictStereo
)
# Assign MMFF Atom types
if not oechem.OEMMFFAtomTypes(mol_copy):
raise RuntimeError("MMFF atom type assignment returned errors")
# ELF10 charges
status = oequacpac.OEAssignCharges(mol_copy, oequacpac.OEAM1BCCELF10Charges())
if not status:
raise RuntimeError("OEAssignCharges returned error code %d" % status)
return mol_copy
示例3: test_molecule
def test_molecule(molecule_name, tripos_mol2_filename, charge_method="bcc"):
"""Create a GAFF molecule via LEAP and ffXML and compare force terms.
Parameters
----------
molecule_name : str
Name of the molecule
tripos_mol2_filename : str
Filename of input mol2 file
charge_method : str, default="bcc"
If None, use charges in existing MOL2. Otherwise, use a charge
model when running antechamber.
"""
# Generate GAFF parameters.
amber = import_("openmoltools.amber")
(gaff_mol2_filename, frcmod_filename) = amber.run_antechamber(molecule_name, tripos_mol2_filename, charge_method=charge_method)
# Create simulations.
simulation_ffxml = create_ffxml_simulation(molecule_name, gaff_mol2_filename, frcmod_filename)
simulation_leap = create_leap_simulation(molecule_name, gaff_mol2_filename, frcmod_filename)
# Compare simulations.
syscheck = system_checker.SystemChecker(simulation_ffxml, simulation_leap)
syscheck.check_force_parameters()
groups0, groups1 = syscheck.check_energy_groups()
energy0, energy1 = syscheck.check_energies()
示例4: get_names_to_charges
def get_names_to_charges(molecule):
"""Return a dictionary of atom names and partial charges, as well as a string representation.
Parameters
----------
molecule : OEMol
Molecule for which to grab charges
Returns
-------
data : dictionary
A dictinoary whose (key, val) pairs are the atom names and partial
charges, respectively.
molrepr : str
A string representation of data
"""
oechem = import_("openeye.oechem")
if not oechem.OEChemIsLicensed():
raise (ImportError("Need License for oechem!"))
molcopy = oechem.OEMol(molecule)
molrepr = ""
data = {}
for atom in molcopy.GetAtoms():
name = atom.GetName()
charge = atom.GetPartialCharge()
data[name] = charge
molrepr += "%s %f \n" % (name, charge)
return data, molrepr
示例5: smiles_to_oemol
def smiles_to_oemol(smiles):
"""Create a OEMolBuilder from a smiles string.
Parameters
----------
smiles : str
SMILES representation of desired molecule.
Returns
-------
molecule : OEMol
A normalized molecule with desired smiles string.
"""
oechem = import_("openeye.oechem")
if not oechem.OEChemIsLicensed():
raise (ImportError("Need License for OEChem!"))
molecule = oechem.OEMol()
if not oechem.OEParseSmiles(molecule, smiles):
raise ValueError("The supplied SMILES '%s' could not be parsed." % smiles)
molecule = normalize_molecule(molecule)
return molecule
示例6: smiles_to_mdtraj_ffxml
def smiles_to_mdtraj_ffxml(smiles_strings, base_molecule_name="lig"):
"""Generate an MDTraj object from a smiles string.
Parameters
----------
smiles_strings : list(str)
Smiles strings to create molecules for
base_molecule_name : str, optional, default='lig'
Base name of molecule to use inside parameter files.
Returns
-------
traj : mdtraj.Trajectory
MDTraj object for molecule
ffxml : StringIO
StringIO representation of ffxml file.
Notes
-----
ffxml can be directly input to OpenMM e.g.
`forcefield = app.ForceField(ffxml)`
"""
try:
from rdkit import Chem
from rdkit.Chem import AllChem
except ImportError:
raise(ImportError("Must install rdkit to use smiles conversion."))
gaff_mol2_filenames = []
frcmod_filenames = []
trajectories = []
for k, smiles_string in enumerate(smiles_strings):
molecule_name = "%s-%d" % (base_molecule_name, k)
m = Chem.MolFromSmiles(smiles_string)
m = Chem.AddHs(m)
AllChem.EmbedMolecule(m)
AllChem.UFFOptimizeMolecule(m)
mdl_filename = tempfile.mktemp(suffix=".mdl")
Chem.MolToMolFile(m, mdl_filename)
amber = import_("openmoltools.amber")
gaff_mol2_filename, frcmod_filename = amber.run_antechamber(molecule_name, mdl_filename, input_format='mdl')
traj = md.load(gaff_mol2_filename)
print(gaff_mol2_filename)
print(traj)
for atom in traj.top.atoms:
atom.residue.name = molecule_name
gaff_mol2_filenames.append(gaff_mol2_filename)
frcmod_filenames.append(frcmod_filename)
trajectories.append(traj)
ffxml = create_ffxml_file(gaff_mol2_filenames, frcmod_filenames, override_mol2_residue_name=molecule_name)
return trajectories, ffxml
示例7: approximate_volume_by_density
def approximate_volume_by_density(smiles_strings, n_molecules_list, density=1.0,
box_scaleup_factor=1.1, box_buffer=2.0):
"""Generate an approximate box size based on the number and molecular weight of molecules present, and a target density for the final solvated mixture. If no density is specified, the target density is assumed to be 1 g/ml.
Parameters
----------
smiles_strings : list(str)
List of smiles strings for each component of mixture.
n_molecules_list : list(int)
The number of molecules of each mixture component.
box_scaleup_factor : float, optional, default = 1.1
Factor by which the estimated box size is increased
density : float, optional, default 1.0
Target density for final system in g/ml
box_buffer : float [ANGSTROMS], optional, default 2.0.
This quantity is added to the final estimated box size
(after scale-up). With periodic boundary conditions,
packmol docs suggests to leave an extra 2 Angstroms
buffer during packing.
Returns
-------
box_size : float
The size (edge length) of the box to generate. In ANGSTROMS.
Notes
-----
By default, boxes are only modestly large. This approach has not been extensively tested for stability but has been used in th Mobley lab for perhaps ~100 different systems without substantial problems.
"""
oechem = import_("openeye.oechem")
density = density * units.grams/units.milliliter
#Load molecules to get molecular weights
wts = []
mass = 0.0*units.grams/units.mole * 1./units.AVOGADRO_CONSTANT_NA #For calculating total mass
for (idx,smi) in enumerate(smiles_strings):
mol = oechem.OEMol()
oechem.OEParseSmiles(mol, smi)
wts.append( oechem.OECalculateMolecularWeight(mol)*units.grams/units.mole )
mass += n_molecules_list[idx] * wts[idx] * 1./units.AVOGADRO_CONSTANT_NA
#Estimate volume based on mass and density
#Density = mass/volume so volume = mass/density (volume units are ml)
vol = mass/density
#Convert to box length in angstroms
edge = vol**(1./3.)
#Compute final box size
box_size = edge*box_scaleup_factor/units.angstroms# + box_buffer
return box_size
示例8: normalize_molecule
def normalize_molecule(molecule):
"""
Normalize a copy of the molecule by checking aromaticity, adding explicit hydrogens, and
(if possible) renaming by IUPAC name.
Parameters
----------
molecule : OEMol
the molecule to be normalized.
Returns
-------
molcopy : OEMol
A (copied) version of the normalized molecule
"""
oechem = import_("openeye.oechem")
if not oechem.OEChemIsLicensed():
raise (ImportError("Need License for OEChem!"))
oeiupac = import_("openeye.oeiupac")
has_iupac = oeiupac.OEIUPACIsLicensed()
molcopy = oechem.OEMol(molecule)
# Assign aromaticity.
oechem.OEAssignAromaticFlags(molcopy, oechem.OEAroModelOpenEye)
# Add hydrogens.
oechem.OEAddExplicitHydrogens(molcopy)
# Set title to IUPAC name.
if has_iupac:
name = oeiupac.OECreateIUPACName(molcopy)
molcopy.SetTitle(name)
# Check for any missing atom names, if found reassign all of them.
if any([atom.GetName() == "" for atom in molcopy.GetAtoms()]):
oechem.OETriposAtomNames(molcopy)
return molcopy
示例9: rename_water_atoms
def rename_water_atoms( pdb_filename, O_name = 'O', H1_name = 'H1', H2_name = 'H2' ):
"""Rename water atoms in a specified PDB file to have target names. Typically used to ensure a packmol-generated box containing water has water atom names corresponding to what tleap expects for standard water models.
Parameters
----------
pdb_filename : str
The target PDB filename to edit
O_name : str, optional, default 'O'
Target name to set water oxygen names to
H1_name : str, optional, default 'H1'
Target name to set water hydrogen names to, for first hydrogen
H2_name : str, optional, default 'H2'
Target name to set water hydrogen names to, for second hydrogen
Returns
-------
Notes
-------
Uses ParmEd to makes edits. Identifies waters by reading residues from target PDB file and identifying any residue containing three atoms with names O or O#, H or H#, and H or H# (where # is a digit or sequence of digits) as water molecules.
"""
parmed = import_("parmed")
pdb = parmed.load_file( pdb_filename )
#Find waters and rename
for residue in pdb.residues:
if len(residue)==3:
#Build list of atom types (PDB files don't store these) from names after stripping off digits
types = []
for atom in residue.atoms:
name = atom.name
while name[-1].isdigit():
name = name[:-1]
types.append(name)
#See if it's water and, if so, rename
if 'O' in types and types.count('H')==2:
hct = 0
for atom in residue.atoms:
if 'O' in atom.name:
atom.name = O_name
elif 'H' in atom.name:
if hct==0:
atom.name = H1_name
else:
atom.name = H2_name
hct+=1
#Write file
pdb.write_pdb( pdb_filename )
示例10: smiles_to_antechamber
def smiles_to_antechamber(
smiles_string,
gaff_mol2_filename,
frcmod_filename,
residue_name="MOL",
strictStereo=False,
):
"""Build a molecule from a smiles string and run antechamber,
generating GAFF mol2 and frcmod files from a smiles string. Charges
will be generated using the OpenEye QuacPac AM1-BCC implementation.
Parameters
----------
smiles_string : str
Smiles string of molecule to construct and charge
gaff_mol2_filename : str
Filename of mol2 file output of antechamber, with charges
created from openeye
frcmod_filename : str
Filename of frcmod file output of antechamber. Most likely
this file will be almost empty, at least for typical molecules.
residue_name : str, optional, default="MOL"
OpenEye writes mol2 files with <0> as the residue / ligand name.
This chokes many mol2 parsers, so we replace it with a string of
your choosing. This might be useful for downstream applications
if the residue names are required to be unique.
strictStereo : bool, optional, default=False
If False, permits smiles strings with unspecified stereochemistry.
See https://docs.eyesopen.com/omega/usage.html
"""
oechem = import_("openeye.oechem")
if not oechem.OEChemIsLicensed():
raise (ImportError("Need License for oechem!"))
# Get the absolute path so we can find these filenames from inside a temporary directory.
gaff_mol2_filename = os.path.abspath(gaff_mol2_filename)
frcmod_filename = os.path.abspath(frcmod_filename)
m = smiles_to_oemol(smiles_string)
m = get_charges(m, strictStereo=strictStereo, keep_confs=1)
with enter_temp_directory(): # Avoid dumping 50 antechamber files in local directory.
_unused = molecule_to_mol2(m, "./tmp.mol2", residue_name=residue_name)
net_charge = oechem.OENetCharge(m)
tmp_gaff_mol2_filename, tmp_frcmod_filename = run_antechamber(
"tmp", "./tmp.mol2", charge_method=None, net_charge=net_charge
) # USE OE AM1BCC charges!
shutil.copy(tmp_gaff_mol2_filename, gaff_mol2_filename)
shutil.copy(tmp_frcmod_filename, frcmod_filename)
示例11: create_ffxml_file
def create_ffxml_file(
gaff_mol2_filenames,
frcmod_filenames,
ffxml_filename=None,
override_mol2_residue_name=None,
):
"""Process multiple gaff mol2 files and frcmod files using the XML conversion and write to an XML file.
Parameters
----------
gaff_mol2_filenames : list of str
The names of the gaff mol2 files
frcmod_filenames : str
The names of the gaff frcmod files
ffxml_filename : str, optional, default=None
Optional name of output ffxml file to generate. If None, no file
will be generated.
override_mol2_residue_name : str, default=None
If given, use this name to override mol2 residue names.
Returns
-------
ffxml_stringio : str
StringIO representation of ffxml file containing residue entries for each molecule.
"""
# Generate ffxml file.
parser = amber_parser.AmberParser(
override_mol2_residue_name=override_mol2_residue_name
)
amber = import_("openmoltools.amber")
GAFF_DAT_FILENAME = amber.find_gaff_dat()
filenames = [GAFF_DAT_FILENAME]
filenames.extend([filename for filename in gaff_mol2_filenames])
filenames.extend([filename for filename in frcmod_filenames])
parser.parse_filenames(filenames)
ffxml_stream = parser.generate_xml()
if ffxml_filename is not None:
outfile = open(ffxml_filename, "w")
outfile.write(ffxml_stream.read())
outfile.close()
ffxml_stream.seek(0)
return ffxml_stream
示例12: create_ffxml_simulation
def create_ffxml_simulation(molecule_name, gaff_mol2_filename, frcmod_filename):
"""Process a gaff mol2 file and frcmod file using the XML conversion, returning an OpenMM simulation.
Parameters
----------
molecule_name : str
The name of the molecule
gaff_mol2_filename : str
The name of the gaff mol2 file
frcmod_filename : str
The name of the gaff frcmod file
Returns
-------
simulation : openmm.app.Simulation
A functional simulation object for simulating your molecule
"""
# Generate ffxml file.
amber = import_("openmoltools.amber")
GAFF_DAT_FILENAME = amber.find_gaff_dat()
parser = amber_parser.AmberParser()
parser.parse_filenames([GAFF_DAT_FILENAME, gaff_mol2_filename, frcmod_filename])
ffxml_filename = molecule_name + '.ffxml'
create_ffxml_file([gaff_mol2_filename], [frcmod_filename], ffxml_filename)
traj = md.load(gaff_mol2_filename) # Read mol2 file.
positions = traj.openmm_positions(0) # Extract OpenMM-united positions of first (and only) trajectory frame
topology = traj.top.to_openmm()
# Create System object.
forcefield = app.ForceField(ffxml_filename)
system = forcefield.createSystem(topology, nonbondedMethod=app.NoCutoff, constraints=None, implicitSolvent=None)
# Create integrator.
timestep = 1.0 * units.femtoseconds
integrator = simtk.openmm.VerletIntegrator(timestep)
# Create simulation.
platform = simtk.openmm.Platform.getPlatformByName("Reference")
simulation = app.Simulation(topology, system, integrator, platform=platform)
simulation.context.setPositions(positions)
return simulation
示例13: generate_conformers
def generate_conformers(
molecule,
max_confs=800,
strictStereo=True,
ewindow=15.0,
rms_threshold=1.0,
strictTypes=True,
):
"""Generate conformations for the supplied molecule
Parameters
----------
molecule : OEMol
Molecule for which to generate conformers
max_confs : int, optional, default=800
Max number of conformers to generate. If None, use default OE Value.
strictStereo : bool, optional, default=True
If False, permits smiles strings with unspecified stereochemistry.
strictTypes : bool, optional, default=True
If True, requires that Omega have exact MMFF types for atoms in molecule; otherwise, allows the closest atom type of the same element to be used.
Returns
-------
molcopy : OEMol
A multi-conformer molecule with up to max_confs conformers.
Notes
-----
Roughly follows
http://docs.eyesopen.com/toolkits/cookbook/python/modeling/am1-bcc.html
"""
oechem = import_("openeye.oechem")
if not oechem.OEChemIsLicensed():
raise (ImportError("Need License for OEChem!"))
oeomega = import_("openeye.oeomega")
if not oeomega.OEOmegaIsLicensed():
raise (ImportError("Need License for OEOmega!"))
molcopy = oechem.OEMol(molecule)
omega = oeomega.OEOmega()
# These parameters were chosen to match http://docs.eyesopen.com/toolkits/cookbook/python/modeling/am1-bcc.html
omega.SetMaxConfs(max_confs)
omega.SetIncludeInput(True)
omega.SetCanonOrder(False)
omega.SetSampleHydrogens(
True
) # Word to the wise: skipping this step can lead to significantly different charges!
omega.SetEnergyWindow(ewindow)
omega.SetRMSThreshold(
rms_threshold
) # Word to the wise: skipping this step can lead to significantly different charges!
omega.SetStrictStereo(strictStereo)
omega.SetStrictAtomTypes(strictTypes)
omega.SetIncludeInput(False) # don't include input
if max_confs is not None:
omega.SetMaxConfs(max_confs)
status = omega(molcopy) # generate conformation
if not status:
raise (RuntimeError("omega returned error code %d" % status))
return molcopy
示例14: get_charges
def get_charges(
molecule,
max_confs=800,
strictStereo=True,
normalize=True,
keep_confs=None,
legacy=True,
assign_formal_charges: bool = False,
):
"""Generate charges for an OpenEye OEMol molecule.
Parameters
----------
molecule : OEMol
Molecule for which to generate conformers.
Omega will be used to generate max_confs conformations.
max_confs : int, optional, default=800
Max number of conformers to generate
strictStereo : bool, optional, default=True
If False, permits smiles strings with unspecified stereochemistry.
See https://docs.eyesopen.com/omega/usage.html
normalize : bool, optional, default=True
If True, normalize the molecule by checking aromaticity, adding
explicit hydrogens, and renaming by IUPAC name.
keep_confs : int, optional, default=None
If None, apply the charges to the provided conformation and return
this conformation, unless no conformation is present.
Otherwise, return some or all of the generated
conformations. If -1, all generated conformations are returned.
Otherwise, keep_confs = N will return an OEMol with up to N
generated conformations. Multiple conformations are still used to
*determine* the charges.
legacy : bool, default=True
If False, uses the new OpenEye charging engine.
See https://docs.eyesopen.com/toolkits/python/quacpactk/OEProtonFunctions/OEAssignCharges.html#
assign_formal_charges : default False,
(Re)assign formal charges for atoms in the molecule.
Returns
-------
charged_copy : OEMol
A molecule with OpenEye's recommended AM1BCC charge selection scheme.
Notes
-----
Roughly follows
http://docs.eyesopen.com/toolkits/cookbook/python/modeling/am1-bcc.html
"""
# If there is no geometry, return at least one conformation.
if molecule.GetConfs() == 0:
keep_confs = 1
oechem = import_("openeye.oechem")
if not oechem.OEChemIsLicensed():
raise (ImportError("Need License for OEChem!"))
oequacpac = import_("openeye.oequacpac")
if not oequacpac.OEQuacPacIsLicensed():
raise (ImportError("Need License for oequacpac!"))
if normalize:
molecule = normalize_molecule(molecule)
else:
molecule = oechem.OEMol(molecule)
if assign_formal_charges:
# modifies molecule in place
oechem.OEAssignFormalCharges(molecule)
print("")
charged_copy = generate_conformers(
molecule, max_confs=max_confs, strictStereo=strictStereo
) # Generate up to max_confs conformers
if not legacy:
# 2017.2.1 OEToolkits new charging function
status = oequacpac.OEAssignCharges(charged_copy, oequacpac.OEAM1BCCCharges())
if not status:
raise (RuntimeError("OEAssignCharges failed."))
else:
# AM1BCCSym recommended by Chris Bayly to KAB+JDC, Oct. 20 2014.
status = oequacpac.OEAssignPartialCharges(
charged_copy, oequacpac.OECharges_AM1BCCSym
)
if not status:
raise (
RuntimeError("OEAssignPartialCharges returned error code %d" % status)
)
# Determine conformations to return
if keep_confs == None:
# If returning original conformation
original = molecule.GetCoords()
# Delete conformers over 1
for k, conf in enumerate(charged_copy.GetConfs()):
if k > 0:
charged_copy.DeleteConf(conf)
# Copy coordinates to single conformer
charged_copy.SetCoords(original)
#.........这里部分代码省略.........
示例15: run_tleap
def run_tleap(*args, **kwargs):
warnings.warn("run_tleap has been moved to openmoltools.amber.")
amber = import_("openmoltools.amber")
return amber.run_tleap(*args, **kwargs)