免费SDF文件阅读和处理软件

Windows环境下,常用的SDF文件 阅读和处理的免费(或试用版)软件。
 
 
  • 加载速度快。打开大文件时,随着窗口滚动增量加载解析。
  • 编辑,包括画结构式
  • 根据结构式命名。Traditional name/ IUPAC name
  • 单个化合物结构图另存为图片。
  • 分子式和分子量等基于结构的分析。
  • 生成SMILES。
 

http://www.enso-software.com/WebSite2005/Default.aspx

With ensochemSheet, you can manage you SD files as comfortably as if the were in a database. Search for structures and alphanumerical data, let the program automatically filter duplicates and much more. Test the free demo version even today!
 
  • 编辑,包括画结构式。
  • 子结构检索。

http://www.hyleos.net/?s=applications&p=ChemFileBrowser

 
  • 加载速度慢;功能简单。
  • 列表查看和单个化合物查看。
  • 可以标注和选择SDF中的化合物,并对选择的部分导出。
  • 导出成SDF或CVS。
 
 
  • 用于聚类等分析的工具。
  • 列表和单个化合物信息查看。单个化合物信息查看自动全屏,有导航按钮。
  • 导出成Excel,结构图列表或属性列表。

 

上面的工具中,只有marvin view 还在持续的开发和改进。
 

 

http://www.bioclipse.net/

基于eclipse。

 

Web interface provided on SQLMOL

A simple web interface is provided on SQLMOL now. It is writen in ASP.NET and jQuery is used from Google’s code hosting. The molecule structure images are generated by the Daylight‘s SMI2GIF service. SMI2GIF is so excellent that it can not only transform your SMILES to structure image but also highlight the substructure you have queried.

As SQLMOL is currently only implemented on SQL Server, you should have a MS Windows enviorenment to run it. Then I recommend the free tool Visual Web Developer to handle the source file and run the code to test.

SQLMOL is so simple and light weight substructure search system that can deployed on a common PC in half-an-hour. Just try it.

 

关于化学结构式web显示和输入

将化学结构式在网页上显示出来,是基于WEB的化合物注册系统(compound registry system)中必不可少的功能,也能用于化学品研发、销售企业的产品宣传网站。而要实现结构式检索,就要有结构式输入的功能。

我所知道的化学结构式web显示的方法,从技术手段上来说可以分为以下几种

  • 预生成图片。
  • 使用在线结构图生成服务。
  • 使用浏览器插件(java或activex)。
  • 基于Javascript和AJAX的方案。

预生成图片

在后台用工具将结构式信息都转换成图片格式(PNG, JPEG等),再将图片上传到网站服务器,用普通的图片显示方式显示出来。需要注意的就是一般的产品目录中,产品数量较大,是用数据库生成的列表,批量生成的图片,就需要用产品编号、CAS编号等相对固定的编码对应起来。

后台生成图片的工具很多,大部分化学信息学软件都可以做得到。但是为了方便批量操作,尽量选择有编程接口的软件,至少也要能够通过命令行调用的软件。

使用在线结构图生成服务

可以利用的服务,我在之前的这篇在线化学结构式图片生成服务中详细介绍过。前提基本都是要有化合物的SMILES编码信息。这样做的好处是,不用自己生成图片,不用占用自己网站的空间,甚至不用占用自己网站的带宽。同样潜在的问题是要依赖第三方服务的准确性、可靠性和稳定性。

使用浏览器插件

使用浏览器插件恐怕是最常见的解决方案。一般来说,这样的插件都需要用结构式的mol格式作为输入,mol格式可以从SDFile的连接表部分导出。关于mol 和SDFile格式请参考 Chemical table files。目前也只有使用插件,能够实现结构式的输入。

最常见的网页插件有

 

JMEhttp://www.molinspiration.com/jme/,java applet

我所见过的90%以上的在web中显示和输入结构式的浏览器插件,都是用JME来实现的。JME的作者没有声称过这个软件是免费的,非商业用户需要向他发一个邮件来索要。而实际上既然是java applet,直接下载下来用也很容易。而事实上大多数的人都是这么做的。

这个软件估计至少有10年历史了,作者是Peter Ertl


Jmolhttp://jmol.sourceforge.net/, java applet

没有用过。开源的项目,支持的格式非常多,不过还是不支持SMILES/InChI。

 

Chemdraw pluginhttp://www.cambridgesoft.com/software/details/?ds=2&dsv=93, activex

不是免费的,在工作中用到过。功能非常强大,结构式编辑功能与Chemdraw软件基本相当,远远超出其他插件。

 

Chemwriterhttp://metamolecular.com/chemwriter/, java applet

Chemwrite应用并不广泛,功能也不强大,只能说图片显示的质量要比JME好不少,进行了边缘平滑的处理。之所以要提到,是因为这个软件的作者是 Depth-first 这个化学信息学博客的作者Rich Apodaca,我在这里学到了很多有用的知识。

 

 

JChemPaint, http://apps.sourceforge.net/mediawiki/cdk/index.php?title=JChemPaint, java applet

基于CDK项目的一个衍生产品。

 

基于Javascript和AJAX的方案

不论java applet还是activex,都对客户端有所要求。java applet要求客户访问网站的时候,要安装java运行时环境;activex默认在浏览器中不能运行,要客户判断安装并执行,因为有臭名昭著的安全问题。而基于Javascript和AJAX的方案,能够解决这些问题,也符合Web2.0的趋势。

 

MX-GWThttp://chemhack.com/mx-gwt/, 纯javascript

这是国内的一位叫Duan Lian的同学的作品。是我知道的和见过的唯一的用纯粹的javascript实现的结构式显示和输入方案。这个软件实际上是把Rich Apodaca用java开发的一个轻量级的化学信息处理库,MX,通过Google的GWT编译成javascript,使之能在浏览器里运行。非常棒。

 

Molinspiration WebMEhttp://www.molinspiration.com/docu/webme/index.html, AJAX

是开发JME的公司Molinspiration最近开发的AJAX的方案,需要服务器的支持。如果愿意买这个软件的话,Molinspiration提供服务器端支持。对客户来说,仍然只要能支持js的浏览器就行了。

 

PubChem edithttp://pubchem.ncbi.nlm.nih.gov/edit/, AJAX

PubChem在线服务的结构式输入工具,可以拆出来用。而且PubChem也足够开放,提供了很详细的使用说明,包括如何把输入的结构传递到表单。在在线化学结构式图片生成服务提到过,这个编辑器背后隐藏着一个通过SMILES来显示结构式的接口。

 

 

SQLMOL, 化合物结构存储检索关系数据库平台

SQLMOL是我的第一个开源软件项目,发布在Google code上。是今年春节假期的空闲时间的成果。

作为一个基于关系数据库的化合物结构存储检索关系数据库平台,不同于之前介绍的各类方案,这个方案不需要Cartridge/CLR/UDF等数据库插件,只需要标准的关系数据库环境,用SQL程序即可实现功能。

目前的测试是在SQL Server 2008 express这个免费版本上进行的,以后的计划是在MySQL, PostgreSQL等主流数据库,尤其是免费的关系数据库平台上进行实现。

这个方案主要的原理是在“Chemical Substructure Search in SQL (Adel Golovin and Kim Henrick)”这篇paper中介绍的。将化合物分子中的原子、键的结构,以生成树(spanning tree)的形式存储在关系数据库中,用普通的SQL进行结构检索。为了实现这个方案,在SQLMOL中实现了以下的关键部件

  • 用SQL实现的SMILES parser。
  • 利用SMILES parser的结果,实现的Data builder和Query builder。

这样,用SMILES表达的化合物结构式信息,就可以用上面的方案导入到关系数据库中;用SMILES表达的结构检索条件,也可以以相同的规则生成,并执行检索。

到现在为止,这个项目的核心程序,SMILES解析器,还没有实现对SMILES协议100%的支持,对某些情况存在错误

在关系数据库中存储和使用分子结构信息的方案

分子结构式的表达和存储

化学分子结构式的表达方法有很多。最基本的方法当然就是图片文件,图片文件的确仅适用于展示,不适用于分析和检索。常见的以文本形式存储的化学结构包括InChI,SMILES,Molfiles,CML等。对于这些格式,在inchi.info网站上有一个不错的比较。原文还带有一些注释。

  InChI InChIKey SMILES Molfile CML
线性(不用换行) Yes Yes Yes No No
唯一性 Yes No Possibly No No
可读性 Hardly Impossible Easily Hardly Hardly
定义原子几何位置 No No No Yes Yes
长度(每原子字符数) ~2 ~1 1-2 ~50 ~50
软件支持 (0-1) 0.3 0.1 0.2 1 0.5

在数据库中作为结构式信息进行存储,比较重要的考虑因素就是唯一性、存储空间。所以使用InChI, SMILES作为结构式的描述信息都可行。

这个表里需要注意的是,InChIKey与Molfile/CML在唯一性上都是No,但有很大不同。不同的分子结构有可能用同一个InChIKey表达;同一个分子式,可以表示成不同的Molfile/CML。这都对数据库中的 一项重要工作,检索带来大麻烦。

找到合适的分子结构式表达方式,用文本的方式存储起来,并不复杂。执行一些简单的操作,比如通过分子结构(精确)查找分子,也和普通的数据库操作没什么两样。

但是要通过结构式信息进行分子参数计算、子结构检索、描述符(fingerprint)生成及索引、分子相似性计算等工作时,往往需要在关系数据库上增加插件来实现。

关系数据库插件 (cartridge)

下面的插件,没有一个是应用于MS SQL Server的。SQL Server也提供了扩展存储过程(SQL Server 2000)及CLR(SQL Server 2005)等插件接口,是能够实现相同的功能的。这也正是我现在正在进行的工作。

pgchem::tigress

开源。用在PostgreSQL上。在checkmol/matchmol 和OpenBabel的基础上开发的。文档很nice,但是似乎很久没有更新了。典型的案例是http://www.chemcollect.de/

mychem

开源。用在MySQL上,UDF形式的插件。基于OpenBabel。SVN代码更新比较勤。

OrChem

This project aims at creating an open source chemistry plugin / cartridge for the relational database system Oracle.

其他商业插件

  1. CambridgeSoft Oracle Cartridge
  2. Symyx Direct, Cartridge for Oracle
  3. CHORD, a commercial chemical cartridge for PostgreSQL, is sold by gNova. 基于OEChem。OEChem也不是免费的。
  4. JChem Cartridge, adds chemical intelligence to the Oracle platform.

一本新书

Design and Use of Relational Database in Chemistry,《在化学领域设计和使用关系数据库》。作者是gNova公司的TJ O’Donnell, Ph. D.,那这本书里用到的方法,也自然是这个公司的CHORD插件了。不过这本书对关系数据库中,化学信息的应用,写得比较全面和系统了(从目录上看)。就是有点灌水,连关系数据理论都要占一章。写一本书,讲解理论的同时推销自己的产品,还能挣稿费,这绝对是个好办法。Amazon上的定价是$93.56。

不需要插件的解决方案

Chemical Substructure Search in SQL
Adel Golovin and Kim Henrick,
EMBL-EBI Hinston Hall Genome Campus, Cambridge, U.K.
J. Chem. Inf. Model., Article ASAP
DOI:
10.1021/ci8003013

这是一篇发表不久的文章。我很感叹之前为什么没有过这么直接的思路。分子结构用SMILES表达的原理中,实际上就已经将分子结构抽象为原子(Atom)和键(Bond)之间的组合,并且用生成树(spanning tree)构造成字串。

分子、原子、键、分子结构(spanning tree),都可以,而且很适合在关系数据库中表达出来。子结构检索等功能操作,也可以用基本的SQL来实现。

相对于用插件的方案,优势在于

  1. 不限制于数据库平台。
  2. 更稳定。插件的质量高低,运行于何种进程空间,是否会出现异常,都将直接影响服务器。在重要的运营服务器上,更是隐患。
  3. 性能(performance)更优。对原子和键的查询都可直接利用数据库服务器的索引。
  4. 存储空间上(可能)有改善。当设计得当时,原子、键建立字典表,事实表就都是数字组成的关联表。在基于插件的系统中,以子结构检索为例,为了尽量减少性能消耗最大的插件函数计算,往往会生成碎片(fingerprint)索引,所使用的存储空间,加上SMILES的字符串存储空间,会高于这个方案中的存储空间。尤其是在小分子数据库中。

其他参考资料

Fast Substructure Search series, by Rich Apodaca

How to create a web-based molecular structure database with free software[PDF], by Norbert Haider (Checkmol/matchmol)

对化学结构式图片进行OCR

原文在 Have your hamburger and eat it – Edit molecules in PDFs。虽然讲的是“编辑PDF中的结构式”,实际上的核心意思是通过OCR的手段,将结构式还原回来。

OCR文字,识别个名片简单,但是恢复带有图型结构的化学结构式图片,看起来就不那么容易了。这篇文章里提供的工具,却偏偏很容易。

核心的软件是BKChem,是基于Python的开源化学信息学软件。很可惜这个网站在国内被盾住了,上传一个在这里

Windows环境下软件配置的步骤是

  1. 安装Python
  2. 按照Python的版本安装 Python Imaging Library
  3. 下载并且安装BKChem-0.12.5.zip。国内下载不了请用这个链接
  4. 下载 convert_clipboard_image.pyconvert_clipboard_image.xml 这两个文件,放在BKChem的plugins文件夹里。这个文件夹一般的路径是这样的 C:\Python25\share\bkchem\plugins
  5. 下载osra-mingw-1-1-0.zip,解压。在系统变量中,设置OSRA变量的值是解压后文件夹中osra.exe的绝对路径。

 

软件使用的方法是

  1. 在C:\Python25\Lib\site-packages\bkchem路径下,双击bkchem.py,运行BKChem。
  2. 在打开的PDF/ Word/ 画图板等软件中拷贝结构式图型。
  3. 在BKChem中点击plugins菜单下的"Paste and Convert Image",就可以开始转换了。

然后呢,当然就是继续编辑这个结构式啦。与其他OCR一样,在准确性是不能达到100%的。往往一些环结构会断掉,特殊的元素、手性键会认错。

不过这已经离可以转换成mol/ SMILES/ InChI格式的结构式不远了。

090218, update

Optical Structure Recognition Software To Recover Chemical Information: OSRA, An Open Source Solution

 

 

化学信息软件开发工具时间线

http://www.dalkescientific.com/writings/diary/archive/2008/09/20/euroqsar.html 

在线化学结构式图片生成服务

利用一些网站提供的资源,可以在线生成结构式图片。

DayLight

其中比较突出的是DayLight提供的服务,在另外一篇 结构式图片生成服务, DayLight SMI2GIF 中做过详细介绍。DayLight的服务传入的结构式参数是SMILES,而且有很丰富的参数以调节输出效果。

NIST

NIST是美国国家标准与技术局(National Institute of Standards and Technology),NIST WebBook 是老牌的免费化合物信息数据库,提供丰富的化合物物理、化学性质数据。其化合物的编码方式,其实是CAS号码。把CAS号码转换成数字,就可以很容易得到结构式图片的地址了。


http://webbook.nist.gov/cgi/cbook.cgi?Struct=C490119

NIST WebBook的数据量并不是很大,只有几万条记录。不知道是不是因为太老的原因(05年就没再更新过),其中还有错误数据。至少到这篇发布的时候,上面的例子仍就是一个错误结构。我写Email报告了这个问题,不知道啥时候能修正。

NLM

NLM是(National Library of Medicine) 它提供的ChemIDPlus数据库 也是用CAS号码进行编码的。数据量要比NIST大很多,结构式输出的质量也更好。


http://chem.sis.nlm.nih.gov/chemidplus/RenderImage?maxscale=30&width=200&height=200&superlistid=000490119

Pubchem

对于化合物的标记,SMILES是公开的标准,直观还原结构式信息,值得应用;CAS不公开不免费,但也成为了既成的行业标准。现在能与CAS相提并论的,我想就是NCBI的PubChem 数据库了。NCBI是美国国立生物技术信息中心(The National Center for Biotechnology Information。在在线数据库的范畴内来说,PubChem的Compound ID(cid)基本上是必被引用的。所以也勉强将它用cid作结构参数的图片生成接口纳入进来。这个接口背后也有很多参数用以调节输出。


http://pubchem.ncbi.nlm.nih.gov/image/imagefly.cgi?cid=10273&width=400&height=400

有一篇很好的文章,Thirty-Two Free Chemstry Databases(32个免费化学数据库) ,仔细读过的话也许还会有更多的发现。

2008年12月15日更新

Hack PubChem的结构式编辑页面,找到PubChem通过SMILES输出结构式图片的服务


http://pubchem.ncbi.nlm.nih.gov/edit/editsrv.fcgi?drawevent=paste&sessionid=122931177&smiles=c1(c(cncc1)C(O)=O)C(O)=O&speed=1&nopng=0&vid=&vhadd=0

 

ChemDB

ChemDB / Smi2Depict: Generate 2D Images from Molecule Files


http://c1ccccc1-2.ics.uci.edu:8081/arrow-webapp/ArrowWebService?action=smi2png&smiles=c1(c(cncc1)C(O)=O)C(O)=O&width=400&height=200&arrowdesc=&extraImageSetting=amap

eMolecules


http://depict.emolecules.com/cgi-bin/mymol/depict.cgi?smiles=c1(c(cncc1)C(O)=O)C(O)=O&width=100&height=100&colorscheme=cow&format=png&submit=image

NCI/CADD, Chemical Identifier Resolver 

美国癌症研究中心


http://cactus.nci.nih.gov/chemical/structure/c1(c(cncc1)C(O)=O)C(O)=O/image

 

 

结构式图片生成服务, DayLight SMI2GIF

SMILES的发明者,DayLight公司提供了一个非常实用的Web Service工具,可以在线通过化合物的SMILES编码,生成它的结构式图片。这个工具就是SMI2GIF 。它是基于DayLight公司的产品”HTTP Toolkit“建立的。我们可以购买这个产品自己建立Web Service,也可以直接在线使用DayLight提供的服务。

下面的图片是一个最简单的在线应用。

图片的HTML代码是

        <img src="http://www.daylight.com/dayhttp/smi2gif?smiles=Oc1ccccc1"></img>
    

DayLight给出了一个参考文档,对这个接口的调用参数和功能,讲述得非常详细。下面就把简单的,我也懂的参数作一点举例介绍。

图片的高度和宽度,线条的粗细,输出的格式(PNG/GIF)


http://www.daylight.com/dayhttp/smi2gif?width=100&height=100&smiles=O%3DC1CCCCC1&Linewidth=thick&output=PNG

色调搭配

提供了几种基本色调


COB
– color on black

COW
– color on white

COP
– color on paper

BOW
– black on white

BOP
– black on paper

WOB
– white on black

WOP
– white on paper


http://www.daylight.com/dayhttp/smi2gif?smiles=O%3DC1CCCCC1&colormode=COW

对原子单独指定颜色


http://www.daylight.com/dayhttp/smi2gif?numcolors=10&tdt=%24SMI%3COCCCCCCCCCC%3EALAB%3C0.0%2C.1%2C.2%2C.3%2C.4%2C.5%2C.6%2C.7%2C.8%2C.9%2C1.0%3E%7C

是否显示手性结构


http://www.daylight.com/dayhttp/smi2gif?hide_chi_h=false&smiles=C[C%40%40H](N)C(%3DO)O

突出显示子结构

这样的功能一般都用在子结构检索之后的结果输出中。


http://www.daylight.com/dayhttp/smi2gif?smiles=O%3DC1CCCCC1&highlight=O%3DC

URL编码

对查询URL中的SMILES字符串,应该用URL-Encode(RFC1738)进行编码。同时,SMI2GIF也支持省略掉百分号的简洁编码方式,比如 (O=C1CCCCC1)可直接表示成 4f3d4331434343434331

参数缩写

SMI2GIF的各个参数,都可以按照下面的映射进行缩写

Option Abbreviation
colormode c
fromto f
height he
hide_chi_h hi
hlen_pct hl
hydrogens hy
numcolors linew
linewidth n
old_style ol
orient or
output ou
reaction r
scale sca
schematic sch
smiles smil
smirks smir
tdt t
width w
xsmiles x

Structure searching supported compound database based on MS Access




Why based on MS Access

MS Access is wildly used, easily available and almost the most user friendly database product. I know many stuffs are working on MS Excel for compound information management and there exists such commercial solutions, the reasons coincide.

The solution described here is for

  • Small account of products catalog.
  • Fast development needed.
  • User interface and operation are crucial, or chemical information data is trivial part of the database.

Demonstration of functions


Platform and tools used

Solution step by step

  • Sample data

SDF files are downloaded directly from Pubchem ftp, it’s free and public.

  • Import SDF file into Access

As the structure description part (mol file) exists inside each compound, it’s not easy to parse the SDF file to csv and other table based format. I write a simple Python script to transform SDF file to Access accepted XML file. You can create a desired table in Access database and export it to XML format to get the XML template.

When data are ready, just run import command from Access.

You can also try RDkit to manipuate SDF and structure information in Python, it’s professional.

  • Generation of structure pictures

When transforming SDF file with Python, some further more actions be taken to generate BMP structure pictures.

Use Molconvert to convert the mol file into PNG format

os.system( “molconvert png %s/%s.mol -o %s/%s.png” %(folder, molid, folder, molid) )

Use PIL to convert PNG to BMP

Image.open( “%s/%s.png”%(folder, molid)).save(“%s/%s.bmp”%(folder,molid))

BMP pictures are needed because native Access only accepts BMP picture as OLE object and displayed on form control.

  • Embed Ole object with VBA

Public Sub load_img()
Me.Recordset.MoveFirst
While Not Me.Recordset.EOF
Me.pic.OLETypeAllowed = acOLELinked
Me.pic.SourceDoc = CurrentProject.Path & “img” & Me.cid & “.bmp”
Me.pic.Action = acOLECreateLink
Me.pic.SizeMode = acOLESizeStretch
Me.Recordset.MoveNext
Wend
End Sub

  • JME as structure query input

JME is a java package and I don’t know any way to combine it with Access directly. So an webcontrol is introduced to the Access form and JME embedded on the source page of the webcontrol. The dom object visit is more simple than I had imaged.

mol = Me.WebBrowser2.Document.applets.Item(0).MolFile()

  • Implentation of sturcture search function

This is truely the key technic of the solution. It is powered by opensourced checkmol/machmol. Acturally, just after read the usage part of source code of its dll version, I begun to think about to do something on Access. Access database uses JETSQL engine, it’s not as powerful as T-SQL, but it supports VBA functions. VBA code can easily visit exernal dll function, so JETSQL could be extended greatly.

So, the sturcture search code is really simple


select * from sample_data where MatchMol(query_mol, mol) > 0


MatchMol function is pre-defined by dll apis of checkmol/matchmol.

Code copied from MATCHMOLDLL.pas

——————————————————————————–
Private Declare Sub mm_SetMol Lib “matchmolDLL.dll” (ByVal st As String)
Private Declare Sub mm_SetCurrentMolAsQuery Lib “matchmolDLL.dll” ()
Private Declare Function mm_Match Lib “matchmolDLL.dll” (ByVal Exact As Boolean) As Long

Private Declare Function mm_GetRings Lib “matchmolDLL.dll” () As Long
Private Declare Function mm_GetAtomRing Lib “matchmolDLL.dll” (ByVal AtomNumber As Long) As Long
Private Declare Sub mm_Version Lib “matchmolDLL.dll” (ByVal st As String)

Public Function MatchMol(Needle As String, Haystack As String, Optional ExactMatch As Boolean = False) As Boolean
Static oldNeedle As String
If oldNeedle <> Needle Then
oldNeedle = Needle
mm_SetMol Needle
mm_SetCurrentMolAsQuery
End If

mm_SetMol Haystack
If mm_Match(ExactMatch) <> 0 Then MatchMol = True

End Function
——————————————————————————–

Performance issues

As a small database, there are about 2700 compounds are imported.

  • Ole picture in BMP format consumes much space. The database file size grows to 600MB.
  • Substructure searching is too fast to recognize delay.
  • If function group or fingerprint is introduced as database index, the substructure searching could archive great performance on large scale dataset.
  • The data importing process is slow and the structure pictures generation process costs much more time and CPU. It took about half an hour to convert the 2700 BMP files on my thinkpad.

Other References


Appendix 1

Such Access DB can NOT serves for Asp.net or other applications connect through ODBC/DAO, for “ODBC and DAO do not use or know anything about the code modules inserted into an .mdb file by Access. Only Access recognizes the modules. ” announced by MSDN KB [Q166113] You cannot use user-defined modules through ODBC or DAO.

« Previous PageNext Page »

Random posts