🔖
rdkitでsmilesから構成原子のpython辞書を作成する
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でコードを共有
補足資料
python 便利なcollectionsライブラリ
Discussion