Conversion de la chaîne SMILES en sous-chaînes valides
J'ai une chaîne SMILES comme suit.
smi= 'CCOC(=O)C1=C(COCCN)NC(C)=C(C(=O)OC)C1c1ccccc1Cl'
Y a-t-il de toute façon que je convertis cette chaîne SMILES en sous-chaînes valides qui peuvent être traitées ultérieurement dans RDKIT.
Par exemple
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)'
Ces sous-chaînes doivent être un sous-ensemble de la chaîne SMILES principale et doivent également être valides du point de vue de la syntaxe SMILES .
Alors que lorsque j'utilise la fonction MolFromSmiles
, elle est traitée sans aucune erreur ou aucune en retour?
Mol_sub1 = Chem.MolFromSmiles(smi_sub1)
Mol_sub2 = Chem.MolFromSmiles(smi_sub2)
Mol_sub3 = Chem.MolFromSmiles(smi_sub3)
Réponses
Bien que cela puisse fonctionner dans certains cas, je ne sais pas si cela fonctionnera en général. Le problème ici pourrait être reflété dans cette déclaration:
Ces sous-chaînes doivent être un sous-ensemble de la chaîne SMILES principale
Toutes les sous - chaînes ne seront pas un sous - graphe de la molécule parente. Comme mentionné dans les commentaires, cela semble essentiellement un problème de fragmentation. Prenez celui-ci de vos exemples:
smi_sub1 = 'C1c1ccccc1Cl'
La raison pour laquelle cela ne sera pas analysé est qu'il commence par un 'C1' mais n'a pas de 'C1' correspondant pour terminer l'anneau. Il devrait donc s'agir de «Cc1ccccc1Cl», qui est du 1-chloro-2-méthylbenzène.
Théoriquement, vous pouvez prendre des sous-chaînes, puis les post-traiter pour supprimer les numéros de sonnerie «déconnectés». Cependant, il serait plus judicieux d'utiliser une fragmentation appropriée sur le graphe moléculaire, et vous auriez alors des sous-graphes corrects de toute façon, sans avoir besoin de les convertir à partir de SMILES.