分子量の計算

手始めに、くすりのサイズの目安となる「分子量」から計算してみましょう。


エレベーターに重量制限があるのと同じで、重い分子は
飲んでも小腸の細胞膜をなかなか通してくれず、体内に吸収されにくくなります。
それゆゑに、内服薬としては、分子量500以下の低分子化合物が望ましいとされています。


さて、計算プログラムについてですが、
CDKでは、WeightDescriptorというお手軽クラスが実装されています。
しかし、今回はあえて、
1原子ずつ原子量を足しあわせて求めてみましょう(結果は同一です)。
実行プログラムの1つめの引数(args[0])に
入力となるSMILESファイルを指定できるようにします。


/* getMW.java */
import java.io.*;
import org.openscience.cdk.io.iterator.IteratingSMILESReader;
import org.openscience.cdk.interfaces.IMolecule;
import org.openscience.cdk.tools.manipulator.AtomContainerManipulator;
import org.openscience.cdk.CDKConstants;
import org.openscience.cdk.config.IsotopeFactory;

class getMW {
public static void main(String args[]){

if(args.length!=1){
System.err.println("getMW <smiles-file>");
System.exit(1);
}
FileInputStream fis = null;
IteratingSMILESReader isr = null;
try{
fis = new FileInputStream(new File(args[0]));
isr = new IteratingSMILESReader(fis);
} catch (Exception e) {
e.printStackTrace();
}

while( isr.hasNext() ){ // Read a file line by line
IMolecule imol = (IMolecule)isr.next();
String id = (String)imol.getProperty("cdk:Title"); // The 2nd column

/* Same as
WeightDescriptor wd = new WeightDescriptor();
String mw = wd.calculate(imol).getValue().toString();
*/
double mw = 0.0;
try{
for (int i = 0; i < imol.getAtomCount(); i++) {
IsotopeFactory ifac = IsotopeFactory.getInstance(imol.getBuilder());
String symbol = imol.getAtom(i).getSymbol();
mw += ifac.getMajorIsotope( symbol ).getExactMass();

Integer hcount = imol.getAtom(i).getHydrogenCount();
if (hcount == CDKConstants.UNSET) hcount = 0;
mw += (hcount * 1.00782504); // Add weight of hydrogens
}
} catch (Exception e1) {
e1.printStackTrace();
}

System.out.printf("%s\t%.2f\n", id, mw);
}
}
}

念の為に、コンパイル/実行操作は、

$ javac -cp $CLASSPATH getMW.java
$ java -cp $CLASSPATH getMW input.smiles

という具合です。$CLASSPATHとして、cdk-1.2.x.jar(私のだとcdk-1.2.7.jar)と
カレントディレクトリにpathを通すのをお忘れなく。


フリーのプログラムは、往々にして例外処理が甘くなりがちです。
私が上記プログラムで計算したときには、
"Cannot percieve atom type for ..." という
Warningメッセージが表示されました。
水素の数を正しく合わせるために、原子パターンごとに
分岐処理を加えるべきかもしれません。


見つかりましたか、分子量500以下の化合物。
実際に、大規模な薬物スクリーニングを行うときにも、
あらかじめ分子量の大きな化合物を取り除いておくことがあります。


また、分子量の計算は、生物実験のときにも使います。
化合物の効果を測定するときには、
特定のモル濃度で調製することになっています
(どんな化合物も、モーレツに濃い状態で投与すれば反応しますので)。
したがって、手元の粉末化合物の分子量を計算し、
精密に秤量して溶媒に溶かす、というプロセスが必要になるのです。