Преобразование строки 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» для завершения кольца. Значит, это должен быть Cc1ccccc1Cl, который представляет собой 1-хлор-2-метилбензол.

Теоретически вы можете взять подстроки, а затем обработать их для удаления «отключенных» номеров звонков. Однако было бы разумнее использовать правильную фрагментацию на молекулярном графе, и тогда у вас в любом случае будут правильные подграфы, без необходимости конвертировать их из SMILES.