#概要
デフォルトオプションを理解せず、なんとなく Chem.MolToSmiles 使うのは、そろそろ卒業しようぜ。ということでまとめたメモ。
#環境
RDkit 2020.03.5
#オプションの説明
オプション | 説明 |
---|---|
iosomericSmiles | SMILESに立体化学に関する情報を含める。デフォルトはtrue |
kekuleSmiles | SMILESでKekule形式(芳香族結合なし)を使用。 デフォルトはfalse |
rootedAtAtom | 負でない場合、これはSMILESを特定の原子で強制的に開始する。デフォルトは-1 |
canonical | falseの場合、正規化されない。デフォルトはtrue。 |
allBondsExplicit | trueの場合、すべての結合次数が出力SMILESで明示的に出力される。 デフォルトはfalse。 |
allHsExplicit | trueの場合、すべてのHカウントが出力SMILESで明示的に出力される。 デフォルトはfalse。 |
#やってみよう
rootedAtAtom以外の動作を確認するために、こんなメソッドを作成。
def generate_smiles(old_smiles, isometric=True, kekule=False, allBondsExplicit=False, allHsExplicit=False, canonical=True):
print(f"\n\ngenerate smiles {old_smiles}")
print(f"prev smiles = {old_smiles}")
old_mol = Chem.MolFromSmiles(old_smiles)
new_smiles = Chem.MolToSmiles(old_mol, isomericSmiles=isometric, kekuleSmiles=kekule,
allBondsExplicit=allBondsExplicit, allHsExplicit=allHsExplicit, canonical=canonical)
print(f"new smiles = {new_smiles}")
実験対象のSMILES
立体情報と芳香環情報のある、こいつで確認していこう。
C[C@H]1COC2=C1C(=O)C(=O)c1c2ccc2c1CCCC2(C)C
isometicSmilesをデフォルトのtrueからflaseに変えた場合
CC1COC2=C1C(=O)C(=O)c1c2ccc2c1CCCC2(C)C
お、立体情報が消えた。
canonicalをデフォルトのtrueからflaseに変えた場合
C[C@H]1COC2=C1C(=O)C(=O)c1c2ccc2c1CCCC2(C)C
変更なし。元のSMILESがcanonicalだった可能性も。
kekureSmilesをデフォルトのfalseからtrueに変えた場合
C[C@H]1COC2=C1C(=O)C(=O)C1:C2:C:C:C2:C:1CCCC2(C)C
cが大文字になりコロンが増えた。-と=が交互にってパターンじゃないのね。
allBondsExplicitをデフォルトのfalseからtrueに変えた場合
C-[C@H]1-C-O-C2=C-1-C(=O)-C(=O)-c1:c-2:c:c:c2:c:1-C-C-C-C-2(-C)-C
単結合もちゃんと出ましたね。うーん、うるさい(笑)。
allHsExplicitをデフォルトのfalseからtrueに変えた場合
[CH3][C@H]1[CH2][O][C]2=[C]1[C](=[O])[C](=[O])[c]1[c]2[cH][cH][c]2[c]1[CH2][CH2][CH2][C]2([CH3])[CH3]
暗黙水素があぶりだされましたね。さらにうるさい(笑)
#最後に、allBondsExplicitとallHsExplicitを同時にtrueにする(おまけ)
[CH3]-[C@H]1-[CH2]-[O]-[C]2=[C]-1-[C](=[O])-[C](=[O])-[c]1:[c]-2:[cH]:[cH]:[c]2:[c]:1-[CH2]-[CH2]-[CH2]-[C]-2(-[CH3])-[CH3]
行間読めない人向け。
#参考
https://www.rdkit.org/docs/source/rdkit.Chem.rdmolfiles.html