2006年06月16日

CDKで"rule of five"フィルタの作成 2

RuleOfFiveDescriptorクラスには、以下6つのメソッドがあります。

 calculate(AtomContainer mol)
 getParameterNames()
 getParameters()
 getParameterType(java.lang.String name)
 getSpecification()
 setParameters(java.lang.Object[] params)

APIの説明を読むと、getParameterNames()及びTypeあたりでクラス内で使われているdescriptorを知り、setParameters(java.lang.Object[] params)でそのdescriptorの値を任意に指定できるのかなと思いました。デフォルトでは、Lipinski's Ruleだろうけど、Mw<350などに設定したい場合があるので結構親切じゃんっと思い込んだわけです。ただ、calculate(AtomContainer mol)の説明に以下のような不可解な文書が記載されています。

 the method take a boolean checkAromaticity: if the boolean is  
 true, it means that aromaticity has to be checked

checkAromaticityがtrueならaromaticityのチェックをするんだなということは分かりますが、どうやって設定するの?と思ってしまいます。aromaticityのチェックはしておかないと特にXLogPの計算結果に影響しそうなので...もしかしてデフォルトでFALSEではないよな...など心配になってきたので、ソースコードを見ることにしました。

まずは、setParameters(java.lang.Object[] params)を見ると次のようなコードが書かれていました。

 if (params.length > 1) {
   throw new CDKException("RuleOfFiveDescriptor only expects one
   parameter");
  }
if (!(params[0] instanceof Boolean)) {
throw new CDKException("The first parameter must be of type
Boolean");
}
checkAromaticity = ((Boolean) params[0]).booleanValue();

えっ!このメソッドからcheckAromaticityがセットできることは分かりましたが、いろんなパラメータのセットができるという私の推測は見事にはずれてしまいました。ということで、以下のコードでcheckAromaticityをTRUEにできます。

 // checkAromaticityをTRUEにする
 Boolean param[] = new Boolean[1];
 param[0] = Boolean.TRUE;
 try {
  rule5.setParameters(param);
 } catch (CDKException e1) {
  System.err.println(e1.toString());
 }

本当は、コード作成者は、複数のパラメータをセットできるようにしたかったのではないかな.....
ちなみにcheckAromaticityはデフォルトでは、falseですので、注意してください。あと、当然ですが、getParameterNames()でも返ってくるのは、"checkAromaticity"だけです。

ということで、RuleOfFiveDescriptorクラスは、checkAromaticityをTRUEかFALSEに設定して、calculate()すればよい(それしかない)と思われます。

前回も記載しましたが、"rule of five"フィルタのコアになるコードは以下のようになります。
 
 //RuleOf5の計算
 dv = rule5.calculate((AtomContainer)mol);
 IntegerResult ir = (IntegerResult)dv.getValue();

 //RuleOf5を満たすものをファイル出力
 if(ir.intValue() == 0){
  mw.writeMolecule(mol);
  count++;
 }

これで、"rule of five"フィルタの完成です。
注意点としては、CDKにおける水素結合のドナー、アクセプターの定義を確認しないとせっかくの有望な化合物がこぼれてしまう可能性があること。また、CDKのlogPの計算方法(精度)も把握しておかないと同様の心配がありますので、このあたりもそのうち取り上げてみます。

CDKex2.java



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


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

広告


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

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

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