背景
反応部位として原子のインデックスがSDFに登録されているとする。SDFを読み込んでその分子の構造を描画する際にそのインデックスで示される原子をハイライトしたいとする。読み込んだSDFをMOLオブジェクトに変換し、水素の付加または除去したMOLオブジェクトを生成すると、新しく作成されたMOLオブジェクトでは原子のインデックスが全く変わってしまうため、もともと反応部位として登録されていた原子をハイライトさせることができない。水素を付加または除去しても新旧のMOLオブジェクトの原子インデックスを対応づけたい。
環境
- Windows10
- Python 3.6
- RDKit 2018/9/2
方法
思いついた方法は、水素のあるMOLオブジェクトに対し、水素のないMOLオブジェクトを部分構造検索をする。構造検索の結果得られるリストには、水素のないMOLオブジェクトの各原子のインデックス順番に、水素のあるMOLオブジェクトの対応する原子のインデックスが得られる。
# HありのMOLからHなしのMOL生成
mol_noh = AllChem.RemoveHs(mol)
if mol.HasSubstructMatch(mol_noh):
patterns = mol.GetSubstructMatches(mol_noh)
上のpatternsにマッチングした部分構造が複数得られるため、最初に得られたリストを参照すればよい。