새 블로그를 개설하다

새로운 블로그를 개설했다.

Agile2Robust.com

이 블로그에서는 일과 관련된 포스팅은 거의 하지 않았었는데, agile2robust에서는 일과 관련된 글들을 좀 포스팅해볼까 한다. 한국에는 (내가 아는 한) 화학정보학이나 분자 모델링과 관련된 블로그가 거의 없는 만큼, 이러한 분류의 블로그로는 처음이 아닐까 하는 생각이 든다.

사실 여러 블로그 툴을 생각을 해 봤는데 그냥 태터툴즈로 선택했다. 사실, 이렇게 내용이 드문 블로그라면 태터툴즈를 기반으로 하고 있는 한국 블로그계에 좀 적극적으로 뛰어들어보는 것도 나쁘지 않겠다는 생각이 들었기 때문이다.

지금 이 블로그만큼 자주 포스팅이 되지는 않겠지만 최대한 자주 포스팅을 해 보도록 노력해 보자!

Similarity by Compression

며칠 전에 Journal of Chemical Information and Modeling에 재미있는 논문이 실렸다. 바로 Similarity by Compression이라는 제목의 논문이다. 제목이 암시하는 것처럼 일반적으로 사용되는 압축 프로그램인 gzip이나 bzip2를 이용해서 화합물의 canonical SMILES를 압축한 후에 그 유사도를 보는 것을 내용으로 하고 있다.

이게 재미있는게, 압축 알고리즘이 반복되는 정보의 패턴을 이용해서 저장 공간을 줄이는 것이기 때문에, canonical SMILES와 같은 line notation을 사용하는 경우에, 특히 그 문자열의 종류와 위치가 중요한 경우에 화합물의 유사도를 나타내는데 쓰기가 좋다는 점이다. 특히나 이런 일에 공개되어 있는 압축 프로그램을 사용한다는 발상 자체가 재미있게 느껴졌다.

그리고 이런 일을 할 수 있는 zippity라는 이름의 프로그램을 루비로 개발해서 공개를 해 놓았다. depth-first 블로그에 이 프로그램 및 논문에 관한 블로그 글이 올라왔다.

역시 연구는 아이디어로 하는거고, 재미있는 아이디어는 누구에게나 재미있는 것이다. 내게 중요해 보이고 좋아보이는 것은 남들에게도 좋아보이는게 당연하다. 오늘 오전에 이 논문으로 접속을 하려고 했는데, 접속이 몰려서 서비스를 이용할 수 없다는 메시지가 나왔었다. 다른 논문들은 문제가 없는걸로 봐서, 이 논문에 대한 요청이 많았던 것이 아닐까 하는 추측을 했다. 좋은 논문은 많은 사람들이 보고싶어 하는게 당연한 일이 아니겠는가… 그치만 서비스가 중지될 정도로 많이?

sdf 다루기

앞의 글에서 이야기한 바와 같이 화합물의 구조와 이와 관련된 정보를 저장하는데 많이 사용되는 포맷이 MDL의 sdf 파일이다. 특히 많은 수의 화합물을 한 파일에 저장해야 할 필요가 있을 때는 sdf 파일이 유리한 점이 많이 있다.

기본적으로 sdf는 mol 파일의 포맷과 동일한 포맷이다. 다만 여러 개의 분자를 담고 있다보니 일반적으로 사용하는 chemical drawing program에서는 다루기가 어렵고 excel과 유사한 형태의 spreadsheet 형태의 인터페이스가 사용되어야 한다. 연구용으로 사용되는 상용 소프트웨어들은 많이 있지만 그런 소프트웨어들을 제외하고, 무료로 사용할 수 있는 소프트웨어들을 보면 다음과 같은 것들이 있다.

  1. ChemFileBrowser (link): sdf 파일을 보고 합치거나 나누기, csv 포맷의 데이터를 병합하기 등의 기능을 가지고 있는 소프트웨어이다. 간단한 분자표현자 계산 기능을 가지고 있다. 원래 0.2대의 버전들이 sdf를 여는데 문제가 있었는데, 최근에 발표된 0.2.8 버전에서는 이런 문제가 없다.

  2. PowerMV (link): 미국의 국립통계과학연구소의 Stan Young 박사가 개발한 소프트웨어이다. 일반에 배포하는 basic version은 0.6.1이고, 2005년 이후로는 업데이트되지 않고 있다. 그러나 affiliate version의 경우에는 0.7.1 버전이 나와 있고 더 많은 기능을 가지고 있다. 이 소프트웨어의 특징은 유명한 공개 통계 소프트웨어인 R을 붙여서 통계 기능을 수행할 수 있게 했다는 점이다. 이외에 간단한 similarity search, pharmacophore search 등을 할 수 있게 되어 있다 (실용적인 수준은 아닌 듯 하다).

  3. DS Visualizer (link): Accelrys사에서 무료로 배포하고 있는 소프트웨어로서 이전에는 DS Vierwer라는 이름을 가지고 있었다. 이전 글에서 언급을 한 바와 같이 리눅스와 윈도우용 버전을 모두 공개하고 있다. 원래 판매되는 소프트웨어였고, 화학 관련 소프트웨어 회사로서는 가장 다양한 소프트웨어를 보유하고 있는 Accelrys사의 제품답게 많은 기능과 편의성을 제공하고 있다. 사실 전에 DS Viewer Pro나 Lite에서는 sdf 파일에 대한 지원이 미약했었는데, 지금은 sdf를 매우 잘 지원하고 있으므로모델링 관련된 부분에서 이 소프트웨어로 볼 수 없는 것이 거의 없다고 말할 수 있을 정도이다.

  4. MayaChemTools (link): Manish Sud에 의해 개발되고 있는 perl 프로그램으로서 sdf를 다루기 위한 거의 모든 기능들을 가지고 있다. 이 이전 글에 관련 내용을 적어 놓았다.

Molecular Representation

화학정보학(Cheminformatics)은 말 그대로 화합물(chemical)의 정보(information)를 다루는 학문이다. 화합물에 있어서 가장 중요한 정보는 역시 화합물의 구조이다. 왜냐하면 물질의 구조가 물질의 성질을 결정하기 때문이다. 화합물의 정보를 저장하고 관리하는 가장 중요한 이유는 화합물의 성질을 결정하는 것이 어떤 요소인지를 정확하게 파악하는 지식(knowledge)을 얻는 것이므로, 물질의 구조를 정확하게 표시하고 이해하는 것이 화학정보학의 가장 중요한 첫 걸음이 된다. 그래서 Handbook of Chemoinformatics: From Data to Knowledge (Representation of Molecular Structures)라는
책에서 가장 먼저 분자의 구조를 어떻게 표시할 것인가(molecular representation)를 다루고 있다. 화합물(특히 유기 화합물)의 구조를 표현하는 포맷에는 다음과 같은 것들이 있다.

  1. Daylight사의 SMILES code는 가장 일반적으로 사용되는 표현 방법이라고 할 수 있다. 이 표현법의 좋은 점은 저장 공간이 매우 적게 든다는 점이다. 한 구조가 여러 개의 SMILES로 표현될 수 있다는 단점은 Canonical SMILES를 사용하여 해결할 수 있다. 분자의 패턴과 특별한 부분구조(substructure)를 표현하기 위한 SMARTS라는 확장도 존재한다.

  2. IUPAC에서 개발한 InCHI code는 SMILES의 여러 단점 (tautomer 문제 등)을 해결하기 위해 만들어진 프로그램으로서 소스 코드 및 모든 필요한 API가 공개되어 있다. 이 소프트웨어는 sourceforge에 등록되어 있기 때문에 여러 오픈소스 프로그램에서 사용되고 있으며, 최근에는 거의 모든 주요한 화학 프로그램에서 지원하고 있다.

  3. mol 및 sdf 파일은 MDL사의 고유 포맷으로서 connection table을 기반으로 한 포맷이다. 포맷은 공개되어 있으며, MDL 홈페이지에서 회원 가입 후 다운로드받을 수 있다. sdf는 구조 정보와 이와 관련된 기타 텍스트 데이터를 저장할 수 있는 포맷으로서, 많은 필드를 가지고 있을 경우에는 용량 대비 비효율적인 문제가 있지만 파싱이 쉽고 많은 데이터를 한 파일에 저장할 수 있으므로 많은 화학정보학 관련 소프트웨어에서 기본적으로 지원하고 있다.

  4. Tripos사의 mol2 포맷은 Sybyl에서 사용되는 기본 포맷으로서 mol 파일과 유사한 기능을 하지만, 일반적으로 이보다 더 많은 정보를 담고 있다. 하나의 mol2 파일 안에 여러 개의 분자 정보를 저장할 수 있다.

이외에도 대부분의 화학 프로그램들은 나름대로 고유의 포맷을 지원하는 경우가 많이 있다. 그러나 어떤 프로그램도 위의 네 포맷 중 하나도 지원하지 않는 프로그램은 없을 것이다. 물론 각 포맷은 장단점이 있으며, 사용시 주의해야 하는 점도 많이 있다. 대량의 화합물 정보를 다루는 화학정보학의 특성상 이러한 포맷들을 잘 이해하고 다룰 수 있는 능력은 매우 중요하며, 모든 화학정보학에서 하게 되는 작업들의 기반이 된다.

Compound enumeration

다량의 화합물을 일일이 손으로 그림을 그리고 있는 것은 참 따분한 일이다. 수십개 수준이라면 어떻게 해 볼 수 있겠지만, 작용기를 세 개 가지고 있고 각각의 작용기에 20개의 가능한 치환기가 있다면 이것만으로도 8000개의 화합물이 된다. 이 많은 화합물을 손으로 그린다는 것은 당연히 불가능한 일이다.

조합화학이 발전하면서 이런 종류의 일들이 실제로 많이 필요하게 되었고 따라서 이를 위한 방법들도 많이 생겨났다. 이렇게 다량의 화합물의 구조를 한번에 만드는 일을 enumeration이라고 한다. Enumeration에는 크게 두 가지의 방법이 있는데, 조합화학을 사용하는 사람들이라면 반응 기반의 enumeration을 주로 하게 될 것이고, 일반적인 medicinal chemist라면 치환기 기반의 enumeration을 주로 하게 될 것이다.

사실 많은 사람들이 enumeration이 어렵다고 생각을 하기 때문에 시도조차 해 보지 않는 경우가 많이 있다. 그러나 생각보다 비싼 전용 프로그램을 사용하지 않고도 쉽게 이 일을 할 수 있는 방법도 있다.

  1. 무료로 제공되는 ISIS/Draw 이용 : ISIS/Draw는 무료로 제공되는 화합물 drawing 프로그램이다. 이 프로그램을 이용하면 화학 반응, 그리고 R 그룹 표시법을 사용하여 rg 파일을 만들 수 있다. 이 파일은 Pipeline Pilot 등의 프로그램을 이용해서 enumeration할 수 있다.
  2. ChemOffice에 들어 있는 CombiChem/Excel 사용
  3. Accord SDK 사용
  4. ChemAxon의 Reactor 사용
  5. PreADMET 2.0 사용 : 우리 연구소에서 곧 출시될 PreADMET 2.0을 이용해서 enumeration을 할 수 있다.

물론 이외에도 많은 방법과 소프트웨어가 있다. 중요한 것은 이런 일을 하면서 다양한 예측 시스템과 scoring 전략을 사용할 수 있는가 하는 면이다. 그런 면에서 단순한 enumeration이 문제가 아니라 그걸 어떻게 실제 과제에 응용할 수 있는가가 중요한 점이라고 할 수 있다.

DSVisualizer on linux


DSVisualizer on linux

Originally uploaded by lordmiss.

내 경우에 리눅스를 주 데스크탑으로 사용하지 못하는 이유 중에서 가장 큰 것이 바로 molecular visualizer 프로그램의 문제이다. 물론 리눅스에서도 PyMol이라는 멋진 프로그램을 쓸 수 있고, 이 프로그램이 윈도우에서도 동일하게 작동하기 때문에 좋기는 하지만, 여전히 사용 방법이 불편하고 직관적이지 않은 것은 분명하다. 그래서 지금까지는 DSViewer Pro를 사용해 왔고, 이걸 대체할 수 있는 소프트웨어가 리눅스에 없었기 때문에 리눅스 머신은 언제나 보조 데스크탑에 지나지 않았다.

그러나 이번에 Accelrys에서 freeware로 공개하고 있는 DSVisualizer의 경우에는 윈도우와 리눅스용 버전을 모두 ��개하고 있다. 이걸 리눅스에 깔아봤는데 윈도우 버전과 거의 아무런 차이가 없이 동일하게 작동되는 것을 알 수 있었다.

이제 리눅스 데스크탑 사용을 위한 실질적인 문제는 파워포인트와 엑셀 뿐인 것 같다.

Parse html to make a sdf file

루비를 이용해서 웹페이지의 내용을 긁고, 이걸로 sdf 파일을 만들 수 있다는 생각이 들었다.

예를 들어 PASS같은 경우 로그인을 하고 분자를 제출하면 결과를 웹 페이지로 보여준다. 로그인과 분자 제출 부분을 자동화하고 결과로 생성되는 웹 페이지에 들어있는 정보를 Rubyful Soup같은 라이브러리를 이용해서 추출한 다음, 적절하게 sdf로 묶어줄 수 있을 것 같다.

문제는 역시 구현을 해 봐야 확인을 할 수 있다는 것이다. 쩝…

molruby

언젠가 ruby-talk에 루비로 진행되는 화학 관련 프로젝트가 있는지 질문을 올린 적이 있었다. 사실 찾을만큼 찾아보고 어느 정도는 없을 것이라는 생각을 하고 올린 것이었고, 실제로 몇 개의 답변이 나오는 동안 bioruby 정도가 언급되었을 뿐 화학 관련 프로젝트는 없었다.

그런데 작년 말에 새로운 포스트가 올라와서 molruby라는 프로젝트가 있다는 사실을 알렸다. 한동안 이 답변을 못 보고 있다가 얼마 전에 이 사실을 알게 되었다. svn으로 소스를 받아보니 revision number가 3이었다. 내용을 좀 살펴보니 mol 파일을 파싱하고 따라서 sdf 안에 들어있는 구조를 파싱하는데까지 되어 있고, sdf 안에 들어있는 데이터 필드를 파싱하는 부분은 만들어져 있지 않았다. 이 부분을 만들고 약간의 통계 관련 내용을 추가해서 만들면 (물론 고리 인지, 토토머리즘 등 테스트해보지 못한 부분이 있긴 하지만) 좋은 프로젝트가 되겠다는 생각이 들었다. 지금 시간을 조�만 낼 수 있다면 어떻게든 이 부분을 만들어서 이 프로젝트에 기여를 해 볼텐데…

csv – useful format

CSV – more useful than your average file format이라는 제목의 글을 읽었다. 많은 개발자들이 데이터를 어떻게 formatting 해서 보여주어야 하는지 고민을 많이 하지만, 실제로는 데이터를 csv 형식으로 주고, 보는 것은 유저가 알아서 보게 하는 것이 좋다 는 정도의 요지로 쓰여진 글이다.

이 글을 보면서 두 가지 생각을 했다.

  1. Graphviz 라는 프로그램을 배워봐야겠다. (꽤 많은 사람들이 이 프로그램을 쓰는 것 같고, 굉장히 파워풀하다는 생각이 든다. 이미 이 프로그램을 깔았다 지워버린 것이 한 서너번 된다. 쩝…)
  2. 모든 정보를 텍스트로 관리하는 것은 좋은 생각이다. sdf에 들어있는 많은 데이터들을 관리하는 것도 실질적으로는 csv 형식으로 하는 것이 좋을 것 같다는 생각이 든다. 물론 그렇게 하면 분자 구조를 못보는 문제가 있지만, 구조만 가진 sdf 파일 안에 csv의 데이터를 쉽게 넣을 수 있는 방법만 있다면 사실 굳이 sdf 파일 안에 데이터를 우겨넣을 필요가 없다는 생각이 든다. 사실 분자의 구조 자체도 InCHI code를 잘 활용하면 csv에 넣지 못할 이유도 없긴 한데…

MayaChemTools

MayaChemTools라는 이름의 프로그램이 있다. GNU LGPL에 의해 배포되는 무료 프로그램으로서 perl로 프로그래밍 되어있다. 원래 펄이라는 언어가 텍스트 프로세싱에 유용한 언어인데다 역사가 깊기 때문에 굉장히 많은 라이브러리가 존재하는 것이 큰 강점이다. 루비가 깔끔하고 좋은 언어적 특징을 가지고 있는데 비해 라이브러리가 많지 않다는 점은 분명히 약점 중의 하나이다. (물론 이 약점은 시간이 해결해 줄 수 있는 것이기는 하다)

이 mayachemtools라는 프로그램을 찬찬히 뜯어보면 굉장히 멋진 프로그램이라는 것을 쉽게 알 수 있다. 기본적으로 sdf 파일과 csv, tsv 파일을 처리할 수 있도록 되어 있는데, 실제로 아직까지 cheminformatics에서 할 수 있는 일이라는 것이 sdf 파일의 내용을 일관적으로 관리하고 그 정보를 가공하는 정도이기 때문에 sdf 파일을 쉽게 처리할 수 있다는 것은 매우 중요한 일 중의 하나이다. 게다가 cheminformatics 프로그램이 아닌 일반적인 실험 데이터들은 대부분 csv 형식으로 저장될 수 있기 때문에, 실험과 관련된 데이터를 처리하기 위해서는 csv 파일에 들어있는 정보를 처리하는 기술이 필요하다. 이런 측면에서 생각해볼 수 있는 거의 모든 기본적인 기능을 가지고 있는 것이 바로 mayachemtools 이다. 그리고 이런 기능이 거의 텍스트 프로세싱이라는 것을 감안하면 펄을 사용하는 것이 아주 적절한 선택이라는 것을 알 수 있다.

결국 모든 데이터는 텍스트로 관리되어야 한다. 최근에 MS 오피스도 자체 포맷을 xml 형태로 하기로 했다고 하는데, 이런 것도 결국은 호환성이나 실용성을 따져보았을 때 텍스트로 관리하는 것이 유용하기 때문이라고 생각할 수 있다. 특히 용량의 면에서도 텍스트 파일을 gzip같은 알려진 압축 포맷으로 압축하여 보관하고, 프로그램에서 읽을 때 압축을 해제하는 과정을 한 번 더 거치게 되면 문제될 것이 전혀 없다. 게다가 이런 압축과 압축 해제에 필요한 모든 루틴들은 거의 표준화되어 공개되고 있지 않은가…

최근에 ChIPS같은 cheminformatics database system 을 만드는 일에 참여를 하면서 이런 생각들을 하고 있다. 그리고 생각보다 좋은 프로그램들이 많이 만들어져 있기 때문에, 이런 것들을 적절하게 묶고 integration 함으로서 아주 좋은 어플리케이션을 제공하게 될 수 있을거라는 생각이 든다.