基于OpenBabel批量產生特定基團以任意方式接到苯上的結構的方法
基于OpenBabel批量產生特定基團以任意方式接到苯上的結構的方法
文/Sobereva@北京科音 2018-Sep-6
1 前言
最近在計算化學公社論壇有人問(http://bbs.keinsci.com/thread-10797-1-1.html),怎么自動產生一大批帶有指定基團的取代苯,他希望CH3、H、CN、F、Cl、Br、I、OH基團以隨機方式組合接到苯上面。我認為最簡單的實現方式莫過于自己寫個小程序產生各種取代苯的SMILES字符串,然后用OpenBabel產生三維結構,本文就介紹一下怎么實現。希望讀者能舉一反三,對于類似的問題也可以通過類似的方式解決。也有人提議通過把基團的三維結構直接拼接到苯上實現,但當基團是多個原子的時候,得考慮基團朝向問題,顯然會比較麻煩。
SMILES是一種格式十分簡單的描述分子結構的字符串,它在化學信息學里有重要的地位。比如苯酚的SMILES字符串表示為c1ccccc1(O)。SMILES只記錄了原子間的連接關系,大部分分子都可以通過SMILES字符串來描述(而對于復雜的籠狀體系就不太適合了)。如果對此不熟悉,請閱讀https://en.wikipedia.org/wiki/Simplified_molecular-input_line-entry_system,里面對SMILES有十分簡潔清晰的介紹。通常記錄SMILES字符串的文件后綴為.smi。
OpenBabel是一款知名的化學文件格式轉換程序,可以在http://sourceforge.net/projects/openbabel/免費下載。如果你是CentOS的用戶,可以用yum install epel-release命令添加EPEL源之后用yum install openbabel命令直接裝上。OpenBabel的還可以做基于力場的幾何優化、加氫/去氫、合并/拆分文件、相似性對比、結構排序/對齊等。OpenBabel可以基于SMILES字符串通過CORINA算法快速、近似產生分子三維結構,因此只要把取代苯的SMILES字符串構建出來,即可通過OpenBabel得到三維結構。當然,這樣得到的三維結構是很粗糙的,但作為像樣的方法做幾何優化的初猜結構是足夠的。
2 產生各種取代苯SMILE字符串的代碼
在搞懂SMILES字符串定義規則的前提下,稍微懂得編程的人都可以很容易地寫出前述8種取代基以隨機方式接到苯的六個位點的SMILES字符串的代碼。以下是筆者用Fortran寫的,由于很容易理解,就不再詳細解釋了。源代碼文件和編譯好的可執行文件可以在此下載:http://www.shanxitv.org/attach/440/file.rar
!A tool for generating SMILES strings of substituted benzene. Programmed by Sobereva, 2018-Sep-6
program gensubben
implicit real*8 (a-h,o-z)
integer,parameter :: nsub=8
character*10 :: sub(nsub)=(/ "(C)","","(C#N)","(F)","(Cl)","(Br)","(I)","(O)" /)
character*100 string
nmol=20 !The number of molecules to be generated
CALL RANDOM_SEED()
open(10,file="subben.smi",status="replace")
do imol=1,nmol
ic=1
string=" "
do ipos=1,6
if (ipos==1.or.ipos==6) then
nlen=2
string(ic:ic+1)="c1"
else
nlen=1
string(ic:ic)="c"
end if
ic=ic+nlen
CALL RANDOM_NUMBER(ran)
isub=int(ran*nsub)+1
nlen=len_trim(sub(isub))
string(ic:ic+nlen-1)=trim(sub(isub))
ic=ic+nlen
end do
write(10,"(a)") trim(string)
write(*,*) trim(string)
end do
close(10)
write(*,*) "subben.smi has been generated in current folder, press ENTER button to exit"
read(*,*)
end program
啟動程序后,此程序就會產生以隨機方式產生20個取代苯,SMILES字符串既輸出到屏幕上,也輸出到當前目錄下的subben.smi中。每次運行時產生的SMILES字符串都不同,以下是某此運行時產生的字符串中的前五個:
c1(Cl)c(I)c(F)c(C#N)cc1(O)
c1(I)cc(F)cc(C)c1
c1(F)cc(O)c(I)c(Br)c1(O)
c1(O)c(Cl)c(Br)c(I)c(F)c1(Br)
c1c(C#N)c(O)cc(F)c1(I)
c1(C#N)c(F)c(Br)c(Br)c(F)c1(O)
3 通過OpenBabel批量把SMILES字符串轉化為三維結構
首先去OpenBabel官網下載安裝包然后安裝。安裝后就可以在操作系統的命令行模式下(對于Windows指的是cmd或powershell)直接通過obabel命令調用了。雖然此程序也有圖形界面,但用著還不如命令行模式方便。此程序的常用命令在這里有介紹:https://open-babel.readthedocs.io/en/latest/Command-line_tools/babel.html。
把上一節自寫的程序產生的subben.smi放到當前目錄下,在命令行模式下輸入obabel subben.smi -O out.pdb --gen3d -m,馬上就在當前目錄下產生了out1.pdb、out2.pdb ... out20.pdb,這就是20種取代苯結構了。命令行中的--gen3d代表自動產生三維結構,-m代表進行拆分。
產生的這些結構可以拖到VMD中,然后用Extensions - Visualization - Multiple Molecule animation輪回顯示,如下所示
如果你想在產生三維結構的時候順帶通過MMFF94高精度有機小分子力場進行優化,那么運行以下命令即可,所得的pdb文件里的結構就都是優化過的了。
obabel subben.smi -O out.pdb --gen3d -m --minimize --ff MMFF94