在每天的裂解途径解析的时候,最后都要给出对应的化合物的结构信息,比如分子量、分子式等,每个化合物都要放到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,每天解析一个天然产物的质谱数据或分享自己在建模方面的心得。