一种新的、更好的生成相识度图的方法
本文会比较用经典的方法和新的方法分别得到的相似度图,看看两者的区别。
这里使用阿托伐他汀(立普妥)和罗苏伐他汀(Crestor)这两种药物的摩根指纹为例。
1、经典方法
atorvastatin = Chem.MolFromSmiles('O=C(O)C[C@H](O)C[C@H](O)CCn2c(c(c(c2c1ccc(F)cc1)c3ccccc3)C(=O)Nc4ccccc4)C(C)C')
rosuvastatin = Chem.MolFromSmiles('OC(=O)C[C@H](O)C[C@H](O)\C=C\c1c(C(C)C)nc(N(C)S(=O)(=O)C)nc1c2ccc(F)cc2')
Draw.MolsToGridImage((atorvastatin,rosuvastatin))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
图1
2、新的绘图方法
我们创建一个Draw2D对象并将其传递给SimilarityMaps.GetSimilarityMapForFingerprint方法,详细代码如下:
def show_png(data):
bio = io.BytesIO(data)
img = Image.open(bio)
return img
d = Draw.MolDraw2DCairo(400, 400)
_, maxWeight = SimilarityMaps.GetSimilarityMapForFingerprint(atorvastatin, rosuvastatin,
lambda m, i: SimilarityMaps.GetMorganFingerprint(m, i, radius=2, fpType='bv'),
draw2d=d)
d.FinishDrawing()
show_png(d.GetDrawingText())
我们可以对基于技术的指纹做同样的事情:
只要将上述代码fpType='bv’改成fpType=‘count’
另外,其他的GetSimilarityMaoriFrom…函数也可以接受可选的draw2d参数。这是阿托伐他汀中的原子对其计算的logp值得贡献的可视化:
from rdkit.Chem import rdMolDescriptors
ator_contribs = rdMolDescriptors._CalcCrippenContribs(atorvastatin)
d = Draw.MolDraw2DCairo(400, 400)
SimilarityMaps.GetSimilarityMapFromWeights(atorvastatin,[x[0] for x in ator_contribs],draw2d=d)
d.FinishDrawing()
show_png(d.GetDrawingText())
以及各种部分收费方案的更多可视化,这里以Gasteiger-Marsilli1为例:
from rdkit.Chem import rdPartialCharges
rdPartialCharges.ComputeGasteigerCharges(atorvastatin)
chgs = [x.GetDoubleProp("_GasteigerCharge") for x in atorvastatin.GetAtoms()]
d = Draw.MolDraw2DCairo(400, 400)
SimilarityMaps.GetSimilarityMapFromWeights(atorvastatin,chgs,draw2d=d)
d.FinishDrawing()
show_png(d.GetDrawingText())
参考文献:
- https://www.sciencedirect.com/science/article/abs/pii/S0040403901949779