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月30日

EclipseでGroovy

GroovyのEclipse Pluginのインストールメモです。

Eclipse Pluginのインストール:
1. Eclipse(3.2)を起動し、[Help]→[Software Updates]→[Find and Install]

2. Search for new features to installを選択し、Nextボタンを押す。

3. New Remote Siteボタンを押し、新しく開くダイアログに以下の情報を入力し、Finishボタンを押す。

Name : Groovy Site
URL: http://dist.codehaus.org/groovy/distributions/update/

4. Groovy Siteをチェックし、Nextボタンを押す。

5. 後は、ライセンスに関する質問などに答え、進んでください。

実行例:
1. [File]→[New]→[Project]でJava Projectを選択しNextボタンを押す。

2. Project name(ここでは、TestGrPro)を入力しFinishボタンを押す。

3. Package Explorer内のTestGrProを選択し、右クリックする。そして、[New]→[Other]→[Groovy]→[Groovy Class]を選択し、Nextボタンを押す。

4. Name:(ここでは、TestGr)を入力し、Finishボタンを押す。そうするとTestGr.groovyファイルに以下のようなclassの雛形が作成されます(青字は私が追加したもの)。

 class TestGr {

  static void main(args) {
   print "Hello World!"
  }

 }

5. [Run]→[Run]→[Groovy]を選択し、Newボタンを押す。

6. Main classをSearchし、Runボタンを押す。

 Hello World!

と無事実行されました。


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












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

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月23日

MMTK: Normal Mode Calculation

MMTKを使ってNormal Modeの計算を行ってみます。Energy Minimizationの後、以下の作業で計算できます。

 #Normal Modes
 modes = NormalModes(universe)

 #Print mode
 for mode in modes:
  print mode

 #View
 view(modes[6])

ここでは、以下のモジュールのimportが必要となります。

 from MMTK.NormalModes import NormalModes

最後のviewで各モードを分子Viewerで視覚化でき、とても便利なのですが、Windows上で実施する場合、いくつか注意点があります。まずは、環境変数PDBVIEWERに分子Viewerの名前を指定します。現在は、アニメーション表示可能なViewerとしてXmolとVmdをサポートしているようです。ここでは、vmdと設定します。そうすると、MMTKは、Tempフォルダ下にvmd script、pdb、dcdの3つのファイルを出力します(Tempフォルダは、環境変数で各自設定されている場所です。通常はLocal Settingsフォルダ下だと思います)。

うまく動作すれば、vmdが自動起動され、vmd scriptを読み込み、アニメーション処理となるのでしょうが、私の環境?では、vmdが一瞬起動し、終了してしまいます。vmd scriptを見るとファイルの指定が以下のようになっていました。

 c:\temp\tmpbjpved

このファイル指定を以下のように変更します。

 c:\\temp\\tmpbjpved

変更後、vmdを立ち上げ、プロンプトからscriptを実行すれば、アニメーションが無事、表示されます。


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

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

2006年08月21日

MMTK: Energy Minimization その2

Energy Minimizationのパラメータはsteps以外にもstep_sizeとconvergenceがあります。それぞれdefault値は以下のとおりです。

step_size = 2 pm
convergence = 0.01 KJ/mol/nm

MMTKでは単位の記述はUnitsモジュールを利用すると便利です。

 from MMTK import Units

具体的にEMのパラメータ設定は、以下のように記述することができます。

 minimizer(steps = 200, step_size = 0.04*Units.Ang, convergence = 0.02*Units.kJ/(Units.mol*Units.nm))


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

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

2006年08月20日

MMTK: Energy Minimization

MMTKを使ってEnergy Minimizationを行ってみます。以下にそのコードを示します。

EM.py


それでは、順番にみていきます。

UniverseはMMTKにおけるシミュレーションの基盤となるクラスです。topology、boundary condition, force fieldなどの設定を行うことができます。

 universe = InfiniteUniverse(Amber94ForceField())

分子(タンパク質)の読み込みは、Proteinクラスで行いました。'bala1'は、MMTKにはじめから含まれているもので、その実体は、$Python23\Lib\site-packages\MMTK\Database\PDB\bALA1.pdbです。ファイル名を指定してPDBを入力することもできます。

 universe.protein = Protein('bala1')

今回は、Energy Minimizationを2つの最適化手法で実施しています。
まずは、SteepestDescent(SD)です。StandardLogOutputでPotential Energy等の情報が50step毎に表示されます。SDのステップ数は200です。

 minimizer1 = SteepestDescentMinimizer(universe, actions =   [StandardLogOutput(50)])
 minimizer1(steps = 200)

次に、ConjugateGradientで最適化です。SDと使い方はほぼ同じです。

 minimizer2 = ConjugateGradientMinimizer(universe, actions = [StandardLogOutput(50)])
 minimizer2(steps = 100)

最後に、EM後の構造を表示します。拡張子(.pdb)と関連付けされたソフトウェアが起動し、構造を表示させます。

 view(universe)

プログラムを実行すると、以下のような結果が表示されると思います。

SteepestDescent
Step 0
Potential energy: -80.205828, Gradient norm: 809.115225

Step 50
Potential energy: -110.589675, Gradient norm: 62.273830

Step 100
Potential energy: -111.893701, Gradient norm: 64.541604

Step 150
Potential energy: -112.424998, Gradient norm: 67.033451

Step 200
Potential energy: -112.810568, Gradient norm: 62.190661

ConjugateGradient
Step 0
Potential energy: -112.810568, Gradient norm: 62.190661

Step 50
Potential energy: -116.103856, Gradient norm: 16.267230

Step 100
Potential energy: -116.504514, Gradient norm: 21.127653



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


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

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月18日

Open Babel GUI

OpenBabelのWindows GUI版を使ってみました。なかなか使い勝手もよく便利だと思います。そういえば、BabelWinというGUI版のbabelもありましたね。私はコマンドライン版に慣れきってしまっているため使うことはほとんどないですが、GUI版は、バイナリで配布されているため、インストール作業も必要なく便利なのは確かだと思います。

openbabelgui.png


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

2006年08月17日

MMTKのインストール

The Molecular Modelling Toolkit (MMTK)は、分子モデリングに関連する計算を行うためのPythonの拡張ライブラリです。MMTKは私にとって、Pythonを覚えるきっかになったライブラリです。ここ3-4年全く使っていなかったのですが、最近?Windows版とMacOS X版のbinary installersが公開されたようです。はじめはWindows版と言ってもCygwin上で動くのかなと思ったのですが、そうではありませんでした。MMTKは、MD,MMを手軽に体験できる便利なツールですので、興味のある方はぜひ使ってみてください。

それでは、Windows(XP)にMMTKをインストールします。

1. Pythonのインストール
 Windows版のPython 2.3.4日本語環境用インストーラを利用します。

2. pywin32インストール
 pywin32-209.win32-py2.3.exeをインストールします。

3. netCDFのインストール
 NetCDF 3.6.1のprecompileされたWindows DLLを取得し、展開後、ファイルをC:\WINDOSW\SYSTEM32以下にコピーします。

4. Numericのインストール
 Numeric-24.2.win32-py2.3.exeをインストールします。

5. ScientificPythonのインストール
 ScientificPython-2.4.6.win32-py2.3.exeをインストールします。

6. MMTKのインストール
 やっとたどり着きました。MMTK-2.4.4.win32-py2.3.exeをインストールします。

注意すべきところは、各ソフトウェアのバージョンで、組合せによってはMMTKが動作しない場合があります。今のところは、私の環境では、上記バージョンの組合せで動作しています。MMTKのサイトにExamplesがありますので、まずはこれを利用して動作確認することができます。


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







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

2006年08月16日

PyDev & Frowns

これまでは、emacsやIDLEを利用してPythonのプログラムを書いていましたが、EclipseのプラグインであるPyDevが便利だと聞いたので試してみました。

@インストール
 http://sourceforge.net/projects/pydev/ からorg.python.pydev.feature-1_2_2.zipを取得して、適当な場所で展開します。そして、featuresとplugins下のファイルをeclipseのfeaturesとplugins下にコピーします。

Aインストールの確認
 eclipseを起動し、[Help]→[About Eclipse SDF]→[Plug-in Details]でpydevがインストールされているか確認できます。

B設定
 [Window]→[Preferences]で左側のTreeから[Pydev]→[Interpreter Python]を選択します。そして、右上の[New]ボタンを押してPythonの実行ファイルの場所を設定します。あとは、通常通り[File]→[New]→[Project]でPydev Projectが作成できます。

試しにfrownsをimportして使ってみました。

eclip.png

おお!コード補完されました。


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

2006年08月15日

BioMOBY

MOBYのクライアントの1つであるRemoraを使ってみました。通常では様々なWebサービスを個々に使って解析しなければならないタスクを、下図のようなワークフローを構築することにより、一度に解析することができます。

mocli.png

MOBYのように複数のWebサービスを連携して利用できる仕組みがあるとRemoraのFrequently Asked Workflows (FAW)のように利用頻度の高いワークフローをテンプレートとして再利用しやすいですし、研究の効率化にも繋がると思います。

ただ、サイトを見る限りでは、MOBYを使いこなすのは、私には大変そうだなという印象を受けました。日本にもユーザーグループが設立されているようですし、使いこなせれば便利なのは間違いないと思いますので、これから学んでいこうと思ってます。


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


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

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 | このブログの読者になる | 更新情報をチェックする

2006年08月13日

CDKでMDL形式の読み込み

CDKにおけるMDL形式(mol,sdf)ファイルの入力方法をメモしたいと思います。CDKのバージョンは、cdk-20060718を用いて行います。

まずは、1分子のみ(mol形式)の入力方法です。分子の入力確認をするために、とりあえずは、getAtomCount()メソッドで原子数を表示させています。
 
 fr = new FileReader(new File(filename));
 mr = new MDLReader(fr);
 mol = (IMolecule)mr.read(new Molecule());
 //原子数の表示
 System.out.println(mol.getAtomCount()); 

次は、複数の分子が入っているファイル(sdf形式)から一分子づつ入力する方法です。

 fr = new FileReader(new File(filename));
 imr = new IteratingMDLReade(fr,
        DefaultChemObjectBuilder.getInstance());
 while (imr.hasNext()){
  mol = (IMolecule)imr.next();
  //原子数の表示
  System.out.println(mol.getAtomCount());
 }

一分子づつ入力しますので、大規模なsdf形式の入力に適しています。

最後は、sdf形式を一度に入力する方法です。

 fr = new FileReader(new File(filename));
 mr = new MDLReader(fr);
 chemfile = (IChemFile)mr.read(new ChemFile()); ←@
 //原子数の表示
 for(int i=0;i<chemfile.getChemSequenceCount();i++){
  IChemSequence cs = chemfile.getChemSequence(i);
   for(int j=0;j<cs.getChemModelCount();j++){
    IChemModel cm = cs.getChemModel(j);
    ISetOfMolecules sms = cm.getSetOfMolecules();
     for(int k=0;k<sms.getMoleculeCount();k++){
      IMolecule mol = sms.getMolecule(k);
      System.out.println(mol.getAtomCount());
     }
   }
 }

上記ソースの@の行のみで複数の分子(sdf形式)を一度に入力しています。入力された各分子の原子数を知るためには、"//原子の表示" 以下の作業が必要となります。ChemSequenceクラス, ChemModelクラス, Moleculeクラスの関係が理解できると思います。


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

2006年08月12日

CDKで隣接・結合行列の取得 その2

先日の記事では、隣接・結合行列を取得するためにAdjacencyMatrixクラスとConnectionMatrixクラスを用いました。CDKでは、これらクラスを利用しなくても簡単に隣接・結合行列を作成できます。ソースコードを載せておきますので、メソッドの使い方等の参考になればと思います。

Matrix.java



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

2006年08月11日

CDKで隣接・結合行列の取得

隣接行列と結合行列は、計算機上での分子の表現の基礎ともいえる重要な表現方法です。今回はCDKを用いてこれら行列の取得の仕方をメモしたいと思います。

CDKではorg.openscience.cdk.graph.matrixパッケージに含まれるAdjacencyMatrixクラスConnectionMatrixクラスを用いて取得できます。

 System.out.println("AdjacencyMatrix");
 int am[][] = AdjacencyMatrix.getMatrix(mol);
 for(int i=0;i<am.length;i++){
  for(int j=0;j<am[i].length;j++){
   System.out.print(am[i][j]+" ");
  }
  System.out.println();
 }

 System.out.println("\nConnectionMatrix");
 double cm[][] = ConnectionMatrix.getMatrix(mol);
 for(int i=0;i<cm.length;i++){
  for(int j=0;j<cm[i].length;j++){
   System.out.print(cm[i][j]+" ");
 }
  System.out.println();
 }

例として、以下の構造を入力してみます。
mat.png
結果:
AdjacencyMatrix
0 0 0 1 1 1
0 0 0 0 0 1
0 0 0 0 0 1
1 0 0 0 0 0
1 0 0 0 0 0
1 1 1 0 0 0

ConnectionMatrix
0.0 0.0 0.0 1.0 2.0 1.0
0.0 0.0 0.0 0.0 0.0 1.0
0.0 0.0 0.0 0.0 0.0 1.0
1.0 0.0 0.0 0.0 0.0 0.0
2.0 0.0 0.0 0.0 0.0 0.0
1.0 1.0 1.0 0.0 0.0 0.0

隣接行列は、原子同士が結合していれば1を、そうでなければ0を当てはめます。一方、結合行列は、原子同士が結合していれば結合次数を、そうでなければ0を当てはめます。結合行列がdouble型の要素をもつ理由は、aromatic bondなどを1.5と表記したいためです。


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

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

2006年08月10日

JOELibでHashcodeの生成

JOELibのAbstractDatabaseクラスを用いたHashcodeの生成についてメモしたいと思います。このクラスにはHashcodeを生成するために以下の3つのメソッドが用意されています。

 getHashcode(JOEMol mol)
 getSMILESHashcode(JOEMol mol)
 getMoleculeHASH(JOEMol mol)

ただし、最後のメソッドは上2つのメソッドの結果を同時に返すメソッドですので実質的には2種類のHashcodeを得ることができます。
それでは、getHashcodeとgetSMILESHashcodeの違いを具体的に見てみます。入力した分子構造は、L体、D体のアラニンの部分構造です。

 JOEMol mol1 = new JOEMol();
 JOEMol mol2 = new JOEMol();
 String smiles1 = "CC(=O)[C@H](C)N";
 String smiles2 = "CC(=O)[C@@H](C)N";
 JOESmilesParser.smiToMol(mol1, smiles1, "mol1");
 JOESmilesParser.smiToMol(mol2, smiles2, "mol2");
 
 int hashcode1 = AbstractDatabase.getHashcode(mol1);
 int hashcode2 = AbstractDatabase.getHashcode(mol2);

 int smileshash1 = AbstractDatabase.getSMILESHashcode(mol1);
 int smileshash2 = AbstractDatabase.getSMILESHashcode(mol2);

 System.out.println("getHashcode()");
 System.out.println(hashcode1);
 System.out.println(hashcode2);

 System.out.println("getSMILESHashcode()");
 System.out.println(smileshash1);
 System.out.println(smileshash2);

結果:
getHashcode()
-715427484
-715427484

getSMILESHashcode()
1803284766
1004112044

getHashcode()ではD体、L体の区別ができないないのに対し、getSMILESHashcode()では区別されています。大きな違いはここにあるのですが、どちらのメソッドも入力する分子の番号付けが変わると異なるHashcodeが生成されてします。したがって、Morgan法などで再番号付けされた分子構造を入力しなければ特定の分子に対してユニークなHashcodeを得ることができませんので注意が必要です。


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

2006年08月09日

CDKとJmolの連携

CDKからJmolを利用する方法についてメモしたいと思います。最も簡単な方法は、CDK News, 2.1(2005)で記載されているCdkJmol3DPanelクラスの利用だと思います。ただし、私の利用したCDK及びJmolのバージョン(cdk-20050826,Jmol 10.00)では、CdkJmol3DPanelクラスは動作しませんでした。ネットで調べると、CdkJmol3DPanelクラスとほぼ同等のJmolPanelクラスが公開されており、こちらでは問題なく動作しました。ソースを見るとJmolViewerクラスの使い方が異なっていることが分かりました。また、CDKとJmolの連携に重要なCdkJmolAdapterクラスの使い方もJmolPanelクラスから知ることができます。

JmolPanelクラスさえ使えればあとは簡単です。

 JmolPanel jp = new JmolPanel();
 jp.setMol(mol);
 JFrame frame = new JFrame();
 Container cont = frame.getContentPane();
 cont.add(jp);
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 frame.pack();
 frame.setBounds(10,10,300,300);
 frame.setVisible(true);

こんな感じでJmolが利用できます。
cdkjmol.png


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

広告


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

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

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