パトコアの技術ブログ

化学情報管理・創薬支援のためのケモインフォマティクス製品を扱うパトコアです。本ブログは技術チームにより運営されており、各種ツールを使うとどんなことができるの?という観点から、技術情報をお届けします。

パトコアの技術ブログ

化合物データベースを作成する(JChemBase編)

f:id:patcore:20210201124449p:plain

投稿者 Patcore, Inc.

数百万の化合物構造と構造情報に紐づくデータを安定して管理する方法としてリレーショナルデータベース(以下DB)が広く用いられています。今回は、そのDBのバックエンドで動作し、構造検索などの化学に特化した機能を利用できるようにするJChem Base1について紹介します。

化学情報をDBで管理する検索エンジンはChemAxon社の「Heart beat」テクノロジーに位置付けられており、様々なChemAxon製品の基盤となっています。現在、JChem EnginesシリーズとしてRDBMS(Oracle, PostgreSQL, etc.)に最適化されたもの、ウェブサービスでの利用を想定したものなど、各種のJChem Enginesがリリースされていますが、JChem BaseはChemAxon社の設立当初(20年以上前!)にリリースされた製品です。開発は後継の製品に引き継がれていますが、現在でもメンテナンスは続けられており、製薬企業の社内DBや、弊社などが開発・提供する様々なアプリケーションの土台として稼働しています。

今回はRDBMSとJChem Baseを利用した、化合物データベース作成方法について紹介します。前回のJC4XLの記事で化合物データベースの共有についての話題に触れましたが、最近日本でも化合物ライブラリー共有に向けた動きが本格化しているようですね。オールジャパン・ライブラリーに向けた両グループの取り組みに注目しています。


目次


インストール

JChem BaseはJavaベースのアプリケーションであり、JDBC(ODBC)を介してRDBMSと通信を行います。このため、インストールに当たり以下が必要となります。

  • Java 8
  • RDBMS - Oracle, MySQL, PostgreSQL, Microsoft SQL Server, Microsoft Access, Derbyなど
  • JDBC driver
  • JChem Baseインストーラー

今回はWindows環境にPostgreSQLをインストールしてJChem Baseを動かしてみます。

f:id:patcore:20210201112941p:plain:w450

データベースへ接続

JChem BaseはCLI/GUIによりDBを操作することができるJChemManagerプログラムが備わっています。jcmanagerよりGUI操作するJChemManagerを呼び出し、ますはデータベースへ接続してみます。

f:id:patcore:20210201112948p:plain

事前に作成したPostgresデータベースへの接続情報を記入して接続すると、JChemPropertiesというテーブルが作成されます。このテーブルをJChemBaseが管理し、化合物情報を扱えるようにしています。

テーブル作成

化合物データを記録するテーブルを作成します。GUIのメニューから作成するテーブル名と共に、化学情報を扱うための各種オプションを指定します。構造情報はハッシュ化されたフィンガープリントにより構造検索できるようにするため、その詳細条件や、ステレオ情報などの構造正規化に関するオプションが備わっています。

JChem Baseでは構造の取り扱いを最適化するため、以下の中から作成するテーブルのタイプを選択できます。今回は単なる化合部の構造データなので、「Molecules」で作成しました。

  • Molecules
  • Reactions
  • Any structures
  • Markush libraries
  • Query structures

f:id:patcore:20210201112922p:plain

化合物データの取り込み

化合物データを取り込むため、カタログを取り扱うMolportから化合部データをダウンロードしました。構造情報はSMILESとして提供されており、約770万件のレコードが入っていました。

Importのメニューよりファイルを選択して読み込ませると、フィールドを認識してくれます。構造情報はSMILES, SDF, MOL, InChIなどの主要なファイル形式を自動で認識するため、そのままOKでインポートが開始されます。

インポートは時間がかかるので途中で中止しましたが、150万レコードを読み込みました。Core i7-8565U (8core, 1.80 GHz)で15分ほどかかりました。

f:id:patcore:20210201112931p:plain

その他テーブル操作

その他、カラムの挿入やテーブルの削除といったALTER, DROPなどのSQLをGUI上で行えます。さらに、Exportのメニューを使うことでデータのエクスポートも簡単に行えます。


構造検索

化合物データをDBに入れたので、データが構造化され、構造検索用のフィンガープリントが生成されました。JChem Baseは開発者用のAPI(Java, .NET)を提供しているため、プログラムを使ってDBに接続し、SQLなどで検索することができます。ただ少し面倒なため、今回はChemAxonが提供するjcsearchというコマンドラインツールを用いて検索してみます。

まず、jcmanを使ってコマンドライン上でデータベースに接続します。

jcman --driver org.postgresql.Driver --dburl jdbc:postgresql://localhost:5433/jcb_demo -l patcore -p ********* -s t demo_molport

jcseaerchはクエリを使ってターゲットを検索する流れとなり、様々なオプションを指定することができます。ターゲットをDBに指定して検索してみます。

jcsearch -t:d -q 'c1ccccc1Cl' -f smiles DB:demo_molport
// 結果
ClC1=CC=CC=C1

「demo_molport」のテーブルをターゲットとして、「c1ccccc1Cl」(クロロベンゼンのsmiles表記)によるduplicate searchを実行しました。テーブルではケクレ環クロロベンゼンのsmilesが登録されているようで、異なるsmiles表記「ClC1=CC=CC=C1」が返ってきていますが、どちらも同じクロロベンゼンです。

ChemAxonの構造検索では下記種類の構造検索を行うことができます。本記事では構造検索の詳細について説明することは省略します。

  • Substructure
  • Superstructure
  • Full Fragment
  • Full
  • Duplicate
  • Similarity

試薬管理・スクリーニングといった様々な用途で構造検索が用いられるため、多くのオプションを付けて検索できるようになっているのですね。

検索事例

いくつかの検索事例を紹介します。

1. 安息香酸をクエリとしてSubstructure検索(部分構造一致)し、ヒットした部位を色付けした上でMarvin Viewに表示させる。

jcsearch -t:s -q 'c1ccccc1C(=O)O' -f mrv DB:demo_molport --hitColoring | mview -

f:id:patcore:20210201112953p:plain:w500

2. 安息香酸をクエリとしてFull Fragment検索(フラグメント一致)し、結果をMarvin Viewに表示させる。

jcsearch -t:ff -q 'c1ccccc1C(=O)O' -f mrv DB:demo_molport | mview -

f:id:patcore:20210201112926p:plain:w500

3. L-Alanineとブロモ基の2つをクエリとしてSubstructure検索する。ステレオ検索タイプは「exact」。

jcsearch -t:s -q 'C[C@H](N)C(O)=O' --and -q 'Br' -f smiles DB:demo_molport --stereoSearchType:e
// 結果
C[C@](N)(CC1=C(Br)C=CC=C1)C(O)=O
Br.COC(=O)[C@@H](N)CCBr
CC(=O)N[C@@H](CC1=CC=C(Br)C=C1)C(O)=O
CC(C)(C)OC(=O)N[C@@H](CC1=CC(Br)=CC=C1)C(O)=O
...

4. AspirinをクエリとしてDissimilarity Threshold 0.4でSimilarity検索(構造類似検索)し、結果を「分子量 > 250かつlogD7.4 < 2」でフィルターする。

jcsearch -t:i:0.4 -q 'CC(=O)OC1=CC=CC=C1C(O)=O' -f smiles DB:demo_molport -e "(mass() >= 250) && (logd('7.4') < 2)"
// 結果
OC(=O)C1=C(OCCOC2=C(C=CC=C2)C(O)=O)C=CC=C1
OC(=O)C1=C(OCCOC2=CC=CC=C2)C=CC=C1
CC(=O)OC1=C(C=C(Br)C=C1)C(O)=O
OC(=O)C1=C(OCCOCCOC2=C(C=CC=C2)C(O)=O)C=CC=C1
...

Chemical Termsという化学情報を扱うための独自言語で分子量や物性計算を記述しています。


Beyond JChem Base

今回150万レコードの構造式テーブルを汎用ノートPCを使って検索してみました。この条件下でも検索事例の構造検索のレスポンスは数秒~十数秒程度と、ストレス無く検索することができました。

構造検索は結果のレコード数が少なく、多くのメモリを使用できるほどパフォーマンスが上がります。今回の規模とクエリの複雑性を想定した化合部データベースであれば、JChem Baseで十分信頼できる検索システムを構築できそうです。

一方、データベースの大規模化、Markush構造の高速検索、より包括的なスクリーニング、などの用途で検索パフォーマンスの向上は常に求められています。この化学情報取り扱いの基盤となるシステムに対して、ChemAxon社は継続して開発を続けており、現在では億を超えるレコードの取り扱いも可能です。

JChem Enginesシリーズの第二世代検索エンジン(JChem Choral Cartridge, Postgres Cartridge)は、メモリの利用効率を高めるなどの開発により、検索パフォーマンスを大きく向上させています。それぞれOracleとPostgreSQLに最適化されています。また、類似構造検索に特化してリアルタイムで検索結果を返すことができるMad Fast Similarity Searchや、GraphデータベースとしてJChem Neo4Jといった製品・試作品がリリースされており、多様な用途に沿った選択ができるようになっています。

化合物検索まわりのシステムは少々複雑なため、興味があればパトコアに相談下さい。