2007年05月29日

Structure-CDK

Structure-CDKを使って分子を描画してみます。Structure-CDKではSwingPainterというとても便利なクラスがあります。

 JFrame frame = new JFrame();
 frame.setTitle("TestStructCDK");
 frame.setSize(400,400);
 Container con = frame.getContentPane();

 SwingPainter painter = new SwingPainter();
 painter.setAtomContainer(mol);
 con.add(painter);
 frame.setVisible(true);

こんな感じで表示されます。

Structure-CDK_exp.png




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

2007年05月28日

CDKのRenderer2DModelクラス

CDKのRenderer2DModelクラスを使って、分子の描画を行ってみます。まずは、JPanelクラスを継承したTestRender2DPanelを作ります。

TestRender2DPanel.java


描画用のPanelができれば後は簡単です。ここでは、JFrameにgetContentPane()を使ってTestRender2DPanelを追加しています。

 JFrame frame = new JFrame();
 frame.setTitle("Render2DPanel");
 frame.setSize(400,400);
 Container con = frame.getContentPane();
 TestRender2DPanel r2dp = new TestRender2DPanel(mol);
 con.add(r2dp);
 frame.setVisible(true);

こんな感じで表示されます。

Render2D_exp.png

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

2007年05月21日

SD Fieldsデータの取得

SD Fileでは、[Data_Header]、[Data]の組み合わせで、任意のデータが付加されていたり、また、付加したりすることができます。
CDKでは、これらデータを全て取得したい場合は、
 
 Hashtable ht = mol.getProperties();

特定の[Data_Header]のみ取得したい場合は(ここでは、"descriptors_mw")、

 String data = (String)mol.getProperty("descriptors_mw");

さらに、Tile行を取得したい場合は、

 String data = (String)mol.getProperty("Title");

のようにして処理できます。

また、データを付加したい場合は、

 ht.put("TEST DATA","9999.9");     
 mw.setSdFields(ht);

となります。


TestIteratingMDLReader.java


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

2007年05月17日

CDK-Taverna

CDK-Tavernaは、CDKをTavernaから利用するためのpluginです。通常はスクリプトで書くような処理を、ワークフローを使うことにより簡便に処理することができます。プログラム全体を視覚的に理解できるところが気に入っています。

CDK-Tavernaを使ってSD FileをSmilesに変換してみます。ワークフローは下のようになります。
Diagram2.png
出力はこんな感じです。

CDK-Taverna-result.png
Tavernaの使い方は、とても分かりやすいので、複雑なワークフローの作成も楽だと思います。
それとTavernaからBiomobyやSoaplabなども使えるみたいです。

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

2006年11月08日

CDKでHOSEコード

HOSE(Hierarchical Organization of Spherical Environments)コード[1]は、部分構造を表現するコードの1つです。ある原子を中心に球形の層を第1層、第2層、第3層...と考慮することによりコード生成を行います。

CDKでは、HOSECodeGeneratorクラスを用いることにより、HOSEコードを生成させることができます。この例では、Caffeic acidを用い、9番目の原子を中心に第3層までコード化しています。

 HOSECodeGenerator hcg = new HOSECodeGenerator();
 try {
  String HOSE_CODE = hcg.getHOSECode(mol, mol.getAtomAt(9), 3);
  System.out.println(HOSE_CODE);
 } catch (CDKException e) {
  e.printStackTrace();
 }

出力(HOSEコード):
 C-2;=CC(C,=OO/=CC,,/)

HOSECode.png

HOSEコードは、C13 NMRスペクトルの予測に用いられていることで有名ですね。

[1] Anal. Chim. Acta. (1978) 103:355-365


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

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

2006年11月06日

Topological Polar Surface Area

Topological Polar Surface Area (TPSA)は、PSAを高速に計算するための手法です。通常、PSAの計算は、分子の適切な3次元構造を生成させ、surface areaを計算し、PSAを算出するという手順を踏みます。しかしながら、膨大な化合物ライブラリを処理するには、計算時間が問題になったり、また、分子の配座によってPSAが異なるということも留意しておく必要があります。

概要になりますが、TPSAでは、以下の様なシンプルな計算式でPSAを計算しています。

 PSA = (fragment-1の数)*(fragment-1のPSAへの寄与値) + ....
       +(fragment-Nの数)*(fragment-NのPSAへの寄与値)

ここで、fragment-XはTPSAで定義されているfragmentの種類を示しています。また、PSAへの寄与値は、最小自乗法により決定されたものです。詳細は、以下の原著に示されております。

 J. Med. Chem. 2000, 43, 3714-3717.

具体的には、化合物の中に、どのfragmentがいくつ含まれているかを検出し、上記式を適用することにより、PSAを求めることができます。

以上のことから、TPSAは高速かつ3D配座生成を必要としないという大きなメリットをもっていることが分かります。

CDK News Volume 3/2 September 2006, には、CDKのTPSA Descriptorの精度評価を行った論文が掲載されております。特に興味をもったのは、この論文の著者がTPSAの著者と行ったpersonal communicationを引用しているところでした。TPSAのように回帰的な手段を用いた手法では、定義されているfragmentの種類やその寄与値の精度を把握しておくことは重要だと思います。このあたりのディスカッションがとても参考になりました。


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

2006年09月21日

The Molecular Biology Toolkit (MBT)

The Molecular Biology Toolkit (MBT)は、タンパク質の構造表示や解析などを行うことのできるJavaのクラスライブラリです。また、MBTを使ったUser Applicationsもいくつか紹介されています。APIを見ると、便利そうなクラスが多くありますし、かなり有益なライブラリではないでしょうか。


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

2006年09月20日

CDKでXLogPの計算

CDK(cdk-20060714)でXLogPの計算を行ってみます。手順は以下の様になります。

 1. 分子の読み込み
 2. 水素原子の付加
 3. XLogPの入力パラメータ設定
 4. XLogPの計算

水素原子は、HydrogenAdderクラスのaddExplicitHydrogensToSatisfyValency(mol)メソッド等を使って付加する必要があります。また、XLogPの入力パラメータには、checkAromaticityとsalicylFlagの2つがあります。これらはパラメータは、getParameterNames()メソッドにより知ることができます。

XLogP.java:


例として、フェノールのXLogPを計算してみます。
実行結果:
XLogP: 1.616

試しに、checkAromaticityをfalseとして計算してみます。
実行結果:
XLogP: 0.946

値がかなり変わりますね。
通常は、checkAromaticityはtrueでいいかと思います。


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

2006年09月15日

Ruby Chemistry Development Kit (RCDK)

Ruby Chemistry Development Kit (RCDK)は、JRubyからCDKを利用するのではなく、Ruby Java Bridge (RJB)を使ってCDKを利用可能としています。これによっていくつかの利点があるそうです。詳細は以下の記事をご覧ください。

 http://depth-first.com/articles/2006/09/14/cdk-the-ruby-way

RCDKを使って何か作ってみたくなりますね。


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


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

2006年09月05日

CDKとJOELibの連携 その2

CDKでorg.openscience.cdk.libio.joelib.Convertorクラスを用いるためには、joelib.jarを含めてコンパイルする必要があります。

基本的なコンパイルの手順は、以下のとおりです。

1. cdk-source-20060714.tar.gzを展開する。

2. コンパイルの実行:

 cdk-source-20060714> ant dist-large

この操作で、cdk-source-20060714\dist\jarの下にcdk-svn-2006XXXX.jarができます。

joelib.jarを含めてコンパイルするためには、cdk-source-20060714\jar\libio下にjoelib.jarを置いて、コンパイルするだけでOKだと思ったのですが、コンパイルできませんでした。

 cdk-source-20060714> ant info

によると、"JOELib found: true" になっているので、認識はされているはずなのですが.... 私はantのbuild.xmlをまともに理解できないため、ここで断念しました。

とりあえず、Convertorクラスを使うために、以下の手順を取りました。

1. cdk-source-20060714\src\org\openscience\cdk\libio\joelibの下にConvertor.javaがあるので、適当なフォルダにコピーする(ここではC:\work)。

2. クラスパスにcdk-20060714.jarとjoelib.jarを加えて、Convertor.javaのコンパイルを実行。

 C:\work> javac Convertor.java
 
ただし、Convertor.javaを以下のように修正した。

36行目:
org.openscience.cdk.Element e = ef.getElement(atom.getAtomicNum());
-> org.openscience.cdk.Element e = (Element)ef.getElement(atom.getAtomicNum());

173行目:
convertedBond.setBegin(convert(bond.getAtomAt(0)));
-> convertedBond.setBegin(convert((Atom)bond.getAtomAt(0)));

174行目:
convertedBond.setEnd(convert(bond.getAtomAt(1)));
-> convertedBond.setEnd(convert((Atom)bond.getAtomAt(1)));

252行目:
converted.addAtom(convert(mol.getAtomAt(i), coordType));
-> converted.addAtom(convert((Atom)mol.getAtomAt(i), coordType));

import org.openscience.cdk.Element の追加

この操作で、Convertor.classができる。

3. Convertor.classをcdk-20060714.jarに加える。

 > mkdir tmp
 > copy cdk-20060714.jar tmp
 > cd tmp
 > jar xvf cdk-20060714.jar
 > mkdir org\openscience\cdk\libio\joelib
 > copy C:\work\Covertor.class org\openscience\cdk\libio\joelib
 > rm cdk-20060714.jar
 > jar cvf cdk-new.jar *

jarのオプションを使えば、もう少しスマートな方法があると思いますが、今回はこのように行いました。

以上の操作で作成されたcdk-new.jarを用いれば、Convertorクラスが利用できます。


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

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

2006年09月03日

CDKのPathToolsクラス

CDKのPathToolsクラスはmolecular graphsを処理するために利用できる便利なクラスです。今回は、このクラスのメソッドの1つであるgetAllPathsメソッドを利用して、任意の原子Aから原子Bまでの全ての経路を列挙させてみます。

例として、以下の分子の原子6から原子10までの全経路を列挙してみます。
path.png

 IAtom atomA = mol.getAtomAt(5);
 IAtom atomB = mol.getAtomAt(9);
 List all_path = PathTools.getAllPaths(mol,atomA,atomB);
 for(int i=0;i<all_path.size();i++){
  List path = (List)all_path.get(i);
  for(int j=0;j<path.size();j++){
   IAtom atom = (IAtom)path.get(j);
   System.out.print(mol.getAtomNumber(atom)+1+",");
  }
 System.out.println();
 }

 実行結果:
 6,4,7,1,8,2,10,
 6,4,7,1,8,2,3,9,5,10,
 6,4,3,9,5,10,
 6,4,3,2,10,

このような経路情報は、descriptorの計算などに利用できます。また、このクラスのcomputeFloydAPSP(int[][] C)メソッドを用いれば、全ての原子間の最短経路長が取得でき便利です。


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




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

2006年09月02日

CDKとJOELibの連携

CDKではorg.openscience.cdk.libio.joelib.Convertorクラスを用いることにより、CDKのMoleculeをJOELibのJOEMolへと変換、及びその逆の変換も可能となります。ただし、binary配布にはこのクラスは含まれていませんので、sourceからjoelib.jarを含めてコンパイルする必要があります。

実際に、Molecule->JOEMol, JOEMol->Moleculeへと変換を行ってみます。

cdk_joelib.java:


変換といっても基本的には、atomとbondをaddしているだけですので、自分でConvertorクラスを作成してもいいと思います。


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

2006年09月01日

CDKでねじれ角の計算

CDKで結合原子距離、結合角、ねじれ角の計算を行ってみます。これらの値は、分子力場計算には必須ですね。CDKでは、ForceFieldToolsクラスを用いてこれらの値を取得できます。


 GVector gv = ForceFieldTools.getCoordinates3xNVector(mol);

 double bond_length = ForceFieldTools.distanceBetweenTwoAtomsFrom3xNCoordinates(gv, 0, 1);
 double angle1_3 = ForceFieldTools.angleBetweenTwoBondsFrom3xNCoordinates(gv, 0, 1, 2);
 double torsion_angle = ForceFieldTools.torsionAngleFrom3xNCoordinates(gv, 0, 1, 2, 3);

 System.out.println("Bond length: "+bond_length);
 System.out.println("Angle1_3: "+angle1_3);
 System.out.println("Torsion angle "+Math.toDegrees(torsion_angle));

tor.png

結合角はdegreeで返ってきますが、ねじれ角はradianで返ってくるので注意が必要です。


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

2006年08月31日

CDKでTanimoto coefficient

cdk-20060714には、新たにorg.openscience.cdk.similarityパッケージが追加されています。この中にあるTanimotoクラスを用いて、2つのFingerprintからTanimoto係数を計算してみます。

 Fingerprinter fp = new Fingerprinter();
 try {
  BitSet fing1 = fp.getFingerprint(mol1);
  BitSet fing2 = fp.getFingerprint(mol2);
  float dist = Tanimoto.calculate(fing1,fing2);
  System.out.println("Tanimoto Coefficient = " + dist);
 } catch (Exception e) {
  e.printStackTrace();
 }

注意が必要なところは、cdk-20050826では、FingerprinterクラスのgetFingerprint(AtomContainer ac)メソッドはstaticであったのに対し、cdk-20060714ではstaticではないところです。Tanimoto係数自体は自分で書いても簡単に実装できますが、今後org.openscience.cdk.similarityパッケージに様々な係数が追加されることを期待しています。


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

2006年08月29日

CDKでSSSR その2

前回、CDKを用いてSSSRの検出を行い、各ringをsdf形式で保存しました。今回は、以下のように結合しているring同士は1つのfragmentとして取り扱い、sdf形式で保存したいと思います。

sssrpa.png

まずは、SSSRFinderクラスのfindSSSR()メソッドを用いて、SSSRの検出を行います。SSSRはIRingSetとして取得します。ここまでは、前回と同じです。

 SSSRFinder sssrf = new SSSRFinder(mol);
 IRingSet rs = sssrf.findSSSR();

次にRingPartitionerクラスのpartitionRings(IRingSet ringSet)メソッドを用いて、結合しているring同士を1つのRingSetとし、Vectorで結果を取得します。

 Vector rings = RingPartitioner.partitionRings(rs);

最後に、convertToAtomContainer(IRingSet ringSet)メソッドを用いて、RingSetをAtomContainerへと変換し、ファイル出力します。

 for(int i=0;i<rings.size();i++){
  IRingSet crs = (IRingSet)rings.get(i);
  IAtomContainer ac = RingPartitioner.convertToAtomContainer(crs);
  try {
   mw.write(new Molecule(ac));
  } catch (CDKException e) {
   e.printStackTrace();
  }
 }


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

2006年08月28日

GroovyでCDK

Groovyは“Javaのためのスクリプト言語”ともいえるスクリプト言語らしく、文法自体もJavaに類似していることから、Javaユーザであれば、容易にGroovyを利用できると思います。PythonやRubyは使えないけど、スクリプトでCDKを利用したいというJavaユーザの方にお勧めです。

インストール:
@Groovyのダウンロード
Groovyを以下のサイトからダウンロードします。
http://groovy.codehaus.org/Home
今回は、groovy-1.0-jsr-06.zipを取得し、Windows上の適当なフォルダ下に展開します。

A環境変数の設定1
以下の3つの環境変数を適切に設定してください。
JAVA_HOME
GROOVY_HOME
PATH (%GROOVY_HOME%binを追加する)

B環境変数の設定2
環境変数CLASSPATHにcdk-20060714.jarを追加。

これで、インストールは完了です。
例として、先日作成したSSSRのsdf出力プログラムをGroovyで作成してみます。

sssr.groovy:


実行:
> groovy sssr.groovy input.mol output.sdf

ずいぶんプログラムが短くなりました。Javaとほとんど同じ感覚でプログラムできますね。


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

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

2006年08月26日

JRubyでCDK

CDKのmailing listで知ったのですが、JRubyでCDK及びOctetを用いたソースコードが公開されています。

(CDK)
http://depth-first.com/articles/2006/08/24/scripting-cdk-with-jruby

(Octet)
http://depth-first.com/articles/2006/08/23/scripting-octet-with-jruby

恥ずかしながらJRuby知りませんでした。
CDK利用できるのですね。すばらしい!!


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

2006年08月25日

CDKでSSSR

CDKでSmallest Set of Smallest Rings(SSSR)の検出を行い、各ringをsdf形式で保存したいと思います。

まずは、SSSRFinderクラスのfindSSSR()メソッドを用いて、SSSRの検出を行います。SSSRはIRingSetとして取得します。

 SSSRFinder sssrf = new SSSRFinder(mol);
 IRingSet rs = sssrf.findSSSR();

次に、各ringをIRingSetから取り出す作業を行います。
IRingSetはISetOfAtomContainersのサブインターフェースです。ここでは、ISetOfAtomContainersのメソッドであるgetAtomContainer(int number)とgetAtomContainerCount()を用いて各ringを取り出し、ファイル出力を行っています。

 for(int i=0;i<rs.getAtomContainerCount();i++){
  IAtomContainer ac = rs.getAtomContainer(i);
  try {
   mw.write(new Molecule(ac));
  } catch (CDKException e) {
   e.printStackTrace(); 
  }
 }

以下のように各ringに分割されたものがsdf形式で出力できます。

sssr.png
(今回用いたcdkはcdk-20060714です)


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

2006年08月19日

CDK API ドキュメントの構築

CDKのAPIドキュメントの構築方法をメモしたいと思います。といいましても、たった一行なのですが.... ただ、antは事前にインストールする必要があります。

CDKのルートディレクトに移動して、以下のコマンドを実行します。

 > ant -f javadoc.xml

実行後、doc\api以下にHTMLファイルが生成されています。index.htmlを見るといつもCDKのサイトで見ているAPIドキュメントが構築されています。

cdk_api.PNG

ネット上で閲覧できない古いバージョンのAPIを調べたいときにも役にたちますね。


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

2006年08月14日

CDKでMDL形式の読み込み その2

SDF形式では、'M END'と'$$$$'の間に様々な情報が付加されていることがあります。例えば以下のような情報が挙げられます。

....
M END
> <CAS_Number>
XXXXXX

> <Catolog_Number>
XXXXXX

> <logP>
XXX
$$$$

CDKではこれら付加情報も分子情報と共に読み込んでいますので、次のような方法で具体的な値を得ることができます。

  fr = new FileReader(new File(filename));
  imr = new IteratingMDLReader(fr,
     DefaultChemObjectBuilder.getInstance());
  while (imr.hasNext()){
   mol = (IMolecule)imr.next();
   String mol_id = (String)mol.getProperty("CAS_Number");
   String cat_num = (String)mol.getProperty("Catalog_Number");
   String logP = (String)mol.getProperty("logP");
   System.out.println(mol_id+" "+cat_num+" "+logP);
  }

内部的にはHashtableに'CAS_Number'はキー、'XXXXXX'は値として格納されています。getProperties()メソッドを用いれてば、一度に全てのキーと値の情報を取得することができ便利です。

 Hashtable ht = (Hashtable)mol.getProperties();
 System.out.println(ht);


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

広告


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

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

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


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。