• 基于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

    久久精品国产99久久香蕉