L17 · 28 دقيقة
واصفات RDKit
حساب وتوزيع خصائص مكتبة.
أهداف التعلّم
- حساب واصفات RDKit القياسية (MW، logP، TPSA، HBD/HBA) من SMILES.
- التعامل مع فشل التحليل (MolFromSmiles يعيد None) كحالة علمية.
- رسم توزيع مكتبة قبل أي فرز.
من السلسلة إلى الرقم
RDKit يقرأ SMILES إلى جزيء، ثم يحسب واصفات شائعة تستخدم في الترشيح وQSAR. الواصفات تقديرات (خصوصاً MolLogP) لا قياسات. salting وfragments يجب أن تُعالج قبل الإحصاء وإلا فستحسب MW للملح.
from rdkit import Chem
from rdkit.Chem import Descriptors
mol = Chem.MolFromSmiles("CCO")
print(mol is not None, Descriptors.MolWt(mol), Descriptors.MolLogP(mol), Descriptors.TPSA(mol), Descriptors.NumHDonors(mol), Descriptors.NumHAcceptors(mol), Descriptors.NumRotatableBonds(mol))الغرض: حساب واصفات قياسية لجزيء صالح.
المُدخل: SMILES؛ هنا الإيثانول كمثال تعليمي.
المُخرج: True ثم أرقام MW وMolLogP وTPSA وHBD وHBA وrotors.
المعنى: MolFromSmiles يعيد None إذا فشل التحليل — لا تستدعِ Descriptors على None.
أخطاء شائعة: AttributeError على None: SMILES فاشل أو عمود فارغ. تحقق من الأملاح والقوسين.
واصفات تستخدمها بوعي
- Descriptors.MolWt: وزن جزيئي؛ انتبه للأملاح.
- Descriptors.MolLogP: تقدير Wildman–Crippen لا logP مقيس.
- Descriptors.TPSA: مساحة قطبية طوبولوجية ثنائية الأبعاد.
- NumHDonors / NumHAcceptors / NumRotatableBonds: تعاريف Lipinski-style في RDKit.
لماذا؟ — لماذا نرسم توزيع MW وlogP للمكتبة قبل docking؟
لترى إن كنت ستُثري الجزيئات الثقيلة الدهنية لأن المكتبة نفسها منحازة، لا لأن الجيب يطلب ذلك. التوزيع هو الضابط السالب للفرز.
ماذا لو؟ — ماذا لو حسبت MolWt على عمود SMILES فيه أملاح [Na+] دون تفكيك؟
ستُزيح توزيع الوزن وتقتل مركبات legitimate عند عتبة MW. استخدم تفكيك fragments وخذ أكبر جزء عضوي بقاعدة معلنة.
تمرين
اكتب فرعاً شرطياً يتخطى الصف إذا كان MolFromSmiles فاشلاً ويسجّل العدد.
مواضيع مرتبطة