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](/contents/025/295/327.mime7)
人気ブログランキング(クリックして応援してね)