基于pybel的在线化合物属性计算程序

pybel

在每天的裂解途径解析的时候,最后都要给出对应的化合物的结构信息,比如分子量、分子式等,每个化合物都要放到ChemDraw中去计算,然后再拷贝回来,效率低下,还比较容易出错。一直想写个在线的计算程序,输入SMILES,然后输出想要的结构性质和结构式,今天终于得空写好。思路如下:使用pybel的分子转化和属性计算功能,结合NCI的CIR和PubMed Compound,将这些综合起来,基本可以满足我们的要求。CIR的输入为SMILES,而PubMed的输入为InChiKey,所以需要用pybel将SMILES转化为InChiKey。具体代码如下:

# -*- coding: utf-8 -*-

import sys
import string
import cgi
import pybel
import urllib
import openbabel as ob

print ""
print """
        <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
        <html xmlns=\"http://www.w3.org/1999/xhtml\">
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Chemical Properties from smiles</title></head><body>
"""
#读取web传递参数
form=cgi.FieldStorage()
try:
    smi=form["smi"].value
except:
    print "Please provide a smiles string!"
    sys.exit()

conv = ob.OBConversion()
conv.SetInAndOutFormats("smi", "inchi")
conv.SetOptions("K", conv.OUTOPTIONS)

mol = ob.OBMol()
conv.ReadString(mol, smi)
inchikey = conv.WriteString(mol)

mol=pybel.readstring('smi',smi)
print "=====================================================<br>"
print "<img src='https://cactus.nci.nih.gov/chemical/structure/%s/image'><br>"%smi
print "化合物:<a href='http://cactus.nci.nih.gov/chemical/structure/%s/names'>Names from NCI</a>|"%smi
print "<a href='http://www.ncbi.nlm.nih.gov/sites/entrez?cmd=search&db=pccompound&term=\"%s\"[InChIKey]'>PubMed</a><br>"%inchikey
print "分子量:%.1f<br>"%mol.molwt
print "分子式:%s<br>"%mol.formula
print "SMILES: %s<br>"%smi
print "InChIKey: %s<br>"%inchikey
print "</body></html>"

目前实现的功能还很粗糙,以后可以在此思路上增加美化和计算更多的属性。

网址:Click Me

使用方法:替换上面地址后面的smi参数为你需要计算的化合物的smiles即可。

–EOF–
文章来自[MS: 质谱与建模],微信号:MS4Fun,网站:msky.in,每天解析一个天然产物的质谱数据或分享自己在建模方面的心得。

By Yufeng Zhang

专注天然产物的多级质谱解析,醉心于用数学和计算机工具解决药学内的科学问题。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.