0.
오픈 바벨(Open Babel)은 chemical file formats간 변환을 도와주는 컴퓨터 소프트웨어다.
1. 윈도우즈, 유닉스, 리눅스, 맥OS, 심지어 안드로이드 운영체제에서까지 작동할 수 있는
광범위한 cross-platform을 지원하고 있다.
그도 그럴것이.. 이 소프트웨어의 개발자인 Open Babel development team에서 말하길
이 프로젝트의 목표는 다음과 같다고 한다.
"Open Babel is a community-driven scientific project assisting both users and developers as a cross-platform program and library designed to support molecular modeling, chemistry, and many related areas, including interconversion of file formats and data."
분자 모델링, 화학, 파일 포맷과 데이터 간의 상호변환을 다루는 관련 영역들의 분야를
지원하기 위한 학술 프로젝트이다.
Windows 64-bit 호환되는 2.4.1 버전을 다운받아서 설치해보았다.
(OpenBabelGUI의 실행모습)
3. 왼쪽엔 input format이 있고 오른쪽엔 output format이 있다.
나는 SMILES 포맷에서 sdf 파일로 만들어보려 한다.
역시 stereoisomer는 3D로 만들어야 한다,
그래서 'Generate 3D coordinates'에 체크하고 30개 정도의 SMILES text를 입력해서
CONVERT를 눌러보았다.
4. 결과는
(날 이렇게까지 몰아세운건 스카이림 모드떡칠 이후로 너가 처음이야)
아마도 뭔가 문제가 있는 모양이다.
5. 그래서 30개를 하나하나 확인하던 중... 특정 SMILES 파일이
유독 에러를 일으키는 것을 확인했다.
문제의 시퀀스는 바로 이것.
[H][C@@]1(CC[C@]2(O)[C@]3([H])CC[C@]4([H])C[C@H](CC[C@]4(C)[C@@]3([H])CC[C@]12C)O[C@H]1C[C@H](O)[C@H](O[C@H]2C[C@H](O)[C@H](O[C@H]3C[C@H](OC(C)=O)[C@H](O)[C@@H](C)O3)[C@@H](C)O2)[C@@H](C)O1)C1=CC(=O)OC1
이 시퀀스만 들어가면 RAM 사용량이 4GB까지 뛰고, 일에 진척이 없다.
문제가 무엇일까 고민하기 이전에, 일단 내게는 변환해야 할 파일이 많이 남아있다.
(약 2500개 정도...)
그래서 이렇게 띵깡부리는 녀석들은 제치고 억지로 진행시키기 위해
옵션을 더 살펴보고 'Continue with next object after error, if possible'을 체크 후
다시 CONVERT를 눌러보았다.
... 역시나 실패.
6. 그래서 이번엔 output format을 바꿔보기로 했다.
mol, mol2, pdb, xyz 모두 실패.
이쯤되면 이 녀석의 정체가 궁금해진다.
그래서 입체구조를 확인해보기로 한다.
유명한 녀석이었다. 강심제로 쓰이는 약물 중 하나.
심장 세포(myocytes)의 세포막에 있는 Na+/K+ ATPase 펌프의 alpha-subunit의 extracellular 부위에 결합하는 약물로, 결과적으론 울혈성 심부전이 발생했을 때 심박 수축을 강하게 만들어주는 역할을 한다(Used for fast digitalization in congestive heart failure). 자세한건
여기를 참조.
여담이지만, digitalization이란 말은 디기탈리스(digitalis)라는 식물에서 유래했다고 한다.
7. 정체는 알았으니 이 녀석을 skip할 방법을 알아보자.
...
...
딱히 옵션이 없다.
에러가 나면 다음 객체로 넘어가자던 옵션은 말을 듣지 않는다.
그래서 요 녀석 하나만 빼놓고 29개를 CONVERT 해보았다.
아까는 욕해서 미안해.
속 편하게 강심제 그 녀석은 다른 곳에서 다시 만나기로 하자.
솔직히 SMILES formatted text를 보고 직접 구조를 그려보고 싶지만
8. 수천 개의 파일 중에서 에러를 일으키는 것만 쏙쏙 지나갈 방법이 딱히 떠오르지 않는다.
그런 녀석만 골라서 제외할 방법도 아직 잘 모르겠다.
시간은 흐르고 흘러... 2019년 2월 26일
9. 사실 obgui.exe는 GUI를 위한 프로그램이었을 뿐, 본체는 babel.exe와 obabel.exe였다.
그리고 그 사이에 python module에 관해 알아보았다.
문서에 따르면 python 인터페이스에서 사용할 수 있는 모듈은 총 두 개.
하나는
openbabel module이고 다른 하나는
Pybel module이다.
설치법은 어느 패키지와 마찬가지로 그것이겠거니와 싶어서
PyCharm에서 찾아보았다.
(PyCharm - Setting - Project:{your project name} -
Project Interpreter - click plus sign)
사실 이 패키지를 설치하기 앞서
python binding for Open Babel을 설치해줘야만
한다.
이 Python bindings라는 것은 OpenBabel과 Python 사이를 연결해주는 일종의
징검다리 역할을 하고 있는 것 같았다.
그리고 OpenBabel에게 명령을 보내는 역할을 할 코드들이 바로 위 사진에 있는
파이썬의 openbabel package인 것 같다.
근데 여기에서 또 문제가 발생했다.
10.
Python binding이 설치되지 않는다.
(ㅇㅇ?)
난 분명 파이썬이 깔려있는데 무슨 소리..
그래서 구글링했더니 이러한
답변이 있었다.
"Open Babel DLL은 32-bit python만을 지원하고 있습니다. 64-bit python까지 호환되는
배포버전을 유지관리 하기엔 너무 힘들더라구요."
11. 그래서 python x86을 side-by-side 설치하려 하는데,
설치법에 특이사항이 있었다.
'Register Extensions'에 체크를 해제하라는데,
위의 에러에서 봤듯이, 레지스트리에 아예 파이썬 설치가 뜨질 않았다.
12. 이쯤 되니 귀찮아졌다.
이 방법을 고집할 필요가 있을까 하는 생각이 슬슬 올라오기 시작한다.
나의 목적은 SMILES format을 3D SDF coordinate format으로 변환시키는 것.
그냥 기본으로 돌아가서
파이썬 빼고 사용법대로 응용해보자.
13. 기본 사용법
기본적으로 input 대비 output을 주는 프로그램이다.
나의 경우는 설치 경로가 "C:\Program Files\OpenBabel-2.4.1"이었고
해당 위치에서 Windows PowerShell을 실행해 명령어를 입력해보았다.
(꿀팁: 윈도우 탐색기에서 shift + 우클릭을 하면 해당 위치에서 파워쉘 실행 가능)
(꿀팁)
파일을 디렉토리에 놓고 실행시켜보았다.
obabel -i smi test.smi -o sdf -O test.sdf --gen3d -h
obabel -i {input_format} {input_file} -o {output_format} -O {output_file} --{option}
이렇게 사용했다.
-h 옵션은 explicit로 만들어주기 위해 hydrogens를 추가시켜주는 옵션이다.
반대로 implicit로 만들고 싶을 땐 hydrogens을 제거하기 위해 -d 옵션을 주면 된다.
If you want to add hydrogens (i.e. make them all explicit) when doing the conversion the command would be:
왜 babel.exe 대신에 obabel.exe를 사용하는지는
홈페이지에서 설명해주고 있었다.
요약하면, babel에서 기능을 더 추가해 만든 것이 obabel이라고 하고
앞으론 obabel이 babel을 대체할 것이니 그걸 쓰는 것이 권장된다는 이야기였다.
그런데 간과한 사실이 있었다. 여기는 프로그램이 저장되는 곳이지
데이터가 저장되는 곳이 아니었다. 그래서 권한 설정이 없는 곳에서 다시 실행시켰다.
(잘 작동한다.)
14. 하지만 내겐 아직 2360개의 파일이 더 남아있었다.
딱히 이 작업을 편리하게 만들어주는 UI를 만들 필요는 없어보이고
나의 파일을 처리하기 위한 코드만 만들기로 했다.
이 과정은 개인적으로 파이썬을 사용했다. 얼마 걸리지도 않는다.
15. 그런데 또 간과한 사실이 있었다.
일단 파일명에 스페이스바 ' '가 들어있으면 '_'로 치환해주는 편이 좋다는 점.