2006年07月22日

CDKで分子の重ね合わせ

CDKを使った分子の重ね合わせについてメモしたいと思います。CDKではKabschのアルゴリズムを用いて重ね合わせを行っており、このアルゴリズムは、CDK以外にも多くのソフトウェアで採用されています。以下に原著論文を挙げておきます。

Kabsch, W. A solution for the best rotation to relate two sets of vectors. Acta. Crystal, (1976) 32A:922-923.

Kabsch, W. A discussion of the solution for the best rotation to related two sets of vectors. Acta. Crystal, (1978) 34A:827-828.

今回は、2つのフェノール分子の重ね合わせを行ってみます。
重ね合わせには、KabchAlignmentクラスを利用します。まず、重ね合わせたい2つの分子mol1,mol2(IAtomContainerクラス)を引数として、インスタンスを作成します。この場合、mol1にmol2を重ねることになります。次に、align()メソッドで重ね合わせを行います。そして、getRMSD()メソッドにより、2つの分子の重なり具合を示すRMSDを得ることができます。

 KabschAlignment kca=null;
 try {
  kca = new KabschAlignment(mol1,mol2);
  kca.align();
  System.out.println(kca.getRMSD());
 } catch (CDKException e) {
  e.printStackTrace();
 }

重ね合わせを行ったmol2の座標がほしい場合は、まず、getCenterOfMass()メソッドによりmol1の中心座標を取得し、mol2を平行移動します。次に、rotateAtomContainer(IAtomContainer ac)メソッドを用いて、回転させることにより得ることができます。

 Point3d mol1_mass = kca.getCenterOfMass();
 for(int i=0;i<mol2.getAtomCount();i++){
  Atom atom = (Atom)mol2.getAtomAt(i);
  atom.setX3d(atom.getX3d() - mol1_mass.x);
  atom.setY3d(atom.getY3d() - mol1_mass.y);
  atom.setZ3d(atom.getZ3d() - mol1_mass.z);
 }
 kca.rotateAtomContainer(mol2);

sp.PNG

ただし、この例では、2つのフェノールの原子の番号付けは同じになっています。番号付けが異なる場合は、そのまま対応する原子同士で重ね合わせが行われるため、適切な結果を得ることができません。対策として、Morgan法などで番号付けを揃えておく、または、obfitのように部分構造検索を利用して重ね合わせる原子ペアを取得するなどが考えられます。



banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 15:02| Comment(0) | TrackBack(0) | CDK | このブログの読者になる | 更新情報をチェックする

2006年07月21日

BKChem

IronPythonという.NET上のPython処理系があるのですね。今まで.NETを利用する機会がなかったのですが、Pythonでなら書いてみたくなります。

さて、BKchemは、Pythonで書かれた分子エディタです。InChIやSMILESをサポートしています。SMILESから2次元構造を生成させる機能もあり便利です。下図の分子構造はSMILESから生成させたものです。

screen.png

PDFでExportもできますよ。


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 08:33| Comment(0) | TrackBack(0) | その他ツール | このブログの読者になる | 更新情報をチェックする

2006年07月20日

iBabel

iBabelというMac OS/Xで動作するOpenBabelのGUIがあるそうです。私の周りには、残念ながらMacがないので動作確認ができないのですが、ファイル変換だけでなく、部分構造検索、物性計算、さらには、Jmol, JChemPaint, Marvinを使った分子構造の入力/閲覧もできるみたいです。また、iBabelは、AppleScriptというスクリプト言語で実装されているようで、これもおもしろそう。

既存のソフトウェアのシンプルな組合せですが、簡単にsdfの中身を覗くことができ、便利なのではないでしょうか。


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 08:53| Comment(0) | TrackBack(0) | OpenBabel | このブログの読者になる | 更新情報をチェックする

2006年07月19日

JChemPaint Applet

Java Applet版のJChemPaintですが、思ったよりも起動時間が短くなかなか良いと思います。以下で実際にJChemPaint Appletが使用できますので、お試しください。Canvas上でW-clickすると別Windowで操作できます。





Mol file

Applet版の分子エディタといえばJMEが多くのサイトで利用されていますが、CDKユーザとしては、JChemPaintがどれだけ普及するか楽しみにしています。


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 08:45| Comment(0) | TrackBack(0) | CDK | このブログの読者になる | 更新情報をチェックする

2006年07月18日

CDK最新版(20060714)のリリース

CDKの最新版であるCDK-20060714がリリースされました。まだ、HP上では具体的な変更点(ChangeLog)やAPI documentは前回のバージョン(CDK-20050826)のままですので、詳細は分かりませんが、早速、javadocを使って、API documentを作成し、チェックしています。何かおもしろい機能が追加されていれば、メモしたいと思います。


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 08:19| Comment(0) | TrackBack(0) | CDK | このブログの読者になる | 更新情報をチェックする

2006年07月17日

ScreeningAssistant その3

今回は、実際にScreeningAssistantを使って、化合物のフィルタリングを行ってみます。ScreeningAssistantを起動し、メインメニューから[Database]->[New]を選択すると、"Open database"ダイアログが開きます。前回構築したligandinfoを選択し、Openボタンをclickすると、"DataBase Viewer"が開き、操作可能な状態になります。

まずはデータベース内の化合物の分布をいくつかの視点から確認してみます。"DataBase Viewer"のメニューから、[Charts]->[Pie Charts]->[Compounds Repertition]を選択すると、化合物の総数に対するサプライヤーの割合がわかります(この例では、サプライヤーではなくChemBankとChemPDBですが)。

sa6.png



次に、Chemical Spaceを視覚化したいと思います([Charts]->[Chemical Space])。

sa7.png

ScreeningAssistantのメインな機能といえるフィルタリングを行ってみます。"DataBase Viewer"の虫眼鏡みたいなアイコンをclickすると"Compounds Selection"ダイアログが表示されます。フィルタはQuery部分で定義するのですが、ここではMwは500以下(mw <= '500')、反応性の高い官能基はなし(is_reactive = '0')、logPは5以下(logP <= 5)を満たす化合物を取得するフィルタを定義します。OKボタンをclickすると実行され、"DataBase Viewer"上に反映されます。

sa8.png

ファイルへの出力は、"DataBase Viewer"のメニューから[Database]->[Export]を選択し、表示される"Export"ダイアログで行います。ここでは、ExportしたいFieldも選択できます。さらに、Diversityを考慮して出力する化合物数も調節できます。

sa9.png

ちなみに、反応性の高い官能基等の設定は、メインメニューの[Configure]->[Structural Filters]からSMARTSにより設定できます。

sa10.png

データベース管理の知識がなくても簡単に操作できますし、GUIもなかなか良いと思います。重複分子はImportの際、自動的に削除されているみたいです。それにしても便利なソフトウェアだと思います。


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 21:35| Comment(0) | TrackBack(0) | JOELib | このブログの読者になる | 更新情報をチェックする

2006年07月16日

ScreeningAssistant その2

今回は、ScreeningAssistantのインストールからデータベースの構築までをメモしたいと思います。ScreeningAssistantは以下のURLのdownloadから取得できます。
 http://www.univ-orleans.fr/icoa/screeningassistant/index.html
ScreeningAssistantを利用するためには、以下の3つのソフトウェアが必要です。
 Java 5 JRE, Java3D, EasyPHP(MySQL)
ただし、他のserverで稼動しているMySQLを利用できる場合は、EasyPHPのインストールは必要ありません。また、EasyPHPではなく、単にMySQLをインストールしても問題ないと思います。

現在、ScreeningAssistantはWindows版のみが配布されております。ただしソースコードも入手できますので、他の環境でもがんばれば動作するかもしれません。インストール自体は、上記3つのソフトウェアをインストール後、入手した"SAb02.exe"を実行するだけです。

インストールが完了すると、デスクトップにScreeningAssistantへのショートカットが作成されますので、W-clickします。ScreeningAssistantが立ち上がり、"Structure Viewer"のみが表示されていると思います。まず、データベースの作成から行います(EasyPHPの起動をお忘れなく)。メニューから[Database]->[New]を選択すると"MySQL Account"ダイアログが現れます。EasyPHPのデフォルトではこのままOKをclickすれば認証されます。

sa2.png

続いて、"Open Database"ダイアログが表示されます。今回は、LigandInfoで公開されているsdfを利用し、データベースを構築したいと思います。"Create new"にligandinfoと入力し、Createボタンをclickします。そうするとSelect Databaseにligandinfoが表示されますので、選択してOpenボタンをクリックします。

sa3.png

Openボタンを押すと、"DataBase Viewer"が表示されますので、メニューから[Database]->[Append]を選択します。

sa4.png

そうすると"Append File"ダイアログが表示されますので、File/Dir.にLigandInfoから取得したChemBankのデータファイル名を入力します。ID FieldにはIDをCas Fieldはnoneを選択します。そしてProvider情報として今回は、ChemBankと入力し、最後にOKボタンをclickします。

sa5.png

これで、データベースへの登録作業がスタートします。登録が終了すると"DataBase Viewer"に化合物情報が表示され、データベースの構築ができたことになります。


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 10:25| Comment(0) | TrackBack(0) | JOELib | このブログの読者になる | 更新情報をチェックする

2006年07月15日

ScreeningAssistant

ScreeningAssistant(Orleans大学で開発されている)は、化合物データベースからHigh Throughput ScreeningやVirtual Screeningで利用する化合物郡を、様々なフィルタを用いて選択可能とするソフトウェアです。さらに、Chemical Spaceの可視化、重複分子の除去、反応性の高い官能基の認識等の機能ももっています。フィルタで用いる様々なDescriptorの計算には、JOELibを用い、化合物を管理するデータベースにはMySQLを用いています。

sa1.png

利用するとよくわかりますが、グラフがとてもきれいです。これはJFreeChartsJGoodiesを利用して描画されているようです。
非常に有益なソフトウェアだと思いますので、興味のある方はぜひお試しください。


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 05:37| Comment(0) | TrackBack(0) | JOELib | このブログの読者になる | 更新情報をチェックする

2006年07月14日

JOELibで塩・溶媒分子の除去

JOELibでは、CDKのConnectivityCheckerクラスに相当するクラスとして、ContiguousFragmentsクラスがあります。2つ以上の分子が1つのmolファイルに含まれる場合、以下のコードでそれらを分割できます。

 ContiguousFragments cf = new ContiguousFragments();
 JOEMolVector molv = cf.getFragmentation(mol);
 for(int i=0;i<molv.getSize();i++){
  JOEMol frag = new JOEMol(inType,outType);
  frag = molv.getMol(i);
  //処理
  ....
 }

先日のCDKの記事と同様に最も原子数の多い分子を選択すれば、ほとんどの場合、塩・溶媒分子などを除去できます。
幸いなことに、JOELibのJOEMolクラスにはstripSalts()メソッドが実装されており、このメソッドは上記の処理と同等な処理をしてくれますので便利です。


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 07:45| Comment(0) | TrackBack(0) | JOELib | このブログの読者になる | 更新情報をチェックする

2006年07月13日

CDKで塩・溶媒分子の除去

mol形式には一つの分子だけでなく下図のように2つ以上の分子(塩・溶媒分子など)が含まれているケースがよくあります。これはこれでいいのですが、ドッキングや物性計算を行う場合、塩・溶媒分子などは除去したいことがあります。

remove.png

先日、分子のfragmentationで利用したConnectivityCheckerクラスを用いれば、上記内容を実装できます。ただし、今回は、“mol形式に含まれる最も大きな分子を残して、あとは除去”というシンプルな手段で代替したいと思います。

fragmentationの時と同様にpartitionIntoMolecules(Molecule mol)メソッドを使って分割を行います。

 SetOfMolecules result = ConnectivityChecker.
  partitionIntoMolecules(mol);
 Molecule mols[] = result.getMolecules();


次に、Mwの方が適切かもしれませんが、もっとも多く原子を有している分子を検索します。

 int max_size=mols[0].getAtomCount();
 int max_mol=0;
 for(int i=1;i<mols.length;i++){
  if(max_size < mols[i].getAtomCount()){
    max_size = mols[i].getAtomCount();
    max_mol = i;
  }
 }

最後に、検索された分子のみを出力します。
 try {
  mw.writeMolecule(mols[max_mol]);
 } catch (Exception e1) {
 e1.printStackTrace();
 }

単純ですが、少し手を加えれば実際に利用できると思います。


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 07:52| Comment(0) | TrackBack(0) | CDK | このブログの読者になる | 更新情報をチェックする