Conversione di stringhe SMILES in sottostringhe valide
Ho una stringa SMILES come segue.
smi= 'CCOC(=O)C1=C(COCCN)NC(C)=C(C(=O)OC)C1c1ccccc1Cl'
C'è comunque che converto questa stringa SMILES in sottostringhe valide che possono essere successivamente elaborate in RDKIT.
Per esempio
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)'
Queste sottostringhe dovrebbero essere un sottoinsieme della stringa principale SMILES e dovrebbero essere valide anche dal punto di vista della sintassi SMILES .
In modo che quando uso la funzione MolFromSmiles
, viene elaborata senza errori o nessuno in cambio?
Mol_sub1 = Chem.MolFromSmiles(smi_sub1)
Mol_sub2 = Chem.MolFromSmiles(smi_sub2)
Mol_sub3 = Chem.MolFromSmiles(smi_sub3)
Risposte
Sebbene questo possa funzionare in alcuni casi, non sono sicuro di quanto bene funzionerà in generale. Il problema qui potrebbe riflettersi in questa affermazione:
Queste sottostringhe dovrebbero essere un sottoinsieme della stringa principale SMILES
Non tutte le sottostringhe saranno un sottografo della molecola madre. Come accennato nei commenti, questo sembra essenzialmente un problema di frammentazione. Prendi questo uno dei tuoi esempi:
smi_sub1 = 'C1c1ccccc1Cl'
Il motivo per cui questo non viene analizzato è che inizia con "C1" ma non ha un "C1" corrispondente per terminare l'anello. Quindi dovrebbe essere "Cc1ccccc1Cl", che è 1-cloro-2-metilbenzene.
Teoricamente, potresti prendere sottostringhe, quindi post-elaborarle per rimuovere i numeri di anello "scollegati". Tuttavia, avrebbe più senso utilizzare la frammentazione adeguata sul grafo molecolare, e quindi avresti comunque i sottografi corretti, senza la necessità di convertirli da SMILES.