そのうちMMPベースのプロジェクト診断ツールでも作ろうかなと思っているので、fmcsを使ったMMP構築をやってみた。
fmcs sample.sdf --output-format complete-sdf --save-smiles-tag \
MCS_SMILES --save-atom-indices-tag MCS_ATOMS --output-all
で、MCSのSMILESと対応するatom indexをタグ付けしたsdfを出力しておいてpybelでMCSを削除する。
import pybel
import sys
input = sys.argv[1]
for mol in pybel.readfile("sdf", input):
print mol.data["MCS_SMILES"]
del_atom_idxs = [int(num) for num in mol.data["MCS_ATOMS"].split()]
del_atoms = []
for i,atom in enumerate(mol,0):
if i in del_atom_idxs:
del_atoms.append(atom)
for a in del_atoms:
mol.OBMol.DeleteAtom(a.OBAtom)
print mol
そうすると、MMPが作れる。
もう少し具体的な例をと思ってChEMBLからsdfでも取ってきてとか思ったけど、やり方がわからなかったのでわからんとか言ってたら@32nmに教えてもらった。ありがとうございます。
というわけで、ChEMBLからカテプシンK阻害剤の化合物データからCHEMBL100616,CHEMBL101160,CHEMBL316685,CHEMBL327743,CHEMBL329731,CHEMBL419891の6化合物を引っ張ってきてやってみた
CCC(C)C(C=Cc1ccccc1)NC(=O)C1CCCCN1CC(=O)c1ccccc1
C(=O)(N)C
CCC(C)C(C=Cc1ccccc1)NC(=O)C1CCCCN1CC(=O)c1ccccc1
Cl
CCC(C)C(C=Cc1ccccc1)NC(=O)C1CCCCN1CC(=O)c1ccccc1
[NH+](=O)[O-]
CCC(C)C(C=Cc1ccccc1)NC(=O)C1CCCCN1CC(=O)c1ccccc1
Cl
CCC(C)C(C=Cc1ccccc1)NC(=O)C1CCCCN1CC(=O)c1ccccc1
[NH+](=O)[O-]
CCC(C)C(C=Cc1ccccc1)NC(=O)C1CCCCN1CC(=O)c1ccccc1
OC.OC
あとはアッセイ情報と付きあわせてpIC50みたいなプロパティの引き算をすればMMPを利用した解析ができる。
ある程度コントロールできてる化合物群ではうまくいくんだが、MCSだと期待している以上にスキャフォールドをアサインしまうために、結果としてフラグメントが細切れになったり(Rの環が分割されてしまったり)してMMPを構成するにはちょっとあれかな。