Python rdkit.Chem.AllChem.UFFOptimizeMolecule() Examples
The following are 6
code examples of rdkit.Chem.AllChem.UFFOptimizeMolecule().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
rdkit.Chem.AllChem
, or try the search function
.
Example #1
Source File: test.py From xyz2mol with MIT License | 8 votes |
def generate_structure_from_smiles(smiles): # Generate a 3D structure from smiles mol = Chem.MolFromSmiles(smiles) mol = Chem.AddHs(mol) status = AllChem.EmbedMolecule(mol) status = AllChem.UFFOptimizeMolecule(mol) conformer = mol.GetConformer() coordinates = conformer.GetPositions() coordinates = np.array(coordinates) atoms = get_atoms(mol) return atoms, coordinates
Example #2
Source File: molecule.py From chemml with BSD 3-Clause "New" or "Revised" License | 6 votes |
def _extra_docs(self): # method: to_smiles self._to_smiles_core_names = ("rdkit.Chem.MolToSmarts",) self._to_smiles_core_docs = ("http://rdkit.org/docs/source/rdkit.Chem.inchi.html?highlight=inchi#rdkit.Chem.inchi.MolToInchi",) # method: to_smarts self._to_smarts_core_names = ("rdkit.Chem.MolToSmarts",) self._to_smarts_core_docs = ("http://rdkit.org/docs/source/rdkit.Chem.inchi.html?highlight=inchi#rdkit.Chem.inchi.MolToInchi",) # method: to_inchi self._to_inchi_core_names = ("rdkit.Chem.MolToInchi",) self._to_inchi_core_docs = ("http://rdkit.org/docs/source/rdkit.Chem.inchi.html?highlight=inchi#rdkit.Chem.inchi.MolToInchi",) # method: hydrogens self._hydrogens_core_names = ("rdkit.Chem.AddHs","rdkit.Chem.RemoveHs") self._hydrogens_core_docs = ("http://rdkit.org/docs/source/rdkit.Chem.rdmolops.html?highlight=addhs#rdkit.Chem.rdmolops.AddHs", "http://rdkit.org/docs/source/rdkit.Chem.rdmolops.html?highlight=addhs#rdkit.Chem.rdmolops.RemoveHs") # self._to_xyz_core_names = ("rdkit.Chem.AllChem.MMFFOptimizeMolecule","rdkit.Chem.AllChem.UFFOptimizeMolecule") self._to_xyz_core_docs =( "http://rdkit.org/docs/source/rdkit.Chem.rdForceFieldHelpers.html?highlight=mmff#rdkit.Chem.rdForceFieldHelpers.MMFFOptimizeMolecule", "http://rdkit.org/docs/source/rdkit.Chem.rdForceFieldHelpers.html?highlight=mmff#rdkit.Chem.rdForceFieldHelpers.UFFOptimizeMolecule" )
Example #3
Source File: psikit.py From psikit with BSD 3-Clause "New" or "Revised" License | 5 votes |
def rdkit_optimize(self, addHs=True): if addHs: self.mol = Chem.AddHs(self.mol) AllChem.EmbedMolecule(self.mol, useExpTorsionAnglePrefs=True,useBasicKnowledge=True) AllChem.UFFOptimizeMolecule(self.mol)
Example #4
Source File: data_utils.py From MAT with MIT License | 5 votes |
def load_data_from_smiles(x_smiles, labels, add_dummy_node=True, one_hot_formal_charge=False): """Load and featurize data from lists of SMILES strings and labels. Args: x_smiles (list[str]): A list of SMILES strings. labels (list[float]): A list of the corresponding labels. add_dummy_node (bool): If True, a dummy node will be added to the molecular graph. Defaults to True. one_hot_formal_charge (bool): If True, formal charges on atoms are one-hot encoded. Defaults to False. Returns: A tuple (X, y) in which X is a list of graph descriptors (node features, adjacency matrices, distance matrices), and y is a list of the corresponding labels. """ x_all, y_all = [], [] for smiles, label in zip(x_smiles, labels): try: mol = MolFromSmiles(smiles) try: mol = Chem.AddHs(mol) AllChem.EmbedMolecule(mol, maxAttempts=5000) AllChem.UFFOptimizeMolecule(mol) mol = Chem.RemoveHs(mol) except: AllChem.Compute2DCoords(mol) afm, adj, dist = featurize_mol(mol, add_dummy_node, one_hot_formal_charge) x_all.append([afm, adj, dist]) y_all.append([label]) except ValueError as e: logging.warning('the SMILES ({}) can not be converted to a graph.\nREASON: {}'.format(smiles, e)) return x_all, y_all
Example #5
Source File: molecule.py From chemml with BSD 3-Clause "New" or "Revised" License | 4 votes |
def to_xyz(self, optimizer=None, **kwargs): """ This function creates and stores the xyz coordinates for a pre-built molecule object. Parameters ---------- optimizer: None or str, optional (default: None) If None, the geometries will be extracted from the available source of 3D structure (if any). Otherwise, any of the 'UFF' or 'MMFF' force fileds should be passed to embed and optimize geometries using 'rdkit.Chem.AllChem.UFFOptimizeMolecule' or 'rdkit.Chem.AllChem.MMFFOptimizeMolecule' methods, respectively. kwargs: The arguments that can be passed to the corresponding forcefileds. The documentation is available at: - UFFOptimizeMolecule: http://rdkit.org/docs/source/rdkit.Chem.rdForceFieldHelpers.html?highlight=mmff#rdkit.Chem.rdForceFieldHelpers.UFFOptimizeMolecule - MMFFOptimizeMolecule: http://rdkit.org/docs/source/rdkit.Chem.rdForceFieldHelpers.html?highlight=mmff#rdkit.Chem.rdForceFieldHelpers.MMFFOptimizeMolecule Notes ----- - The geometry will be stored in the `xyz` attribute. - The molecule object must be created in advance. - The hydrogens won't be added to the molecule automatically. You should add it manually using `hydrogens` method. - If the molecule object has been built using 2D representations (e.g., SMILES or InChi), the conformer doesn't exist and you nedd to set the optimizer parameter to any of the force fields. - If the 3D info exist but you still need to run optimization, the 3D structure will be embedded from scratch (i.e., the current atom coordinates will be removed.) """ # rdkit molecule must exist engine = self._check_original_molecule() # any futher process depends on the state of the optimizer and available 3D info if self.xyz and optimizer is None: return True # the required info is available elif self.pybel_molecule: if optimizer is None : self._to_xyz_pybel() # pybel molecule always contains the 3D info else: # build the rdkit molecule from 2D info smiles = self.pybel_molecule.write('smi').strip().split('\t')[0] self._load_rdkit(smiles, 'smiles', from_load=False) self.creator = ('SMILES', smiles) self.hydrogens('add') self._to_xyz_rdkit(optimizer, **kwargs) elif engine == 'rdkit': self._to_xyz_rdkit(optimizer, **kwargs)
Example #6
Source File: molecule.py From chemml with BSD 3-Clause "New" or "Revised" License | 4 votes |
def _to_xyz_rdkit(self, optimizer, **kwargs): """ The internal function creates and stores the xyz coordinates for a pre-built molecule object. """ # add hydrogens >> commented out and left for the users to take care of it using hydrogens method. # self.hydrogens('add') # embeding and optimization if optimizer: AllChem.EmbedMolecule(self.rdkit_molecule) if optimizer == 'MMFF': if AllChem.MMFFHasAllMoleculeParams(self.rdkit_molecule): AllChem.MMFFOptimizeMolecule(self.rdkit_molecule, **kwargs) else: msg = "The MMFF parameters are not available for all of the molecule's atoms." raise ValueError(msg) elif optimizer == 'UFF': if AllChem.UFFHasAllMoleculeParams(self.rdkit_molecule): AllChem.UFFOptimizeMolecule(self.rdkit_molecule, **kwargs) else: msg = "The UFF parameters are not available for all of the molecule's atoms." raise ValueError(msg) else: msg = "The '%s' is not a legit value for the optimizer parameter."%str(optimizer) raise ValueError(msg) # get conformer try: conf = self.rdkit_molecule.GetConformer() except ValueError: msg = "The conformation has not been built yet (maybe due to the 2D representation of the creator).\n" \ "You should set the optimizer value if you wish to embed and optimize the 3D geometry." raise ValueError(msg) geometry = conf.GetPositions() atoms_list = self.rdkit_molecule.GetAtoms() atomic_nums = np.array([i.GetAtomicNum() for i in atoms_list]) atomic_symbols = np.array([i.GetSymbol() for i in atoms_list]) self._xyz = XYZ(geometry, atomic_nums.reshape(-1,1), atomic_symbols.reshape(-1,1)) if optimizer=='UFF': self._UFF_args = update_default_kwargs(self._default_UFF_args, kwargs, self._to_xyz_core_names[1], self._to_xyz_core_docs[1]) elif optimizer=='MMFF': self._MMFF_args = update_default_kwargs(self._default_MMFF_args, kwargs, self._to_xyz_core_names[0], self._to_xyz_core_docs[0])