LoginSignup
9
7

More than 5 years have passed since last update.

raziのDocker-composeで創薬レイドバトル2018用のJupyter Notebookからアクセスできる化合物データベースを作った話

Last updated at Posted at 2018-09-19

概要

創薬レイドバトル 2018で使えそうな化合物データベースを作りました。Jupyter Notebookから簡単に呼び出せます。いいなと思った人ぜひ使ってみてください。

創薬レイドバトル 2018とは

in sillico screening でPD-1/PD-L1タンパク質-タンパク質間相互作用を阻害する化合物を見つけよう!というお祭りです。参加者は自分が阻害剤になりそうと決めた化合物を提出するとアッセイしてもらえます。

主催者は創薬ちゃん(@souyakuchan)


博識でtweetを見てるだけで楽しい。創薬ちゃん!すごい!本当にすごいんだ!

詳しい説明はこちらのgithubに書かれています。みんなでワイワイ楽しみましょう!

背景

創薬ちゃんからいただけるscreening候補のSDFは4つにわかれているし塩も含まれているので前処理芸人として苦労しそうです。そこで脱塩までしたデータベースを用意してみんなで楽しいscreeningのみに注力できたらいいなと思って作ってみました。

環境

MacBook Pro (15-inch, 2017) プロセッサ 2.9 GHz, Intel Core i7, メモリ 16GB
OS: High Sierra (ver. 10.13.6)
Docker version 18.06.1-ce
Dockerで動いているのでおそらくDockerさえインストールされていたらどの環境でも動くと思います。

データベース作成手順

1. リポジトリをダウンロードする

リポジトリはこちらです。
git clone でダウンロードするなら以下のようにしましょう。

git clone -b feature/customize-for-souyakuRB2018 https://github.com/yamasakih/docker-compose-razi.git

2. 創薬ちゃんから提供されたライブラリのSDFをリポジトリ内にダウンロードする

wgetやcurlでとってきたりクリックしてダウンロードしたものを解凍してdocker-compose-razi/workディレクトリの中に入れてください。以下の状態になっていればOKです。

cd docker-compose-razi
ls work/
souyakuRB2018/       souyakuchan_library/ tutorial/

3. OpenBabelなどを用いてSDFをSMILESに変換する

OpenBabelがインストールされているなら以下のスクリプトを実行したら変換ができます。idnumberあるいはIDタグを名前としています。

cd work/souyakuRB2018
./cvt2smi.sh ../souyakuchan_library/ 

OpenBabelは有志の方によってDockerで配布もされています。例えば以下のようにしても実行できます。

cd docker-compose-razi
PWD=`pwd`
docker run -it --rm -v $PWD:/tmp wpayne/openbabel /bin/bash
cd /tmp
work/souyakuRB2018/cvt2smi.sh ../souyakuchan_library/
(実行後)
exit

SDFと同じディレクトリにsmiファイルがあるのが確認できます。

ls work/souyakuchan_library
Enamine_Advanced_collection.sdf        Enamine_HTS_collection.sdf
Enamine_Premium_collection.sdf         UOS_HTS.sdf
Enamine_Advanced_collection.smi        Enamine_HTS_collection.smi
Enamine_Premium_collection.smi         UOS_HTS.smi

4. 脱塩処理をする

提供されたライブラリには塩を含むものなどがあります。今回は一つのSMILESに複数分子が存在する場合、原子数の少ない方を塩とみなして除去するというルールで除去してみます。その処理をまとめたスクリプトである desalt.py を作成しましたので多少雑なその処理でいいよって方は以下のように実行してみてください。

cd docker-compose-razi
docker-compose exec web /bin/bash
cd souyakuRB2018
python desalt.py -i ../souyakuchan_library/Enamine_Advanced_collection.smi
python desalt.py -i ../souyakuchan_library/Enamine_HTS_collection.smi
python desalt.py -i ../souyakuchan_library/Enamine_Premium_collection.smi
python desalt.py -i ../souyakuchan_library/UOS_HTS.smi
(実行後)
exit

仮想環境内には並列処理するためのモジュールであるjoblibもインストールされていますので仮想環境内なら並列処理できます。例えば6個のCPUを用いて脱塩処理したい場合は -n 6 と指定してください。もちろんご自身のローカルにjoblibがあれば同様に処理できます。

python desalt.py -i ../souyakuchan_library/Enamine_Advanced_collection.smi -n 6

ちなみに私のパソコンの場合 -n 10 ぐらいで実行するとパソコンが唸り声をあげました。私のパソコンの場合、 -n 10 で全部で1時間ぐらいで処理が終わりました。RDKitで読み込めない化合物が50個ぐらいありそれらはファイルから取り除かれています。

脱塩されたsmiファイルはおしりに _desalt.smi とついています。

cd docker-compose-razi
ls work/souyakuchan_library
Enamine_Advanced_collection.sdf        Enamine_HTS_collection.sdf
Enamine_Premium_collection.sdf         UOS_HTS.sdf
Enamine_Advanced_collection.smi        Enamine_HTS_collection.smi
Enamine_Premium_collection.smi         UOS_HTS.smi
Enamine_Advanced_collection_desalt.smi        Enamine_HTS_collection_desalt.smi
Enamine_Premium_collection_desalt.smi         UOS_HTS_desalt.smi

5. データベースを作成する

最後にデータベースを作成します。データベースを作成するコマンドをまとめた setup.sh を実行してください。4で作った_desalt.smiをみつけてデータベースに登録します。

4で紹介した方法と異なる方法で脱塩した場合はファイルの名前をそろえるか setup.sh をテキストエディタなどで開き読み込むファイル名を編集してから実行してください。

cd docker-compose-razi
work/souyakuRB2018/setup.sh

自動で2〜3時間ほどで作業が終わると思います。RDKitで読み込めない化合物が1個だけありそれは登録されません。
登録後にデータベースにアクセスするにはdocker-composeを起動している状態で http://localhost:8888 から jupyter notebookを起動します。(Windowsならhttp://192.168.99.100:8888かな?)

docker-compose/work フォルダが仮想環境にマウントされるようになっていますので別途必要なファイルなどもworkフォルダに入れておくと自動でマウントされます。

創薬バトルレイド用とは別に以前から作っておいた tutorial フォルダのチュートリアルを読んだり souyakuRB2018 フォルダの test-db.ipynb を読んだりしたらだいたい使い方はわかるかなと思います。色々触って遊んでみてみてください。(tutorialフォルダの例に出てくるtableは後述のデータベース構造とは少し異なります)

データベース構造

Compounds table

Compounds tableには提供されたライブラリの化合物を登録してます。以下のカラムがあります。

カラム
id Integer
structure mol
name String
library_id Integer
mfp2 bfp
ffp2 bfp
atompair bfp
torsion bfp

(*bfp: binary fingerprint)

id: 自動で割り振られたこのテーブル上だけのID。いわゆるPrimary keyです。元々の化合物ライブラリで割り振られていたIDはnameカラムにあります。
structure: smilesキーで示された化学構造。raziにより部分構造検索や、類似構造検索が可能です。
name: 化合物の名前として提供されたSDFのIDタグに保存されているIDを名前にしています。
library_id: 後述するlibraries tableと紐づいておりどのSDF由来かが記録されています。
mfp2: RDKitでMorgan fingerprintと呼ばれるfingerprint。ECFP4と呼ぶ人の方が多いと思います。RDKitでは半径を指定するのでMorgan fingerprint radius=2 でECFP4相当です。
ffp2: RDKitでFeature Morgan fingerprintと呼ばれるfingerprint。Morgan fingerprint同様FCFP4と呼ぶ人の方が多いと思います。
atompair: Atompairと呼ばれるfingerprint
torsion: 二面角を考慮したfingerprint

Library table

Compounds table の化合物が提供された4つのSDFのどれ由来かなのが保存されています。最後にアッセイしてもらう化合物を提出するときなどに使いましょう。

カラム
id Integer
name String

id: このテーブル上だけのID。いわゆるPrimary keyです。Compound tableのlibrary_idはこのidの値を参照しています。
name: 元のSDFのファイル名が保存されています。

仮想環境がいらなくなったら

cd docker-compose-razi
docker-compose down

で仮想環境を破棄してください。仮想環境のデータもいらない場合は

docker volume rm docker-compose-razi_dbdata

でデータも破棄できます。
詳しくはREADMEをご覧ください。

まとめ

少し触ってみて便利そうだなと感じたらぜひご活用ください!よき創薬ライフを!

参考

RDKit database cartridge
razi
創薬レイドバトル

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7