Converter string SMILES em sub-strings válidas
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
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.