Drkcore

05 01 2018 chemoinformatics Tweet

SMILESで任意の原子を任意の位置に置きたい

例えば

CHEMBL361227

でフッ素原子が文字列の最後尾に来るようなSMILESを得たいとする。

RDKitにはRenumberAtomsというメソッドが用意されているので、原子のインデックスを変更してからSMILESに出力すればうまくいくんじゃないかと思いついたのでやってみた。

from rdkit import Chem

mol = Chem.MolFromSmiles("Fc1ccc(Nc2[nH]cnc3ncnc23)cc1")
l = list(range(mol.GetNumAtoms()))
max = l.pop()
l.insert(0, max)

new_mol = Chem.RenumberAtoms(mol, l)
print Chem.MolToSmiles(new_mol, canonical=False)

出力結果

c1c(F)ccc(Nc2[nH]cnc3ncnc2-3)c1

うまくいかない

今回の場合はアルゴリズムの空気感を読んでリバースすれば上手くいった。

from rdkit import Chem

mol = Chem.MolFromSmiles("Fc1ccc(Nc2[nH]cnc3ncnc23)cc1")
l = list(range(mol.GetNumAtoms()))
#max = l.pop()
#l.insert(0, max)
l.reverse()

new_mol = Chem.RenumberAtoms(mol, l)
print Chem.MolToSmiles(new_mol, canonical=False)

結果

c1cc(Nc2c3ncnc-3nc[nH]2)ccc1F

やっぱりランダムにSMILESを生成してみて、お目当てのSMILESが出るまでトライする方法しかないんだろうかね

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021