การแปลงสตริง SMILES เป็นสตริงย่อยที่ถูกต้อง
ฉันมีสตริง 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)
คำตอบ
แม้ว่าอาจได้ผลในบางกรณี แต่ฉันไม่แน่ใจว่าโดยทั่วไปจะทำงานได้ดีเพียงใด ปัญหาที่นี่อาจสะท้อนให้เห็นในคำสั่งนี้:
สตริงย่อยเหล่านี้ควรเป็นชุดย่อยของสตริง SMILES หลัก
ไม่ใช่ทุกสตริงย่อยที่จะเป็นกราฟย่อยของโมเลกุลแม่ ดังที่ได้กล่าวไว้ในความคิดเห็นนี้ดูเหมือนว่าจะเป็นปัญหาการกระจายตัว ลองดูตัวอย่างของคุณ:
smi_sub1 = 'C1c1ccccc1Cl'
เหตุผลที่จะไม่แยกวิเคราะห์ก็คือมันเริ่มต้นด้วย 'C1' แต่ไม่มี 'C1' ที่เกี่ยวข้องเพื่อจบวงแหวน ดังนั้นจึงควรเป็น 'Cc1ccccc1Cl' ซึ่งก็คือ 1-chloro-2-methylbenzene
ในทางทฤษฎีคุณสามารถใช้สตริงย่อยจากนั้นโพสต์กระบวนการเพื่อลบหมายเลขแหวนที่ "ตัดการเชื่อมต่อ" ออก อย่างไรก็ตามมันจะสมเหตุสมผลกว่าที่จะใช้การกระจายตัวที่เหมาะสมบนกราฟโมเลกุลจากนั้นคุณก็จะมีกราฟย่อยที่ถูกต้องอยู่ดีโดยไม่จำเป็นต้องแปลงจาก SMILES