Eccentric Connectivity Index

「Eccentric」と聞くとエキセントリック少年ボウイを思い出させますが
ここではそんな「風変わりな」という意味ではなく、
れっきとした数学用語「離心性」として扱います。
どちらのEccentricも、中心(centric)から離れているイメージです。


原子間の繋がりが「隣接行列」で表現されるということは、BCUT記述子に関する説明のとおりです。
隣接行列がわかると、さらに「距離行列」が簡単に計算できます。
距離行列は、原子間の距離を要素にもつ行列です。
2-methylbutaneで例示してみます。

隣接行列の各列の和は、各原子から伸びる線の数、つまり原子価を意味します。
一方、距離行列の各列ごとの最大値、これが「eccentricity(離心性)」と呼ばれます。
言い換えると、eccentricityは、その原子から最も遠い原子までの距離、なのです。
そして、各原子のeccentricityの大小を比べたときに、当然ながら、
分子の中心付近(上図ではC2, C4)で最小値を示します。
つまり、eccentricityは、分子の中心の位置を示す指標となるのです。


Sharmaら*1はさらに、
 Σ(原子価)x(eccentricity)
を「Eccentric Connectivity Index」と定義しました。
上図ですと、
(1 x 3) + (3 x 2) + (1 x 3) + (2 x 2) + (1 x 3) = 19
という具合です。原著では、沸点との相関を評価しています。
CDKでも比較的簡単に計算できます。


/* eccentric.java */

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

import org.openscience.cdk.graph.PathTools;
import org.openscience.cdk.graph.matrix.AdjacencyMatrix;

class eccentric {
public static void main(String args[]){
if(args.length!=1){
System.err.println("eccentrix <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");

int eccenindex = 0;
try{
IAtomContainer local = AtomContainerManipulator.removeHydrogens(imol);
int natom = local.getAtomCount();
int[][] admat = AdjacencyMatrix.getMatrix(local);
int[][] distmat = PathTools.computeFloydAPSP(admat);
for (int i = 0; i < natom; i++) {
int max = -1;
for (int j = 0; j < natom; j++) {
if (distmat[i][j] > max) max = distmat[i][j];
}
int degree = local.getConnectedBondsCount(i);
eccenindex += max * degree;
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.printf("%s\t%d\n", id, eccenindex);
}
}
}

傾向として、球状の分子では値が小さく、棒状の細長い分子では値が大きくなります。
分子の形状をざっくり知るひとつの目安になりそうです。

*1: Sharma et al. Eccentric Connectivity Index: A Novel Highly Discriminating Topological Descriptor for Structure-Property and Structure-Activity Studies. J. Chem. Comput. Sci. (1997) 37, 273-282