16 08 2010 chemoinformatics Python cytoscape Tweet
MCSSTanimotoで組んだネットワークのメリットはなんといってもエッジの属性にMCSの情報(smilesとかInChi)をのっけられることであろう。
import sys
from Gaston import MCSSTanimoto,Gaston
import openbabel as ob
obc = ob.OBConversion()
obc.SetInAndOutFormats("sdf", "smi")
input = "pc_sample.sdf"
mol = ob.OBMol()
next = obc.ReadFile(mol,input)
mols = [mol]
while next:
mol.StripSalts(14)
mols.append(mol)
mol = ob.OBMol()
next = obc.Read(mol)
mols = mols[1:11]
for i in range(len(mols)-1):
for j in range(i+1,len(mols)):
sys.stdout.flush()
mcs = MCSSTanimoto(mols[i],mols[j])
if mcs.score() > 0.2:
print "%s\t%s\t%s\t%s\t%2.3f" % (mols[i].GetTitle(), "mcs", \
mols[j].GetTitle(), obc.WriteString(mcs.mcs).split()[0], mcs.score())
でも、実際に組んでみたら、解釈が意外に難しそうなことに気がついた。MCSSTanimotoのアルゴリズム自体が問題なのかもしれない。
MCSよりはmolblaster的に細切れにしてみて最頻出のフラグメントからネットワークを組んでいくか、ありがち置換基の定義済みテーブルを使って類似性の高い置換基動どうしをつなぐという経験ベースのアプローチのほうが直感的かもしれないなぁ。