🔖

rdkitで原子電荷の取得と構造式とともに表示する方法

2022/12/03に公開

はじめに

rdkitで原子電荷の数字を取得したり、画像で表示する方法をまとめました。

原子電荷に関して理論

https://doi.org/10.1016/0040-4020(80)80168-2

使用するライブラリーとインポートするライブラリー

!pip install rdkit==2022.3.5
from rdkit import Chem
from rdkit.Chem import AllChem, Draw
from rdkit.Chem.Draw import IPythonConsole, SimilarityMaps

今回使用する分子

mol = Chem.MolFromSmiles('c1ncncc1C(=O)[O-]')
mol

これを実行すると、以下の分子が表示される。

原子のidを表示

mol_with_id = Chem.Mol(mol)
for atom in mol_with_id.GetAtoms():
    atom.SetProp('molAtomMapNumber', str(atom.GetIdx()))
mol_with_id

このコードでidごとに数字を表示したものが表示される。

電荷の数字を取得する。

AllChem.ComputeGasteigerCharges(mol)
atom_charges = [float(mol.GetAtomWithIdx(i).GetProp('_GasteigerCharge')) for i in range(mol.GetNumAtoms())] 
for i, atom_charge in enumerate(atom_charges):
  print(i, ":",  round(atom_charge, 3))

idごとの数字が表示される。

原子ごとにatom_chargeを画像とともに表示する。

mol_with_charge = Chem.Mol(mol)
for atom in mol_with_charge.GetAtoms():
    lbl = str(round(atom.GetDoubleProp("_GasteigerCharge"), 3))
    atom.SetProp('atomNote',lbl)
mol_with_charge

画像とともに数字が表示される。

原子電荷のmapで表示

fig = SimilarityMaps.GetSimilarityMapFromWeights(mol, weights=atom_charges, colorMap='bwr', size=(300, 300))

等高線と色で表示することができる。

今回使ったコードをgoogle colabolatoryで公開

https://colab.research.google.com/drive/1NWgd-YiretuErhcnUBgFKcxZuSMTQfoZ?usp=sharing

今回使ったコードをWEB上で試せるアプリ

streamlitを使って作成しています。

https://chemoinfomaticstool.streamlit.app/

ChargeAnalysisを選択して、simlesを入力すれば表示することができます。

Discussion