Drug/Computer-Aided Drug Discovery

openbabel 사용법: obabel

Novelism 2021. 10. 25. 20:42

 

openbabel 은 무료로 사용할 수 있는 cheminfomatics tool입니다. 

 docking 시뮬레이션을 하는 사람들이 많이 사용합니다. 

명령어(obabel 및 ob 로 시작하는 여러 실행 파일들)로 사용할 수도 있고, python 모듈로도 사용할 수 있습니다. 

rdkit과 유사한 점이 많지만, 기능은 obabel 이 조금 더 많은 것 같고, python 인터페이스에서 사용하기엔 obabel이 조금 더 불편합니다. 그래도 바로 콘솔 창에서 실행 가능해서 더 편리할 때도 있습니다. 

 

주로 사용하는 기능은 

분자가 주어진 pH 상태에서의 protonation state를 예측해주거나, 중성화해버립니다. 

분자의 3D 구조를 탐색합니다. 구조에 대해서 간단한 에너지 계산을 합니다. 

다양한 분자 파일포멧을 지원하고 상호 변환해줍니다. 

 fingerprint 유사성 기반으로 유사 분자를 찾을 수도 있습니다.

 분자를 2D 이미지로 그려서 파일에 저장하기도 합니다. 이 외에도 여러 기능을 제공합니다.

 python 모듈에서 되는 것의 상당수가 명령어로 되긴 하죠. 저는 그래도 python 모듈을 사용하지만... 

매뉴얼입니다.

 

Open Babel, or how I learned to love the chemistry file format — Open Babel 3.0.1 documentation (open-babel.readthedocs.io)

 

Open Babel, or how I learned to love the chemistry file format — Open Babel 3.0.1 documentation

 

open-babel.readthedocs.io

 

conda로 간편하게 설치할 수 있습니다.

Openbabel :: Anaconda.org

conda install -c conda-forge openbabel

 

기본은 이렇습니다.

Usage:
obabel[-i<input-type>] <infilename> [-o<output-type>] -O<outfilename> [Options]

-i 는 입력 데이터 타입인데, 굳이 적지 않아도 상관없습니다. 

입력은 주로 SMILES 이거나, 파일인데, 파일일 때는 파일명을 직접 넣어주면 됩니다.

SMILES 를 직접 넣어줄 때는 -: 를 앞에 붙여주고, SMIELES 를 괄호로 싸서 넣어줍니다.

출력 시에는 -O 파일명을 적어주던가, SMILES 로 출력하고 싶다면 -osmi 라고 적어줍니다. 

확장자를 자동으로 인식하기에 파일명에 확장자가 식별 가능하면 (mol, sdf, pdb 등) -o 는 굳이 안 붙여도 됩니다. 

예시

$ obabel -:"CCCCCC" -O a.mol
==============================
*** Open Babel Warning  in WriteMolecule
  No 2D or 3D coordinates exist. Stereochemical information will be stored using an Open Babel extension. To generate 2D or 3D coordinates instead use --gen2D or --gen3D.
1 molecule converted

$ cat a.mol

 OpenBabel10252107002D

  6  5  0  0  0  0  0  0  0  0999 V2000
    0.0000    0.0000    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.0000    0.0000    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.0000    0.0000    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.0000    0.0000    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.0000    0.0000    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.0000    0.0000    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
  1  2  1  0  0  0  0
  2  3  1  0  0  0  0
  3  4  1  0  0  0  0
  4  5  1  0  0  0  0
  5  6  1  0  0  0  0
M  END

여기서 Warning 이 나오는 이유는 2D나 3D 좌표를 생성하라고 하지 않았기 때문입니다. 이대로 출력하면 좌표는 전부 0으로 나옵니다. 

 

다음처럼 입력하면 a.mol 이라는 파일의 분자를 읽어서 SMILES 형태로 출력해줍니다.

$ obabel a.mol -osmi
CCCCCC
1 molecule converted

그림파일로 출력하고 싶다면 다음처럼 입력하면 됩니다. 

$ obabel -:"CCCCCC" -O a.png
1 molecule converted

 

docking 돌릴 때 많이 쓰는 기능으로 protonation state 를 고려하는 것입니다.

분자에선 pH에 따라 수소가 붙기도, 떨어지기도 합니다. 

obabel -:"N=C(N)NC" -osmi -p7.4
[NH2+]=C(N)NC
1 molecule converted
obabel -:"O=C(O)C" -osmi -p7.4
O=C([O-])C
1 molecule converted

그렇게 정확하진 않으니까 너무 믿진 않는 것이 좋습니다.

만약 중성화하고 싶다면 --neutralize 옵션을 사용합니다. 

obabel -:"[NH2+]=C(N)NC" -osmi --neutralize
N=C(N)NC
1 molecule converted

 

3D 구조를 생성하는 방법은 다음과 같습니다. 

설명 페이지: Generate a single conformer — Open Babel 3.0.1 documentation (open-babel.readthedocs.io)

obabel -:"[NH2+]=C(N)NC" -O a.mol --gen3d
1 molecule converted
$ cat a.mol

 OpenBabel10252107163D

 13 12  0  0  0  0  0  0  0  0999 V2000
    1.0838    0.0281    0.0890 N   0  3  0  0  0  0  0  0  0  0  0  0
    2.4215    0.0353    0.0613 C   0  0  0  0  0  0  0  0  0  0  0  0
    3.0238    0.3211   -1.0951 N   0  0  0  0  0  0  0  0  0  0  0  0
    3.1019   -0.2412    1.1824 N   0  0  0  0  0  0  0  0  0  0  0  0
    4.5582   -0.2784    1.3392 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.5392    0.2327   -0.7393 H   0  0  0  0  0  0  0  0  0  0  0  0
    0.5659   -0.1805    0.9338 H   0  0  0  0  0  0  0  0  0  0  0  0
    2.4945    0.5276   -1.9319 H   0  0  0  0  0  0  0  0  0  0  0  0
    4.0291    0.3430   -1.1840 H   0  0  0  0  0  0  0  0  0  0  0  0
    2.5560   -0.4466    2.0103 H   0  0  0  0  0  0  0  0  0  0  0  0
    5.0791   -0.0475    0.4101 H   0  0  0  0  0  0  0  0  0  0  0  0
    4.8450   -1.2802    1.6691 H   0  0  0  0  0  0  0  0  0  0  0  0
    4.8428    0.4541    2.0988 H   0  0  0  0  0  0  0  0  0  0  0  0
  1  2  2  0  0  0  0
  1  6  1  0  0  0  0
  1  7  1  0  0  0  0
  2  3  1  0  0  0  0
  2  4  1  0  0  0  0
  3  8  1  0  0  0  0
  3  9  1  0  0  0  0
  4  5  1  0  0  0  0
  4 10  1  0  0  0  0
  5 11  1  0  0  0  0
  5 12  1  0  0  0  0
  5 13  1  0  0  0  0
M  CHG  1   1   1
M  END

3차원 구조 좌표가 생성된 것을 볼 수 있습니다.

 

 이렇게 하면 하나의 conformer만이 나오는데, 다양한 conformer를 탐색하고 싶다면 --conformer 옵션을 사용합니다. 

설명 페이지: Generate multiple conformers — Open Babel 3.0.1 documentation (open-babel.readthedocs.io)

$ obabel a.mol -O a.sdf --conformer --nconf 5 --writeconformers
Initial conformer count: 5
35 attempts,  31 duplicates, 0 failed filter.
0
5
4
3
2

=====> Starting conformers search with a Genetic Algorithm <=====
Perform elitist generation replacement with mutation only
Mutation probability: 0.2
Will stop after 5 generations without improvement.

Generation #1  0.31233
Generation #2  0.31233
Generation #3  0.31233
Generation #4  0.31233
Generation #5  0.31233
Generation #6  0.31233
4
2
0
3
1
GetConformers:
4
2
0
3
1
1 molecule converted

이 명령어로 생성된 a.sdf 파일에는 5개의 구조가 저장되어있습니다. 

 --conformer 옵션을 사용할 때는 ("SMILES"를 바로 입력으로 넣어선 안되고) --gen3d 옵션으로 먼저 3d conformer 를 생성해준 후, conformer 파일을 입력으로 넣어주어야 합니다. 

 

이런 기능을 언제 사용하냐면 ligand based pharmacophore 모델에서 사용할 수 있습니다. docking 없이 ligand 의 자유로운 3D 구조를 수백 개 정도 생성한 후, 그중에 pharmacophore model 과 유사한 것이 있는지 확인하는 방법입니다. 

docking을 안 하고 바로 비교하기에 속도가 빠르다는 장점이 있습니다. 

 

옵션에 대한 도움말 보기는 obael -L 입니다.

obabel -L
charges
descriptors
fingerprints
forcefields
formats
loaders
ops

몇 가지 정보들이 출력됩니다. 

위의 리스트엔 없지만

obabel -L conformer

를 입력하면 obabel --conformer 에서 사용하는 옵션에 대해 출력해줍니다. 

 

위의 리스트에 있는 것들 중에서

obabel -L formats

이라 치면 obabel 에서 사용할 수 있는 파일 포맷에 대한 설명이 나옵니다. 

 

이 이외에도 SMARTS를 이용한 서브 구조 검색 같은 다양한 기능들이 있으니 도움말 페이지를 참고해보시기 바랍니다.