LoginSignup
6
2

More than 3 years have passed since last update.

RDKitでフラグメント除去をやってみる

Last updated at Posted at 2019-10-19

はじめに

molファイルやsmilesの中に複数の化合物(フラグメント)が含まれていると、その後の記述子計算などに支障がでるため、一般的には前処理においてこれらを除去し、1つの化合物のみにすることが行われる。今回、これをやってみようと思う。

環境

  • Python3.6
  • RDKit 2019.03.3.0

塩を除去する

まず、よくあるパターンとして"Cl"や"Br"等の塩が含まれている場合の除外方法について述べる。
コード例は以下のとおりである。

from rdkit import Chem
from rdkit.Chem.SaltRemover import SaltRemover

smis = ("CN(C)C.Cl", "CN(Br)Cl.Cl", "CC(=O)O.[Na]", "CN(C)C.Cl.Br")

#-------------------------------------------------------
# 脱塩処理
#-------------------------------------------------------

remover = SaltRemover(defnData="[Cl,Br]")
for smi in smis:
    mol = Chem.MolFromSmiles(smi)
    mol2 = remover.StripMol(mol)
    smi2 = Chem.MolToSmiles(mol2)
    print(smi + "->" + smi2)

結果は以下のとおりである。

Before: CN(C)C.Cl -> After: CN(C)C
Before: CN(Br)Cl.Cl -> After: CN(Cl)Br
Before: CC(=O)O.[Na] -> After: CC(=O)O.[Na]
Before: CN(C)C.Cl.Br -> After: CN(C)C

3番目以外は正しく除去されている。3番目の化合物では、"Na"が除去されていないが、これはSalt RemoverのdefnDataのところでNaを定義していなかったためである。ここを"Na"も指定すると正しく除去される。

一番大きなフラグメントを残して他を除去する

次に、塩以外にも複数の化合物が含まれているmolファイルやsmilesがある場合について述べる。この場合、一番大きいサイズのフラグメントのみを残すという処理がよく行われる。

コード例は以下のとおりである。

from rdkit import Chem
from rdkit.Chem import MolStandardize

lfc = MolStandardize.fragment.LargestFragmentChooser()
smis = ("CN(C)C.Cl", "CN(Br)Cl.Cl", "CC(=O)O.[Na]", "CN(C)C.Cl.Br", "CCC.CCCC")
for smi in smis:
    mol = Chem.MolFromSmiles(smi)
    mol2 = lfc.choose(mol)
    smi2 = Chem.MolToSmiles(mol2)
    print("Before: " + smi + "-> After: " + smi2)

結果は以下のとおりである。5番目は塩でないが、小さいフラグメント(CCC)が除去されていることが分かる。

Before: CN(C)C.Cl -> After: CN(C)C
Before: CN(Br)Cl.Cl -> After: CN(Cl)Br
Before: CC(=O)O.[Na] -> After: CC(=O)O
Before: CN(C)C.Cl.Br -> After: CN(C)C
Before: CCC.CCCC -> After: CCCC

おわりに

一般的な手法や、RDKitの仕様を調べるのに時間をかかってしまった。次は電荷の処理について書いてみたい。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2