如何解决您如何将化学化合物的大型 sdf 文件转换为包含分子图像的单个文件?
一种新的基于图像的药物发现深度学习算法,需要将包含约 3000 种化合物的文件拆分为包含单个 2D 200 x 200 像素图像的 png 文件(.: SN00001400.png、SN00002805.png、SN00002441.png)。 .png…………)。不需要任何符合者,也不需要任何其他 3D 信息。
我可以发送一个初始 f1.sdf 示例,其中包含 9 个复合图像、姓名和微笑,每个复合行一个。
在带有 Python 3.6、3.7 或 3.8、Jupyter 笔记本和/或 Python 提示符的 Anaconda3 中使用 rdkit 2017.09.1,在 Windows 8 专业版中的 2 台 e7 64 计算机中,我正在寻找一个简单的 Python 代码来分割图像、转换将它们转换为 200 x 200 像素的 png 文件 (carios),以它们对应的复合 ID 命名并将它们保存到不同的目录 (.: images) 中,准备进行测试。
我尝试了许多不同的网络代码和组合,但尽管进行了大量测试,但它们并没有奏效:-(.
进行一些我最好的 (?) 代码试验。
rdkit 导入测试
from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem import Draw
from rdkit.Chem.Draw import rdMolDraw2D
from rdkit.Chem.Draw.rdMolDraw2D import MolDraw2DSVG
from rdkit.Chem.Draw.rdMolDraw2D import MolDraw2DCairo # cannot import
from rdkit.Chem.Draw import IPythonConsole
from IPython.display import SVG # IPython not in module
from rdkit.Chem import rdDepictor
from rdkit.Chem import MolFromSmiles
使用独特微笑的最佳测试
IPythonConsole.molSize = (200,200)
IPythonConsole.ipython_useSVG = True #I would rather use Cairo but I could not make it to work!
mol = Chem.MolFromSmiles('N#Cc1cccc(-c2nc(-c3cccnc3)no2)c1')
display(mol) # not working
AllChem.Compute2DCoords(mol)
我尝试了不同的微笑,但结果都差不多……
IMG_SIZE = 200
smiles="CCCC"
mol = Chem.MolFromSmiles(smiles)
drawer = rdMolDraw2D.MolDraw2DSVG(IMG_SIZE,IMG_SIZE) #MolDraw2D has no attribute MolDraw2DCairo despite cairo being installed!
drawer.drawOptions().bondLineWith = 1
drawer.DrawMolecule(mol) # bad conformer id (?????)
drawer.FinishDrawing()
drawer.WriteDrawingText('comp_id.png')
在 f1.sdf 中使用 9 种化合物的最佳尝试
suppl=Chem.SDMolSupplier('f1.sdf')
for mol in suppl:
print(mol.GetName()) # AttributeError: 'Mol' object has no attribute 'GetMolecule_Name'
mols=[x for x in suppl]
Name(mols)
suppl = Chem.SDMolSupplier('f1.sdf')
ms= [x for x in suppl if x is not None]
for m in ms:
tmp=AllChem.Compute2DCoords(m)
Draw.MolToFile(ms[0],'images/mol1.png') cairo.IOError: error while writing to output stream
Draw.MolToFile(ms[1],'images/mol2.png')
..................................... .....................
希望得到一些帮助! 真诚感谢您的关注 胡里奥
juliocollm@gmail.com
解决方法
你说得对!。
我在新创建的 Anaconda3 环境中执行了“conda install -c conda-forge rdkit”,大多数命令突然起作用了!!!。 非常感谢!!!!
我开发了下面的代码.....但是我停止了,因为我找不到一种方法将每个相应的 comp_id 传输到为漂亮的 png 图像编码的 png 文件的名称。 有任何想法吗? 谢谢!!!
从 rdkit 导入化学
从 rdkit.Chem 导入 AllChem
从 rdkit.Chem 导入绘图
从 rdkit.Chem.Draw 导入 rdMolDraw2D
从 rdkit.Chem.Draw.rdMolDraw2D 导入 MolDraw2DSVG
从 rdkit.Chem.Draw.rdMolDraw2D 导入 MolDraw2DCairo
从 rdkit.Chem.Draw 导入 MolToFile
从 rdkit.Chem 导入 rdDepictor
从 rdkit.Chem 导入 MolFromSmiles
suppl = Chem.SDMolSupplier('f1.sdf')
对于供应中的摩尔:
print(mol.GetProp("comp_id"))
mols= [x for x in suppl]
对于以摩尔为单位的 m:
tmp=AllChem.Compute2DCoords(m)
Draw.MolToFile(mols[0],'images/3333.png',size=(200,200),kekulize = True,wedgeBonds = False,imageType=None,fitImage=False,options=None) .... ...#没有得到comp_id但是可以传递一些属性
Draw.MolToFile(mols[1],'images/'+"comp_id"+'a.png')........#没看明白
,如果您的分子名称在您的 SDF 文件的标题行中可用,您可以使用键“_Name”将其作为属性访问。其他属性也可以使用相应的键从 SDF 中读取。以下面的 SDF 为例:
CHEMBL1308
3D
Structure written by MMmdl.
12 12 0 0 1 0 999 V2000
-0.0127 0.0114 -0.0000 C 0 0 0 0 0 0
1.4966 0.0081 -0.0000 C 0 0 0 0 0 0
2.3688 -1.0939 0.0000 C 0 0 0 0 0 0
3.6409 -0.7653 0.0000 N 0 0 0 0 0 0
3.6278 0.5682 -0.0000 N 0 0 0 0 0 0
2.3638 1.0896 -0.0000 C 0 0 0 0 0 0
-0.4346 1.0168 0.0000 H 0 0 0 0 0 0
-0.4074 -0.5191 -0.8666 H 0 0 0 0 0 0
-0.4074 -0.5191 0.8666 H 0 0 0 0 0 0
2.0644 -2.1303 0.0000 H 0 0 0 0 0 0
4.4779 1.1136 -0.0000 H 0 0 0 0 0 0
2.2002 2.1571 -0.0000 H 0 0 0 0 0 0
1 2 1 0 0 0
1 7 1 0 0 0
1 8 1 0 0 0
1 9 1 0 0 0
2 3 1 0 0 0
2 6 2 0 0 0
3 4 2 0 0 0
3 10 1 0 0 0
4 5 1 0 0 0
5 6 1 0 0 0
5 11 1 0 0 0
6 12 1 0 0 0
M END
> <SYNONYMS>
Fomepizole (BAN,FDA,INN,USAN)
> <USAN_STEM>
nan
$$$$
化合物的名称 (CHEMBL1308) 可以这样访问,假设 mol
是一个 rdkit 分子:
mol_id = mol.GetProp('_Name')
其他属性可以像这样访问:
property = mol.GetProp('SYNONYMS')
因此,生成所需图像的简单方法如下:
from rdkit.Chem.Draw import rdMolDraw2D
from rdkit.Chem import AllChem
from rdkit import Chem
img_size = (200,200)
supplier = Chem.SDMolSupplier('mols.sdf')
for mol in supplier:
AllChem.Compute2DCoords(mol)
mol_id = mol.GetProp('_Name')
d = rdMolDraw2D.MolDraw2DCairo(*img_size)
d.DrawMolecule(mol)
d.FinishDrawing()
d.WriteDrawingText(f'images/{mol_id}.png')
显然,您可以根据需要进行调整
,是的!!
效果很好!!!
我会称它为:Oliver.py
睡觉后,我刚醒来时发现了另一种解决方案(见下文)。也许你的更好,因为它允许我定义要绘制的线的宽度。
非常感谢您的帮助!现在我可以转换我的“黄金”文件来测试深度学习模型了!!!
从 rdkit 导入化学
从 rdkit.Chem 导入 AllChem
从 rdkit.Chem 导入绘图
suppl = Chem.SDMolSupplier('f1.sdf')
mols = [x for x in suppl]
x=-1
对于以摩尔为单位的 m:
subscription
print('行转换为图像:',x)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。