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 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

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