Converter string SMILES em sub-strings válidas

Aug 17 2020

Eu tenho uma string SMILES da seguinte maneira.

smi= 'CCOC(=O)C1=C(COCCN)NC(C)=C(C(=O)OC)C1c1ccccc1Cl'

Existe alguma maneira de converter esta string SMILES em sub-strings válidas que podem ser posteriormente processadas em RDKIT.

Por exemplo

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)'

Essas sub-strings devem ser um subconjunto da string SMILES principal e também devem ser válidas do ponto de vista da sintaxe SMILES .

Para que quando eu uso a função MolFromSmiles, ela seja processada sem nenhum erro ou nenhum retorno?

Mol_sub1 = Chem.MolFromSmiles(smi_sub1)
Mol_sub2 = Chem.MolFromSmiles(smi_sub2)
Mol_sub3 = Chem.MolFromSmiles(smi_sub3)

Respostas

4 gilleain Aug 17 2020 at 16:56

Embora isso possa funcionar em alguns casos, não tenho certeza de como funcionará bem em geral. O problema aqui pode estar refletido nesta declaração:

Essas sub-strings devem ser um subconjunto da string SMILES principal

Nem toda substring será um subgrafo da molécula-mãe. Conforme mencionado nos comentários, isso parece essencialmente um problema de fragmentação. Veja este um dos seus exemplos:

smi_sub1 = 'C1c1ccccc1Cl'

O motivo pelo qual isso não será analisado é que ele começa com 'C1', mas não possui 'C1' correspondente para terminar o anel. Portanto, deve ser 'Cc1ccccc1Cl', que é 1-cloro-2-metilbenzeno.

Teoricamente, você poderia pegar substrings e pós-processá-los para remover números de toque 'desconectados'. No entanto, faria mais sentido usar a fragmentação adequada no gráfico molecular, e então você teria subgráficos corretos de qualquer maneira, sem a necessidade de convertê-los de SMILES.