Help us understand the problem. What is going on with this article?

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

はじめに

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の仕様を調べるのに時間をかかってしまった。次は電荷の処理について書いてみたい。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away