2006年08月08日

PythonでOpenBabel その2

PythonからOpenBabelのクラスを利用して、簡易版obgrepを作成したいと思います。

simple_obgrep.pyはsdf形式のファイルを入力し、部分構造としてベンゼン(c1ccccc1)を含んでいる分子を検出するシンプルなプログラムです。

実行:
 $ python simple_obgrep.py > output.sdf

simple_obgrep.py:



banner_02.gif
人気ブログランキング(クリックして応援してね)



posted by わばのり at 07:40| Comment(0) | TrackBack(0) | OpenBabel | このブログの読者になる | 更新情報をチェックする

2006年08月07日

OpenBabelでsimilarity search

OpenBabelでは、3種類のfingerprintを利用してsimilarity searchを行うことができます。fingerprintの比較はTanimoto coefficientで行われています。

それでは、実際にsimilarity searchをしてみます。

 $ babel 'query.smi' 'mydata.sdf' -ofpt -xfFP2

 結果:
 > Tanimoto from first mol = 0.166667
 > Tanimoto from first mol = 0.285714
 > Tanimoto from first mol = 0.27027
 ・
 ・
 > Tanimoto from first mol = 0.0802469
 > Tanimoto from first mol = 0.149425
 > Tanimoto from first mol = 0.122449
 39 molecules converted

ここでは、query.smiとmydata.sdfに含まれる全ての分子との間のTanimoto coefficientが計算されています。-xfFP2はfingerprintにFP2を利用することを示しています。fingerprintの種類は以下のコマンドで知ることができます。

 > babel -F
 FP2 -- Indexes linear fragments up to 7 atoms.
 FP3 -- SMARTS patterns specified in the file patterns.txt
 FP4 -- SMARTS patterns specified in the file SMARTS_InteLigand.txt

patterns.txtとSMARTS_InteLigand.txtは、通常、/usr/local/share/openbabel/2.0.2などにインストールされていると思います。このファイルに独自にpatternを追加すればオリジナルのfingerprintで探索ができます。


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

2006年08月06日

Lazy Structure-Activity Relationships

Lazy Structure-Activity Relationships(lazar)という毒性予測ツールが公開されています。JOELibが利用されているとのことです。Web版も公開されているため試しに使ってみるにも便利だと思います。Rat,Mouse,Hamsterに対するCarcinogenicityなどの予測ができるようです。論文のpreprintもPDFで公開されていますので、内部的な処理も理解でき、勉強になると思います。


話は変わりますが、今日、“旅の指さし会話帳DS ドイツ”を買いました。少し遊んでみましたがなかなか面白いソフトです。ただ、私には実際に旅先でDSを相手に向けて質問することはできそうにありません(笑)。




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

2006年08月05日

PythonでOpenBabel

OpenBabelではSWIGを用いて、そのほとんどクラスをPythonから利用できるようにしています(Perlからも利用できるみたいです)。

OpenBabelを普通にインストールしただけではPythonから利用できないので、ちょっとしたインストール作業が必要です。

1. openbabel-2.0.1.tar.gzを展開したディレクトリに移動します。

 >cd $OpenBabelSrc/openbabel-2.0.2/scripts/python

2. ビルド、インストール作業を行います。

 >python setup.py build
 >python setup.py install

これで、PythonからOpenBabelのクラスが利用できるようになります。

3. 簡単なサンプルプログラムを動かしてみます。

 sample.py:
 import openbabel

 mol = openbabel.OBMol()
 conv = openbabel.OBConversion()
 conv.SetInAndOutFormats("smi","mdl")
 conv.ReadString(mol,"c1ccccc1O")
 print mol.NumAtoms()
 mol.AddHydrogens()
 print mol.NumAtoms()
 conv.WriteFile(mol,'phenol.mol')

実行:
 $python sample.py

出力:
 7 <-水素なしの時の原子数
 13 <-水素ありの時の原子数

出力ファイル(phenol.mol):

OpenBabel

13 13 0 0 0 0 0 0 0 0999 V2000
0.0000 0.0000 0.0000 C 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0
0.0000 0.0000 0.0000 O 0 0 0 0 0
0.0000 0.0000 0.0000 H 0 0 0 0 0
0.0000 0.0000 0.0000 H 0 0 0 0 0
0.0000 0.0000 0.0000 H 0 0 0 0 0
0.0000 0.0000 0.0000 H 0 0 0 0 0
0.0000 0.0000 0.0000 H 0 0 0 0 0
0.0000 0.0000 0.0000 H 0 0 0 0 0
1 6 2 0 0 0
1 2 1 0 0 0
1 8 1 0 0 0
2 3 2 0 0 0
2 9 1 0 0 0
3 4 1 0 0 0
3 10 1 0 0 0
4 5 2 0 0 0
4 11 1 0 0 0
5 6 1 0 0 0
5 12 1 0 0 0
6 7 1 0 0 0
7 13 1 0 0 0
M END

OpenBabelでは、まだ2次元座標の生成機能がないこともあり、xyzが全て0となります。
ScriptからOpenBabelを利用できるとコンパイル作業もなく便利ですね。


banner_02.gif
人気ブログランキング(クリックして応援してね)



posted by わばのり at 14:47| Comment(0) | TrackBack(0) | OpenBabel | このブログの読者になる | 更新情報をチェックする

2006年08月04日

Global Protein Surface Survey Plugin

PymolのpluginにGlobal Protein Surface Survey(GPSS)というpluginが公開されていますが、かなり便利だと思います。タンパク質のpocketやcavityの提示だけではなく、ligand binding surfaceやDNA binding surfaceなども提示してくれます。実際の計算はpluginで行っているのではなく、CASTpCSAのデータを利用しているようです。

インストールは簡単で、GPSSのサイトからGPSSpyMOL.pyを取得して、$PYMOLPATH/module/pmg_tk/startup/にコピーするだけです。

具体的には、以下の様なグラフィクスが描画され、pocketの形状がよく分かります。

plugin.PNG


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

2006年08月03日

CDKでfingerprint

CDKでは、Fingerprinterクラスを用いてfingerprintの生成を行います。先日メモしたJOELibでのfingerprint生成法とは異なり各ビットの特性を事前に定義する必要はありません。

CDKのfingerprint生成の概要ですが、まず、ある原子をrootとし、そこから任意の深さ(searchDepth)まで、DFS(Depth-First Search)を行い、経由した経路をSMILESなどの線形表記で文字列に置き換えます。次に、任意の最大値(size)を設定したハッシュ関数により文字列をハッシュ値に変換します。最後に、このハッシュ値に位置するビットを1にセットすることによりfingerprintを生成します。sizeとsearchDepthを適切に設定しないとハッシュ値の衝突や異なる分子で同じfingerprintが多発するという現象が生じます。

Fingerprinterクラスのデフォルトでは、size=1024, searchDepth=6となっています。JOELibで生成した葉酸のfingerprintと比較するためにsize=54, searchDepth=3としてfingerprintを生成したいと思います。

 mol = (Molecule)mr.read(new Molecule());
 BitSet finger = Fingerprinter.getFingerprint(mol,54,3);
 for(int i=0;i<54;i++){
  if(finger.get(i)){
   System.out.print("1");
 }else{
   System.out.print("0");
 }

folic.png
              ↓
Fingerprint:
111001011110111110111111111110111111101111101101111111


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

2006年08月02日

JOELibでfingerprint

JOELibを使って分子のfingerprintを作成したいと思います。fingerprintは以前pythonのcheminformaticsライブラリであるfrownsの記事でも取り上げました。JOELibでは、SSKey3DSクラスを用いてfingerprintを生成できます。生成されるfingerprintは54bitです。各bitが何を示すのかはココをご覧ください。

まずは、SSKey3DSクラスのgetDescInfo()メソッドを用いて、Descriptorの情報を調べます。

 SSKey3DS ssk = new SSKey3DS();
 DescriptorInfo di = ssk.getDescInfo();
 System.out.println(di.getName());
 System.out.println(di.getResult());

出力:
 Pharmacophore_fingerprint_1
 joelib.desc.result.BitResult

SSKey3DSはBitResultを返すことが分かりました。

それでは、実際にfingerprintの取得を行ってみます。fingerprintの計算は、calculate(JOEMol mol)メソッドで行います。戻り値であるDescResultはBitResultにキャストします。そして、maxBitSizeでfingerprintの長さ及びgetBinaryValue()メソッドで生成されたfingerprintを取得します。

 SSKey3DS ssk = new SSKey3DS();
 sreader.readNext(mol);
 DescResult result = ssk.calculate(mol);
 int fp_size = ((BitResult)result).maxBitSize;
 JOEBitVec br = ((BitResult)result).getBinaryValue();
 for(int i=0;i<fp_size;i++){
  if(br.get(i)){
   System.out.print("1");
  }else{
   System.out.print("0");
  }
 }

最後に、例として葉酸のfingerprintを生成したいと思います。

folic.png
               ↓
Fingerprint:
111001110000101100100010000100101010001011111111111111

以前メモしたScreeningAssistantのdiversity計算には、このSSKey3DSクラスで作成したfingerprintが利用されているようです。


banner_02.gif
人気ブログランキング(クリックして応援してね)



posted by わばのり at 08:48| Comment(0) | TrackBack(0) | JOELib | このブログの読者になる | 更新情報をチェックする

2006年08月01日

CDKでASAの計算

Acessible Surface Area(ASA)の計算を行ってみます。CDKでは、NumericalSurfaceクラスを用いてASAの計算ができます。デフォルトの溶媒半径は1.4Åです。一般的に解析的な計算手法と比較して精度は落ちますが、計算速度が速いという特徴があります。

まずは、AtomContainerを引数にしてインスタンスを作成します。

 NumericalSurface ns = new NumericalSurface(mol);

ASAの計算は、calculateSurface()メソッドで実施します。

 ns.calculateSurface();

最後に、getTotalSurfaceArea()メソッドによりASAを出力します。

 System.out.println("Total ASA: "+ns.getTotalSurfaceArea());

原子ごとのASAがほしい場合は、getSurfaceArea(int atomIdx)メソッドを用います。

 for(int i=0;i<mol.getAtomCount();i++){
 try {
  double atom_asa = ns.getSurfaceArea(i);
  System.out.println("Atom "
     + (i+1)
     + " "+atom_asa);
 } catch (CDKException e) {
  e.printStackTrace();
 }

例として、ALAのASAを計算してみます。

ASA.png

出力:
Total ASA: 371.2141660913026
Atom 1 19.422585694045885
Atom 2 5.849449171443343
Atom 3 30.096359446619783
Atom 4 12.202076766236653
Atom 5 65.96169616886122
Atom 6 47.21116324776361
Atom 7 30.572670707796863
Atom 8 26.5907020193718
Atom 9 16.790634636192344
Atom 10 23.64846959959106
Atom 11 31.103599866253536
Atom 12 24.997914544001777
Atom 13 36.766844223124735


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

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。