原文地址:http://chemhack.com/cn/2009/04/%e3%80%8a%e6%93%8d%e8%9b%8b%e7%9a%84%e5%8c%96%e5%ad%a6%e4%bf%a1%e6%81%af%e5%ad%a6%e3%80%8b-%e8%ae%a1%e7%ae%97%e6%9c%ba%e9%87%8c%e7%9a%84%e5%88%86%e5%ad%90-1a/
今天我們聊一下SMILES,下面是Wikipeida里的解釋,但是請不要看它,因?yàn)檫@個解釋實(shí)在太復(fù)雜了。
SMILES(Simplified molecular input line entry specification),簡化分子線性輸入規(guī)范,是一種用ASCII字符串明確描述分子結(jié)構(gòu)的規(guī)范。SMILES由Arthur Weininger和David Weininger于20世紀(jì)80年代晚期開發(fā),并由其他人,尤其是日光化學(xué)信息系統(tǒng)有限公司(Daylight Chemical Information Systems Inc.),修改和擴(kuò)展。
由于SMILES用一串字符來描述一個三維化學(xué)結(jié)構(gòu),它必然要將化學(xué)結(jié)構(gòu)轉(zhuǎn)化成一個生成樹,此系統(tǒng)采用縱向優(yōu)先遍歷樹算法。轉(zhuǎn)化時,先要去掉氫,還要把環(huán)打開。表示時,被拆掉的鍵端的原子要用數(shù)字標(biāo)記,支鏈寫在小括號里。
SMILES字符串可以被大多數(shù)分子編輯軟件導(dǎo)入并轉(zhuǎn)換成二維圖形或分子的三維模型。轉(zhuǎn)換成二維圖形可以使用Helson的“結(jié)構(gòu)圖生成算法”(Structure Diagram Generation algorithms)。
這個SMILES是怎么回事呢?一堆牛人在很久很久以前就開發(fā)了一套牛X的化學(xué)信息系統(tǒng),但是怎么輸入分子結(jié)構(gòu)還是個比較大的問題。就是要用畫的,也不是人人都有鼠標(biāo)啊(我們把時間設(shè)置在SMILES還沒發(fā)明的80年代初)。但是每個有計(jì)算機(jī)的人都有鍵盤吧,于是大家就要想想怎么用鍵盤輸入分子結(jié)構(gòu)。
拿這玩意來說吧,,乙醇分子,大家都認(rèn)識。我要在紙上畫我可以畫出來這么一個玩意。高中化學(xué),大家都上過,有時候老師就給留那么一個空,你畫圖還不好畫,你會怎么寫呢?對了,就是CH3CH2OH了。這個結(jié)構(gòu)用SMILES標(biāo)示就是CCO,你發(fā)現(xiàn)了什么?這幫牛人太懶了,H都懶得寫。反正有機(jī)分子都是要配成符合價鍵規(guī)則的,該有幾個H大家都清楚,省了就省了。
然后是這個玩意,,現(xiàn)在我告訴你它的SMILES表示是C=CCO。
現(xiàn)在你可以告訴我,你學(xué)會了SMILES了。我給你講個笑話,說的是從前有個地主,他有個兒子,地主給他兒子請了個先生叫他認(rèn)字,先生教了“一”字,然后先生又教了“二”字,然后地主兒子就說我學(xué)會寫字了,結(jié)果呢地主讓他兒子去寫請?zhí)銮扇思倚?#8220;萬”,好冷啊 -.-!
地主兒子還好,他可以畫一萬橫,不過你就是把鍵盤上的按鍵都拔下來也找不到那個鍵上有三個橫,于是這個其實(shí)是C#CCO。
現(xiàn)在你會用SMILES表示所有的長鏈分子了,那么這個怎么辦?
這個我們這樣表示,C=C(C)CO,分支的地方加個括號就好了。我想你肯定看懂了,接下來我們來點(diǎn)有難度的,環(huán)。
這個就是環(huán)己烷了,用SMILES表示是C1CCCCC1。簡單來說,就是把環(huán)給砍斷成鏈了,砍的地方做個標(biāo)記(這里是1)。然后我只要記住C1和C1是連起來的就是把這個SMILES還原成環(huán)了。挺Easy不是?然后我們來看看取代基。
這個是個間甲基苯酚,環(huán)上一個羥基取代一個甲基取代。用SMILES表示就是CC1CCCC(O)C1。同樣的道理,C1和C1相連,然后跟在某個環(huán)內(nèi)的C后面有個(O),表示這里有個分支。腦子里想象一下,這串SMILES是可以動的,然后C1跟C1接一下,是不是就是上面的圖?這里有點(diǎn)復(fù)雜了,多給兩個例子,自己看看吧。
CC1CCCCC1(N)
CC1CCC(CC1)C(C)=O
然后我們開看看苯環(huán),你想寫成C1=CC=CC=C1,這個也太傻了,太煩了,創(chuàng)造SMILES的那幫牛人們不喜歡,于是他們這樣寫c1ccccc1。用小寫字母表示共軛結(jié)構(gòu),這樣更接近分子的真實(shí)結(jié)構(gòu)。(雖然我們習(xí)慣上還是使用Kekule式)芳環(huán)的問題解決了,接下來我們看一下比較考驗(yàn)?zāi)隳X筋的。
考驗(yàn)?zāi)隳X筋的時候到了,它的SMILES表示是C1CCc2cnccc2(C1),看明白了嗎?看明白就看明白了,沒看明白就算了,因?yàn)槟闶掷镉幸粋€鼠標(biāo),還去理這種80年的輸入方法干啥?下面就談到了SMILES的意義了。雖然SMILES設(shè)計(jì)的時候是用作輸入的,因?yàn)樗阌谌祟惱斫猓乾F(xiàn)在SMILES常常用于在計(jì)算機(jī)中儲存分子結(jié)構(gòu),因?yàn)樗唵危谧址V劣谳斎氲幕睿热晃覀円呀?jīng)有了鼠標(biāo),那就點(diǎn)點(diǎn)畫畫吧,直觀、方便。但是了解SMILES是很有意義的哦,當(dāng)然它的意義不僅僅和(你看你就會用Windows,我還會點(diǎn)DOS命令)一樣。
另外要說的是,除了SMILES之外,線性編碼還有WLN、InChi等,但是現(xiàn)在就不做介紹了,因?yàn)樗鼈儸F(xiàn)在遠(yuǎn)遠(yuǎn)沒有SMILES應(yīng)用廣泛,WLN已經(jīng)快老死了,InChi還沒有長大。
計(jì)算機(jī)里的分子 – 1a篇到此完結(jié),下面進(jìn)行節(jié)目預(yù)告:
計(jì)算機(jī)里的分子 – 1b將介紹如何用JChemPaint畫分子結(jié)構(gòu)、生成SMILES,以及一點(diǎn)Java,用CDK來讀取SMILES的一點(diǎn)Java代碼。