はじめに
前回のフラグメント除去に続き、今回も化合物の前処理の一つとして行われる電荷の中和をやってみようと思う。
環境
- Python3.6
- RDKit 2019.03.3.0
コード
コードは以下の通りである。事例も含め、参考文献からの流用である。
from rdkit import Chem
from rdkit.Chem import MolStandardize
# -------------------------------------------------------
# 電荷の中和
# -------------------------------------------------------
smis = ("c1cccc[nH+]1",
"C[N+](C)(C)C", "c1ccccc1[NH3+]",
"CC(=O)[O-]", "c1ccccc1[O-]",
"CCS",
"C[N-]S(=O)(=O)C",
"C[N-]C=C", "C[N-]N=C",
"c1ccc[n-]1",
"CC[N-]C(=O)CC")
uc = MolStandardize.charge.Uncharger()
for smi in smis:
mol = Chem.MolFromSmiles(smi)
mol = uc.uncharge(mol)
uncharge_smi = Chem.MolToSmiles(mol)
print("Before: " + smi + " -> After: " + uncharge_smi)
結果は以下のとおりである。
Before: c1cccc[nH+]1 -> After: c1ccncc1
Before: C[N+](C)(C)C -> After: C[N+](C)(C)C
Before: c1ccccc1[NH3+] -> After: Nc1ccccc1
Before: CC(=O)[O-] -> After: CC(=O)O
Before: c1ccccc1[O-] -> After: Oc1ccccc1
Before: CCS -> After: CCS
Before: C[N-]S(=O)(=O)C -> After: CNS(C)(=O)=O
Before: C[N-]C=C -> After: C=CNC
Before: C[N-]N=C -> After: C=NNC
Before: c1ccc[n-]1 -> After: c1cc[nH]c1
Before: CC[N-]C(=O)CC -> After: CCNC(=O)CC
2番目と5番目は変化がなく、それ以外は処理がされている。変化があるものとないものの違いがよくわからない。
smilesだとよくわからないので画像で見てみよう。
Before | After |
---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
私の画像化処理の問題のためか、ところどころ電荷が表示されていない画像があるが、要するにプロトンの除去または追加によって電荷が中和されるものについては、処理がされているように見える。
おわりに
調べてみると前処理として「標準化」、「トートマーの正規化」といったキーワードもあるが具体的にどんな処理をしているのか、調べるのが面倒くさいからスルーした今の自分の化学力からは理解できなかった。また別の機会に調べてみたい。