分子骨格と作用選択性

さきの記事で、「分子骨格(molecular framework)」を定義しました。
今回はその応用編です。


Yangらは、標的タンパク質選択性(最近流行のキーワードでもあります)との関連性に注目しました*1

  • f_MF = (「分子骨格」内の重原子数) / (全体の重原子数)

と定義するときに、f_MF = 0.65を超えると比較的多くのタンパク質に作用する、と言うのです。


確かに、骨格以外のニョキニョキした構造が
ちょうど鍵のギザギザしたイメージと重なり、
特定のタンパク質にだけピッタリ嵌りそうな気もします。


当たり前のようで誰も計算してみなかった統計。
J. Med. Chem.誌に載るためには、
そのようなコロンブスの卵的な要素が重要になってきそうです。


さて、f_MFを算出するプログラムは以下のとおりです。
環構造を1つしか持たないときは、さらに条件分岐して計算します。


/* fmf.java */

import java.io.*;
import org.openscience.cdk.interfaces.*;
import org.openscience.cdk.io.iterator.IteratingSMILESReader;
import org.openscience.cdk.interfaces.IMolecule;
import org.openscience.cdk.tools.manipulator.AtomContainerManipulator;
import org.openscience.cdk.fragment.MurckoFragmenter;

class fmf {

public static void main(String args[]){

if(args.length!=1){
System.err.println("fmf <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() ){
IMolecule imol = (IMolecule)isr.next();
String id = (String)imol.getProperty("cdk:Title");

MurckoFragmenter fragmenter = new MurckoFragmenter(true, 3);
double result = 0.0;
try {
fragmenter.generateFragments(imol);
IAtomContainer[] framework = fragmenter.getFrameworksAsContainers();
IAtomContainer[] ringSystems = fragmenter.getRingSystemsAsContainers();
if (framework.length == 1) {
result = framework[0].getAtomCount() /
(double) imol.getAtomCount();
} else if (framework.length == 0 && ringSystems.length == 1) {
result = ringSystems[0].getAtomCount() /
(double) imol.getAtomCount();
} else result = 0.0;
} catch (Exception e1) {
e1.printStackTrace();
}
System.out.printf("%s\t%.3f\n", id, result);
}
}
}

CDKでは、FMFDescriptorクラスとしてまとめられています。

*1: Yang et al. Investigation of the Relationship between Topology and Selectivity for Druglike Molecules. J. Med. Chem. (2010) 53, 7709-7714 PubMed