SMILES文字列を有効なサブ文字列に変換する
Aug 17 2020
私は次のようなSMILES文字列を持っています。
smi= 'CCOC(=O)C1=C(COCCN)NC(C)=C(C(=O)OC)C1c1ccccc1Cl'
とにかく、このSMILES文字列を後でRDKITで処理できる有効なサブ文字列に変換することはありますか。
例えば
smi_sub1= 'C1c1ccccc1Cl'
smi_sub2= 'CCOC(=O)C1=C(COCCN)NC(C)=C(C(=O)OC)'
smi_sub3= 'C1=C(COCCN)NC(C)=C(C(=O)OC)'
これらのサブ文字列は、メインのSMILES文字列のサブセットである必要があり、SMILES構文の観点からも有効である必要があります。
そのため、関数を使用すると、MolFromSmiles
エラーなしで処理されるのでしょうか、それとも何も返されませんか?
Mol_sub1 = Chem.MolFromSmiles(smi_sub1)
Mol_sub2 = Chem.MolFromSmiles(smi_sub2)
Mol_sub3 = Chem.MolFromSmiles(smi_sub3)
回答
4 gilleain Aug 17 2020 at 16:56
これは場合によっては機能するかもしれませんが、一般的にどれだけうまく機能するかはわかりません。ここでの問題は、このステートメントに反映されている可能性があります。
これらのサブ文字列は、メインのSMILES文字列のサブセットである必要があります
すべての部分文字列が親分子のサブグラフになるわけではありません。コメントで述べたように、これは本質的に断片化の問題のようです。あなたの例のこれを取りなさい:
smi_sub1 = 'C1c1ccccc1Cl'
これが解析されない理由は、「C1」で始まりますが、リングを終了するための対応する「C1」がないためです。したがって、1-クロロ-2-メチルベンゼンである「Cc1ccccc1Cl」である必要があります。
理論的には、部分文字列を取得し、それらを後処理して「切断された」リング番号を削除することができます。ただし、分子グラフで適切な断片化を使用する方が理にかなっています。そうすれば、SMILESから変換しなくても、とにかく正しいサブグラフが得られます。