2006年07月04日

JOELibでMorgan法

分子エディタで分子を書いてmol形式などで保存すると各原子に番号付けがされます。しかし、その番号付けは原子を書いた順番であったり、分子エディタに依存していたりと一義的に決定されるわけではありません。n原子の分子ではn!通りの番号付けが可能となるわけです。

一義的な原子の番号付けは、データベースに化学構造を登録する際、検索効率を大幅にUPさせますし、CanonicalなSMILES表現も可能とします。この一義的な原子の番号付けを可能とするアルゴリズムが1965年にMorganによって発表されました(J. Chem. Doc. 1965,5,107)。現在でも様々な場面でその改良版が利用されていると思います。

JOELibでは、Morganクラスを用いることで一義的な原子の番号付けができます。

まずBasicTieResolverクラスのインスタンスをMorganクラスのコンストラクタに渡します。calculate(JOEMol mol)メソッドでMorgan法のアルゴリズムが実行され、renumber(JOEMol mol)でMorgan法により再番号付けされた結果を得ることができます。最後にtieResolvingProblem()メソッドがfalseであれば、一義的に再番号付けがされていることを示しているようです(tieResolvingProblem()メソッドの判定基準はソースを見ていないので詳しくは分かりません)。

 Morgan morgan = new Morgan(new BasicTieResolver());
  if(morgan.calculate(mol)){
   JOEMol rmol = morgan.renumber(mol);
   if(!morgan.tieResolvingProblem()){
    System.out.println(rmol.toString());
   }
 }

例として、フェノールをMorgan法により再番号付けしてみます。

morgan.png
Morgan法はシンプルなアルゴリズムですので、自作するにもちょうどよい題材だと思います。興味のある方は、以下の書籍にアルゴリズムの詳細が載っていますので、ぜひチャレンジしてみてください。




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






posted by わばのり at 07:42| Comment(0) | TrackBack(0) | JOELib | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

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


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

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