🔖

rdkitでsmilesから構成原子のpython辞書を作成する

2022/12/02に公開

rdkitとpython標準ライブラリーのcollectionsを使用する。

!pip install rdkit

atoms_list のなかに、mol.GetAtomsで得られた原子の記号を追加して行く。
その後、collections.Counterで、そのatoms_listの中にある個数を数える。

from rdkit import Chem
import collections

def atom_dict_from_smiles(smiles):
  atoms_list =[]
  mol = Chem.MolFromSmiles(smiles)
  for atom in mol.GetAtoms():
      symbol=atom.GetSymbol()
      atoms_list.append(symbol)
  atom_dict = collections.Counter(atoms_list)
  return atom_dict

この関数を実行すると、

smiles = "CC(=O)NCCC1=CNc2c1cc(OC)cc2"
atom_dict = atom_dict_from_smiles(smiles)
atom_dict

以下のような辞書型が得られる。

辞書型の数字の取り出し方

辞書型なので、

atom_dict["C"]
atom_dict["O"]
atom_dict["N"]

などとすれば、それぞれの原子の数が得られる。

辞書にないときには、0と出力される。

atom_dict["S"]

これを実行すると以下のように0になる。

辞書に入っている数もlenを使うとわかる。

len(atom_dict)

これを実行すると原子の種類が把握できる。

水素の数も必要な場合には、Chem.AddHs(mol)を途中で加える。

def atom_dict_from_smiles_addHs(smiles):
  atoms_list =[]
  mol = Chem.MolFromSmiles(smiles)
  mol = Chem.AddHs(mol) # H付加のために追加
  for atom in mol.GetAtoms():
      symbol=atom.GetSymbol()
      atoms_list.append(symbol)
  atom_dict = collections.Counter(atoms_list)
  return atom_dict

これを実行すると、以下のようにHの数も表示される。

google colabolatoryでコードを共有

https://colab.research.google.com/drive/1_RYrEC1XVjJxqKGKO8KfeWFhyT7s0Z0H?usp=sharing

補足資料

python 便利なcollectionsライブラリ

https://qiita.com/apollo_program/items/165fb01b52702274936c

Discussion