12 01 2010 chemoinformatics Python Tweet
Topological Fragment Indexというものが気になったので。
論文はこれでToFIを尤度として捉えているらしい。
式は
ここで、nは全ボンド数。kはフラグメントについてる余計なボンド。lをフラグメントのボンド数としてm=k+lとなっている。
def combination(n,m):
if m == 0:
return 1.0
else:
return reduce(lambda x,y:x*y,range(n-m+1,n+1)) / float(reduce(lambda x,y:x*y,range(1,m+1)))
def tofi(n,m,k):
sum = 0.0
for i in range(n-m+1):
sum += combination(n-m,i) / combination(n,k+i)
return sum/(n+1)
で、整数にするために1*10^6という定数をかけるらしいのだが、なにがしたいのかよくわからん。
lが一定でkが増えるとToFIが減る
>>> tofi.tofi(23,17,5) * 1000000
8.9779501544207427
>>> tofi.tofi(23,18,6) * 1000000
2.8351421540276029
>>> tofi.tofi(23,19,7) * 1000000
0.99229975390966119
kが一定でlが減るとToFIが増える
>>> tofi.tofi(23,17,5) * 1000000
8.9779501544207427
>>> tofi.tofi(23,16,5) * 1000000
13.466925231631114
>>> tofi.tofi(23,15,5) * 1000000
20.812520812520813
後者はなんとなく理解できるけど、切断面が大きくなるほどToFIが減るってのがわからん。
計算間違ってるのかなぁ。