您如何将化学化合物的大型 sdf 文件转换为包含分子图像的单个文件?

如何解决您如何将化学化合物的大型 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 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-