การแปลงสตริง 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-chloro-2-methylbenzene

ในทางทฤษฎีคุณสามารถใช้สตริงย่อยจากนั้นโพสต์กระบวนการเพื่อลบหมายเลขแหวนที่ "ตัดการเชื่อมต่อ" ออก อย่างไรก็ตามมันจะสมเหตุสมผลกว่าที่จะใช้การกระจายตัวที่เหมาะสมบนกราฟโมเลกุลจากนั้นคุณก็จะมีกราฟย่อยที่ถูกต้องอยู่ดีโดยไม่จำเป็นต้องแปลงจาก SMILES