肖高铿. 2021-11-05
from cresset import flare
from rdkit import Chem
from rdkit.Chem import AllChem
from simtk.openmm import openmm
使用当前已经打开的视窗作为研究对象
p = flare.main_window().project
以第一个分子为例
#读取第一个分子为lig
lig = p.ligands[0]
#将flare分子转为rdkit分子
mol = flare.Ligand.to_rdmol(lig)
#计算配体的原子数以便进行索引
n_lig_atoms = mol.GetNumAtoms()
print(n_lig_atoms)
52
重原子约束的MMFF94力场优化
RDKit的力场支持点约束(AddFixedPoint),参见:https://www.rdkit.org/docs/source/rdkit.ForceField.rdForceField.html。
将每个重原子索引出来,赋予力场点约束。写个helper来索引重原子。
def add_fixed_atoms_helper(ff, mol):
for i in range(0, mol.GetNumAtoms()):
atom = mol.GetAtomWithIdx(i)
if ((atom.GetAtomicNum() != 1) and (i < mol.GetNumAtoms())):
ff.AddFixedPoint(i)
使用MMFF94s而不是默认的MMFF94,需要通过MMFFMolProperties来修改
具体方法参见:https://www.rdkit.org/docs/source/rdkit.ForceField.rdForceField.html
mp = AllChem.MMFFGetMoleculeProperties(mol,mmffVariant='MMFF94s')
ff = AllChem.MMFFGetMoleculeForceField(mol, mp)
添加重原子约束
add_fixed_atoms_helper(ff, mol)
RDKit的力场默认使用200步优化,这个可以修改,比如修改为1000
ff.Minimize(maxIts=1000)
0
将优化后的分子添加到Flare的项目里,视窗可见
p.ligands.append(mol)
<cresset.flare.Ligand with ID '111' role '1000' at 0x0000022EF16A6890>