一种新的基于图像的药物发现深入学习算法,需要将包含3000个化合物的文件分割成包含单个2D 200×200像素图像的png文件(.:SN00001400.png,SN00002805.png,SN00002441.png.)。不需要任何符合标准,也不需要任何其他3D信息。
我可以发送一个初始的f1.sdf示例,其中包含9个复合图像、名称和微笑,每个复合行一个。
在Anaconda3中使用rdkit 2017.09.1和Python3.6、3.7或3.8、木星笔记本和/或Python提示符,在Windows8专业人员的2台e7 64计算机中,我正在寻找一个简单的Python代码来拆分这些图像,将它们转换为200x200像素的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
发布于 2021-01-21 20:42:45
你是对的!。
我在一个新创建的-c环境中执行了一个"conda安装Anaconda3 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')
对于补编中的mol:
print(mol.GetProp("comp_id"))
补编中x的mols= x
以摩尔为单位:
tmp=AllChem.Compute2DCoords(m)
Draw.MolToFile(mols,‘映像/3333.png’,size=(200,200),kekulize = True,wedgeBonds = False,imageType=None,fitImage=False,options=None) .......#did没有得到comp_id,但可以传递一些属性
Draw.MolToFile(mols1,‘图像/’+“comp_id”+‘a.png’)........#did不明白
发布于 2021-01-21 21:45:52
如果分子的名称在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是rdkit分子,化合物的名称( mol
)可以这样访问:
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')
很明显,你可以根据你的需要来调整它。
发布于 2021-01-22 06:46:38
是的!!
它工作得很漂亮!
我会打电话给它: Oliver.py
睡过觉后,我醒来时发现了另一个解决方案(见下文)。也许你的更好,因为它让我定义了要画的线的宽度。
我真的接受了你的帮助!,现在我可以转换我的“黄金”文件来测试深造模式!
从rdkit进口化学
从rdkit.Chem导入AllChem
从rdkit.Chem导入绘图
suppl = Chem.SDMolSupplier('f1.sdf')
补编中的mols =x
x=-1
以摩尔为单位:
x=x+1
nombre=m.GetProp("comp_id")
tmp=AllChem.Compute2DCoords(m)
Draw.MolToFile(mols[x],'images/'+ nombre +'.png', size=(200,200), kekulize = True, wedgeBonds = False,imageType=None, fitImage=False, options=None)
打印(‘行转换成图像:',x)
https://stackoverflow.com/questions/65823691
复制相似问题