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

広告


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

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

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