我正在尝试用rdkit把分子的微笑转换成指纹。我有两个微笑: Nc1cccc(N)n1和Nc1cc(CSc2ccc(O)cc2)cc(N)n1。第一个扩展为第二个。换句话说,第二个分子在其结构中包含第一个分子。
我所做的是使用rdkit删除公共部分,以获得不同片段的微笑(CSC1=CC=C(O)C=C1 in kekulized form)。我正在尝试将这个片段转换成分子,然后再转换成指纹,以计算与参考分子的相似性。
但我得到了一个错误:‘无法对原子进行kekulize’,使用这些原子的索引。这对我来说很奇怪,因为所有的微笑(两个输入的微笑和产生的片段微笑)都可以很容易地用MarvinSketch或Chemdraw (绘制分子的软件)可视化。我甚至让Marvin kekulize碎片微笑,并尝试用它制造一个分子,但我仍然得到同样的错误。下面是我删除片段的代码:
def remove_initial_fragment(mol_smiles, fragment_smiles):
mol = Chem.MolFromSmiles(mol_smiles) #creates molecule from the longer smiles
fragment = Chem.MolFromSmiles(fragment_smiles) #the molecule I want to remove
rm = AllChem.DeleteSubstructs(mol, fragment) #creates new molecule
return Chem.MolToSmiles(rm) #converts the mol I want back into smiles
smiles_frags = [remove_initial_fragment(x, fragment_smiles) for x in smiles]
mols_frags = [Chem.MolFromSmiles(x) for x in smiles_frags]在我的例子中,“fragment_smiles”对于所有选择的微笑都是相同的。但是,当我试图将'mols_frags‘列表中的分子转换为指纹时,我遇到了一个错误:
MFP_2 = [AllChem.GetMorganFingerprintAsBitVect(x, 2) for x in mols_frags]我试着在网上寻找答案,但没有真正有帮助。我甚至尝试单独创建kekulized的微笑,并直接传递它们作为创建指纹的输入,但我仍然收到相同的错误。
这对我来说非常奇怪,因为当我尝试用相同的代码对一组微笑(片段,更长的微笑,结果微笑)执行相同的过程时,它工作起来没有任何问题,我可以没有任何错误地创建指纹。但在我看来,一旦我将微笑/分子作为列表输入,我就会得到错误。你知道为什么会这样吗?或者您是否在我的代码中看到了我没有意识到的任何错误?
发布于 2021-04-29 20:26:01
使用fragment_smiles = 'Nc1cccc(N)n1'和smiles = ['Nc1cc(CSc2ccc(O)cc2)cc(N)n1', 'Nc1cc(COc2ccc(O)cc2)cc(N)n1']这样的list。我拿到指纹没问题。
似乎在删除子结构之后,有一些smiles_frags是不正确的微笑。
为了证明list中的微笑,给出了一个你可以使用的问题
from rdkit.Chem import AllChem as Chem
fragment = Chem.MolFromSmiles('Nc1cccc(N)n1')
smiles = ['Nc1cc(CSc2ccc(O)cc2)cc(N)n1', 'Nc1cc(COc2ccc(O)cc2)cc(N)n1', 'CC1=CC=Cc2c(N)nc(N)cc12']
for smi in smiles:
try:
mol = Chem.MolFromSmiles(smi)
f1 = Chem.DeleteSubstructs(mol, fragment)
f2 = Chem.MolFromSmiles(Chem.MolToSmiles(f1))
fp = Chem.GetMorganFingerprintAsBitVect(f2, 2)
except:
print('SMILES:', smi)
f = Chem.DeleteSubstructs(mol, fragment)
print('smiles_frag:', Chem.MolToSmiles(f1))这将提供:
SMILES: CC1=CC=Cc2c(N)nc(N)cc12
smiles_frag: ccccChttps://stackoverflow.com/questions/67302261
复制相似问题