يحتوي هذا الريبو على رموز تصميم الجسم المضاد للذرة بالكامل من طرف إلى طرف.
هناك 3 متطلبات أساسية ضرورية و1 اختياري: إعداد بيئة كوندا (ضروري)، والحصول على الهدافين (ضروري)، وإعداد بيانات PDB للجسم المضاد (ضروري)، وتنزيل خطوط الأساس (اختياري).
1. البيئة
لقد قدمنا env.yml
لإنشاء بيئة conda لوقت التشغيل فقط عن طريق تشغيل:
conda env create -f env.yml
2. الهدافين
يرجى أولاً إعداد الهدافين لـ TMscore وDockQ على النحو التالي:
الكود المصدري لتقييم TMscore موجود في evaluation/TMscore.cpp
. يرجى تجميعها بواسطة:
g++ -static -O3 -ffast-math -lm -o evaluation/TMscore evaluation/TMscore.cpp
لإعداد برنامج DockQ Scorer، يرجى استنساخ github الرسمي الخاص به وتجميع المتطلبات الأساسية وفقًا لتعليماته. بعد ذلك، يرجى مراجعة المتغير DOCKQ_DIR
في configs.py
للإشارة إلى الدليل الذي يحتوي على مشروع DockQ (على سبيل المثال ./DockQ).
هداف lDDT موجود في بيئة كوندا، و
3. بيانات PDB
يرجى تنزيل جميع البيانات الهيكلية للأجسام المضادة من صفحة التنزيل الخاصة بـ SAbDab. الرجاء الدخول إلى علامة التبويب "التنزيلات" على يسار صفحة الويب وتنزيل الملف المضغوط المؤرشف للهياكل، ثم فك ضغطه:
wget https://opig.stats.ox.ac.uk/webapps/newsabdab/sabdab/archive/all/ -O all_structures.zip
unzip all_structures.zip
يجب أن تحصل على مجلد باسم all_structures بالتسلسل الهرمي التالي:
├── all_structures
│ ├── chothia
│ ├── imgt
│ ├── raw
يحتوي كل مجلد فرعي على ملفات pdb المعاد ترقيمها بالمخطط المقابل. نستخدم IMGT في الورقة، لذا فإن المجلد الفرعي imgt هو ما يهمنا.
نظرًا لأن معالجة ملفات pdb ثقيلة، عادةً ما يقوم الأشخاص بإنشاء ملف ملخص لقاعدة البيانات الهيكلية التي تسجل المعلومات الأساسية حول كل بنية للوصول السريع. لقد قدمنا ملخصًا لمجموعة البيانات التي تم استردادها في 12 نوفمبر 2022 ( summaries/sabdab_summary.tsv
). نظرًا لأنه يتم تحديث مجموعة البيانات أسبوعيًا، إذا كنت تريد استخدام الإصدار الأحدث، فيرجى تنزيله من الموقع الرسمي.
(اختياري) 4. خطوط الأساس
إذا كنت مهتمًا بخطوط الأساس، بما في ذلك المشاريع التالية ودمج تبعياتها وفقًا لاحتياجاتك:
بعد إضافة هذه المشاريع، يرجى أيضًا تذكر مراجعة المسارات المقابلة في ./configs.py
. لقد قدمنا أيضًا البرامج النصية لتسلسل الوحدات في ./scripts/pipeline_inference.sh
.
يتم توفير نقاط التفتيش المدربة لكل مهمة في صفحة إصدار جيثب. لاستخدامها، يرجى تنزيل ما يهمك وحفظه في المجلد ./checkpoints
. نحن نقدم الأسماء وتكوينات التدريب (تحت ./scripts/train/configs
) وأوصاف نقاط التفتيش على النحو التالي:
نقاط التفتيش | تكوين | وصف |
---|---|---|
cdrh3_design.ckpt | Single_cdr_design.json | تصميم CDR-H3 ملزم للحلقة |
struct_prediction.ckpt | struct_prediction.json | التنبؤ بالهيكل المعقد |
affinity_opt.ckpt & ddg_predictor.ckp | Single_cdr_opt.json | تحسين التقارب على CDR-H3 |
multi_cdr_design.ckpt | multi_cdr_design.json | تصميم كافة سجلات الإيداع المدمجة 6 في وقت واحد |
multi_cdr_opt.ckpt & multi_cdr_ddg_predictor | multi_cdr_opt.json | تحسين التقارب على جميع سجلات تسجيل المكالمات الستة في وقت واحد |
full_design.ckpt | full_design.json | تصميم المجال المتغير بأكمله، بما في ذلك منطقة الإطار |
بيانات
للمعالجة المسبقة للبيانات الأولية، نحتاج أولاً إلى إنشاء ملخصات لكل معيار بتنسيق json، ثم تقسيم مجموعات البيانات إلى مجموعات تدريب/تحقق/اختبار، وأخيرًا تحويل بيانات pdb إلى كائنات python. لقد قمنا بتوفير البرنامج النصي لجميع هذه الإجراءات في scripts/data_preprocess.sh
. لنفترض أن بيانات pdb المعاد ترقيمها بواسطة IMGT موجودة في all_structures/imgt/
، وأنك تريد تخزين البيانات المعالجة (~5G) في all_data
، يمكنك ببساطة تشغيل:
bash scripts/data_preprocess.sh all_structures/imgt all_data
والتي تستغرق حوالي ساعة واحدة لمعالجة مجموعة اختبار SAbDab وRAbD وIgfold وSKEMPI V2.0. من الطبيعي رؤية الأخطاء المبلغ عنها في هذه العملية لأن بعض هياكل الأجسام المضادة تم شرحها بشكل خاطئ أو لها تنسيق خاطئ، والتي سيتم إسقاطها في مرحلة تنظيف البيانات.
(اختياري) القالب المحفوظ
لقد قدمنا القالب المحفوظ من SAbDab في ./data/template.json
. إذا كنت مهتمًا بعملية الاستخراج، فمن الممكن أيضًا استخراج قالب محفوظ من مجموعة بيانات محددة (على سبيل المثال، مجموعة التدريب لمهمة تصميم CDR-H3) عن طريق تشغيل الأمر التالي:
python -m data.framework_templates
--dataset ./all_data/RAbD/train.json
--out ./data/new_template.json
نحن نستخدم SAbDab للتدريب وRAbD للاختبار. يرجى مراجعة الإعدادات أولاً في scripts/train/configs/cdr_design.json
(المسار إلى مجموعات البيانات والمعلمات الفائقة الأخرى) ثم تشغيل الأمر أدناه للتدريب:
GPU=0,1 bash scripts/train/train.sh scripts/train/configs/single_cdr_design.json
عادةً ما يستغرق إجراء التدريب حوالي 7 ساعات على وحدتي معالجة الرسوميات GeForce RTX 2080 Ti. كما قمنا بتوفير نقطة التفتيش المدربة عند checkpoints/cdrh3_design.ckpt
. ثم يرجى مراجعة المسار إلى مجموعة الاختبار في scripts/test/test.sh
وتشغيل الأمر التالي للاختبار:
GPU=0 bash scripts/test/test.sh ./checkpoints/cdrh3_design.ckpt ./all_data/RAbD/test.json ./results
والذي سيحفظ النتائج التي تم إنشاؤها في ./results
.
نحن نستخدم SAbDab للتدريب وIgFold للاختبار. تشبه إجراءات التدريب والاختبار تلك الخاصة بتصميم CDR-H3. بعد مراجعة الإعدادات في scripts/train/configs/cdr_design.json
و scripts/test/test.sh
كما ذكرنا من قبل، يرجى تشغيل الأمر التالي للتدريب:
GPU=0,1 bash scripts/train/train.sh scripts/train/configs/struct_prediction.json
عادةً ما يستغرق إجراء التدريب حوالي 8 ساعات على وحدتي معالجة الرسوميات GeForce RTX 2080 Ti. لقد قمنا أيضًا بتوفير نقطة التفتيش المدربة عند checkpoints/struct_prediction.ckpt
. ثم يرجى تشغيل الأمر التالي للاختبار:
GPU=0 bash scripts/test/test.sh ./checkpoints/struct_prediction.ckpt ./all_data/IgFold/test.json ./results
نحن نستخدم SAbDab للتدريب والأجسام المضادة في SKEMPI V2.0 للاختبار. وبالمثل، يرجى مراجعة الإعدادات أولاً في scripts/train/configs/affinity_opt.json
و scripts/test/optimize_test.sh
بالإضافة إلى scripts/train/train_predictor.sh
. ثم يرجى إجراء التدريب على dyMEANOPt (~ 5 ساعات):
GPU=0,1 bash scripts/train/train.sh scripts/train/configs/single_cdr_opt.json
ثم نحتاج إلى تدريب المتنبئ بـ ddg على تمثيلات المجمع المولد (~ 40 دقيقة):
GPU=0 bash scripts/train/train_predictor.sh checkpoints/cdrh3_opt.ckpt
لقد قمنا بتوفير نقاط التفتيش المدربة عند checkpoints/cdrh3_opt.ckpt
ونقاط checkpoints/cdrh3_ddg_predictor.ckpt
. يمكن إجراء اختبار التحسين من خلال:
GPU=0 bash scripts/test/optimize_test.sh checkpoints/cdrh3_opt.ckpt checkpoints/cdrh3_ddg_predictor.ckpt ./all_data/SKEMPI/test.json 0 50
والتي ستقوم بـ 50 خطوة من البحث عن التدرج دون قيود على الحد الأقصى لعدد المخلفات المتغيرة (قم بتغيير 0 إلى أي رقم لتقييد الحد الأعلى لـ
نحن نقدم أيضًا واجهة برمجة التطبيقات الاستدلالية والعروض التوضيحية للتطبيقات الشائعة في مشاكل العالم الحقيقي، والتي توجد في ./api
و ./demos
.
نحن نقدم واجهة برمجة تطبيقات التصميم وواجهة برمجة التطبيقات الأمثل في ./api
، والتي يمكن دمجها بسهولة في رموز بايثون.
يمكن استخدام واجهة برمجة تطبيقات التصميم ( ./api/design.py
) لإنشاء سجلات تسجيل المكالمات بالنظر إلى تسلسلات منطقة الإطار وملف PDB الخاص بالمستضد بالإضافة إلى تعريفات الحاتمة. سوف نستخدم السيناريو المثير للاهتمام لتوضيح استخدام واجهة برمجة تطبيقات التصميم .
نريد تصميم جسم مضاد يندمج مع الحالة المفتوحة للمستقبل العابر من الفصيلة الفرعية لقناة الكاتيون المحتملة V العضو 1 (TRPV1)، والذي يلعب دورًا حاسمًا في الألم الحاد والمستمر. بدلاً من صناعة الحاتمة على TRPV1 يدويًا، نحاول تقليد مادة رابطة موجودة وهي مادة سامة ذات عقدة مزدوجة (DkTx). ولذلك، نحتاج أولاً إلى استخراج تعريف الحاتمة عن طريق تحليل نمط الارتباط للسموم، ثم تصميم جسم مضاد بتسلسلات معينة من مناطق الإطار.
1. استخرج تعريف Epitope
نحن نقدم ملف PDB الخاص بمجمع الفئة الفرعية لقناة الكاتيون المحتملة للمستقبل العابر V العضو 1 (TRPV1، سلسلة ABCD) والتوكسين ذو العقدة المزدوجة (DkTx، سلسلة EF) في ./demos/data/7l2m.pdb
. يحتوي PDB الأصلي على 4 وحدات متماثلة، لذلك قمنا يدويًا بتقسيم السمين (السلسلة EF) في المنتصف لتشكيل 4 سلاسل متماثلة e,f,E,F. يحتاج كل جسم مضاد إلى التركيز على وحدة واحدة فقط. هنا نختار السلسلة E كمثال.
نقوم بإنشاء تعريف الحاتمة من خلال تحليل واجهة الربط للسلسلة E إلى TRPV1:
python -m api.binding_interface
--pdb ./demos/data/7l2m.pdb
--receptor A B C D
--ligand E
--out ./demos/data/E_epitope.json
يتم الآن حفظ تعريف الحلقة (أي بقايا TRPV1 على واجهة الربط) في ./demos/data/E_epitope.json
. من خلال تغيير قيمة الوسيطة "ligand" إلى e وf وF، يمكننا الحصول على تعريفات الحاتمة للوحدات الأخرى (لا تنس مراجعة مسار الإخراج أيضًا).
2. الحصول على تسلسل مناطق الإطار
اعتمادًا على الأغراض النهائية لتصميم الجسم المضاد، قد تكون المناطق الإطارية ذات الخصائص الفيزيائية والكيميائية المختلفة مرغوبة. وبما أننا هنا نقدم فقط حالة إثبات المفهوم، فإننا نختار عشوائيًا واحدة من مجموعة البيانات الموجودة:
heavy chain (H): ' QVQLKESGPGLLQPSQTLSLTCTVSGISLSDYGVHWVRQAPGKGLEWMGIIGHAGGTDYNSNLKSRVSISRDTSKSQVFLKLNSLQQEDTAMYFC----------WGQGIQVTVSSA '
light chain (L): ' YTLTQPPLVSVALGQKATITCSGDKLSDVYVHWYQQKAGQAPVLVIYEDNRRPSGIPDHFSGSNSGNMATLTISKAQAGDEADYYCQSWDGTNSAWVFGSGTKVTVLGQ '
تم إخفاء CDR-H3 الأصلي بواسطة "-". ويدعم أيضًا تصميم العديد من سجلات تسجيل المكالمات (CDRs)، وهو ما سيتم توضيحه لاحقًا.
3. تصميم سجلات الإيداع
الخطوة الأخيرة هي تصميم سجلات تسجيل المكالمات (CDRs) باستخدام واجهة برمجة التطبيقات (API) للتصميم :
from api . design import design
ckpt = './checkpoints/cdrh3_design.ckpt'
root_dir = './demos/data'
pdbs = [ os . path . join ( root_dir , '7l2m.pdb' ) for _ in range ( 4 )]
toxin_chains = [ 'E' , 'e' , 'F' , 'f' ]
remove_chains = [ toxin_chains for _ in range ( 4 )]
epitope_defs = [ os . path . join ( root_dir , c + '_epitope.json' ) for c in toxin_chains ]
identifiers = [ f' { c } _antibody' for c in toxin_chains ]
# use '-' for masking amino acids
frameworks = [
(
( 'H' , 'QVQLKESGPGLLQPSQTLSLTCTVSGISLSDYGVHWVRQAPGKGLEWMGIIGHAGGTDYNSNLKSRVSISRDTSKSQVFLKLNSLQQEDTAMYFC----------WGQGIQVTVSSA' ),
( 'L' , 'YTLTQPPLVSVALGQKATITCSGDKLSDVYVHWYQQKAGQAPVLVIYEDNRRPSGIPDHFSGSNSGNMATLTISKAQAGDEADYYCQSWDGTNSAWVFGSGTKVTVLGQ' )
)
for _ in pdbs
] # the first item of each tuple is heavy chain, the second is light chain
design ( ckpt = ckpt , # path to the checkpoint of the trained model
gpu = 0 , # the ID of the GPU to use
pdbs = pdbs , # paths to the PDB file of each antigen (here antigen is all TRPV1)
epitope_defs = epitope_defs , # paths to the epitope definitions
frameworks = frameworks , # the given sequences of the framework regions
out_dir = root_dir , # output directory
identifiers = identifiers , # name of each output antibody
remove_chains = remove_chains , # remove the original ligand
enable_openmm_relax = True , # use openmm to relax the generated structure
auto_detect_cdrs = False ) # manually use '-' to represent CDR residues
تتم إضافة هذه الرموز أيضًا كمثال في ./api/design.py
، بحيث يمكنك تشغيلها مباشرةً عن طريق:
python -m api.design
نستخدم هنا "-" لوضع علامة على CDR-H3 يدويًا، ولكن يمكنك أيضًا تعيين auto_detect_cdrs=True
للسماح بتحديد CDR تلقائيًا بواسطة نظام ترقيم IMGT. سيتم استخلاص أنواع سجلات تفاصيل المكالمات (CDRs) المطلوب تصميمها تلقائيًا من نقطة التفتيش المحددة. حاليًا، تدعم واجهة برمجة التطبيقات (API) إعادة تصميم وحدات CDR فردية أو متعددة، بالإضافة إلى تصميم الجسم المضاد الكامل (عن طريق تمرير "-" * length
كمدخل).
سيؤدي تمكين الاسترخاء Openmm إلى إبطاء عملية التوليد كثيرًا، ولكنه سيصحح أطوال الروابط وزواياها لتتوافق مع القيود المادية.
تعد واجهة برمجة التطبيقات الأمثل ( ./api/optimize.py
) واضحة ومباشرة. نقوم بتحسين ./demos/data/1nca.pdb
كمثال:
from api . optimize import optimize , ComplexSummary
ckpt = './checkpoints/cdrh3_opt.ckpt'
predictor_ckpt = './checkpoints/cdrh3_ddg_predictor.ckpt'
root_dir = './demos/data/1nca_opt'
summary = ComplexSummary (
pdb = './demos/data/1nca.pdb' ,
heavy_chain = 'H' ,
light_chain = 'L' ,
antigen_chains = [ 'N' ]
)
optimize (
ckpt = ckpt , # path to the checkpoint of the trained model
predictor_ckpt = predictor_ckpt , # path to the checkpoint of the trained ddG predictor
gpu = 0 , # the ID of the GPU to use
cplx_summary = summary , # summary of the complex as well as its PDB file
num_residue_changes = [ 1 , 2 , 3 , 4 , 5 ], # generate 5 samples, changing at most 1, 2, 3, 4, and 5 residues, respectively
out_dir = root_dir , # output directory
batch_size = 16 , # batch size
num_workers = 4 , # number of workers to use
optimize_steps = 50 # number of steps for gradient desend
)
تمت إضافة الرموز الخاصة بهذا المثال أيضًا إلى ./api/optimize.py
، بحيث يمكنك تشغيلها مباشرة عن طريق:
python -m api.optimize
ثم سوف تحصل على النتائج التالية:
├── demos/data/1nca_opt
│ ├── 1nca_0_1.pdb
│ ├── 1nca_1_2.pdb
│ ├── 1nca_2_3.pdb
│ ├── 1nca_3_4.pdb
│ ├── 1nca_4_5.pdb
│ ├── 1nca_original.pdb
حيث 1nca_original.pdb
هو المجمع الأصلي، و 1nca_a_b.pdb
يعني
تتنبأ واجهة برمجة التطبيقات (API) للتنبؤ بالبنية المعقدة ( ./api/structure_prediction.py
) بالبنية المعقدة بالنظر إلى المستضد، وتسلسل السلسلة الثقيلة والسلسلة الخفيفة، وتعريف الحاتمة. لا يزال الالتحام العالمي يمثل تحديًا كبيرًا، لذا نقوم بتضييق النطاق ليقتصر على خلاصة الاهتمام. نتوقع ./demos/data/1nca.pdb
كمثال:
from api . structure_prediction import structure_prediction
ckpt = './checkpoints/struct_prediction.ckpt'
root_dir = './demos/data'
n_sample = 10 # sample 10 conformations
pdbs = [ os . path . join ( root_dir , '1nca_antigen.pdb' ) for _ in range ( n_sample )]
epitope_defs = [ os . path . join ( root_dir , '1nca_epitope.json' ) for _ in range ( n_sample )]
identifiers = [ f'1nca_model_ { i } ' for i in range ( n_sample )]
seqs = [
(
( 'H' , 'QIQLVQSGPELKKPGETVKISCKASGYTFTNYGMNWVKQAPGKGLKWMGWINTNTGEPTYGEEFKGRFAFSLETSASTANLQINNLKNEDTATFFCARGEDNFGSLSDYWGQGTTVTVSS' ),
( 'L' , 'DIVMTQSPKFMSTSVGDRVTITCKASQDVSTAVVWYQQKPGQSPKLLIYWASTRHIGVPDRFAGSGSGTDYTLTISSVQAEDLALYYCQQHYSPPWTFGGGTKLEIK' )
)
for _ in pdbs
] # the first item of each tuple is heavy chain, the second is light chain
structure_prediction (
ckpt = ckpt , # path to the checkpoint of the trained model
gpu = 0 , # the ID of the GPU to use
pdbs = pdbs , # paths to the PDB file of each antigen (here antigen is all TRPV1)
epitope_defs = epitope_defs , # paths to the epitope definitions
seqs = seqs , # the given sequences of the framework regions
out_dir = root_dir , # output directory
identifiers = identifiers , # name of each output antibody
enable_openmm_relax = True ) # use openmm to relax the generated structure
تمت إضافة رموز هذا المثال أيضًا إلى ./api/structure_prediction.py
، بحيث يمكنك تشغيلها مباشرةً عن طريق:
python -m api.structure_prediction
ثم سوف تحصل على النتائج التالية:
├── demos/data
│ ├── 1nca_model_0.pdb
│ ├── 1nca_model_1.pdb
│ ├── 1nca_model_2.pdb
│ ├── ...
حيث ينبغي أن يكون هناك ما مجموعه 10 مطابقة العينات. لاحظ أنه قد يتم تجاهل المخلفات القليلة الأولى أو الأخيرة في النتائج إذا كانت خارج المجال المتغير وفقًا لنظام ترقيم IMGT.
يتم استخدام العرض في المختبر بشكل شائع لاختيار طفرات الربط من مكتبات الأجسام المضادة. نقوم هنا بتنفيذ إصدار silico باستخدام واجهة برمجة التطبيقات للتصميم عن طريق إنشاء المرشحين وتصفيتهم من مجموعة البيانات الموجودة مقابل المستضد باستخدام تعريف الحاتمة. علاوة على ذلك، نحتاج إلى مقياس لتقييم مدى ارتباط الجسم المضاد الناتج بالهدف. نستخدم هنا FoldX كمتنبئ بالتقارب، لذا لتشغيل هذا العرض التوضيحي، قد تحتاج أولاً إلى تنزيله من الموقع الرسمي ومراجعة المسار في ./configs.py
وفقًا لذلك. مازلنا نستخدم مثال TRPV1 في القسم السابق، ونستخدم معيار RAbD كمكتبة الأجسام المضادة التي توفر مناطق الإطار:
python -m demos.display
--ckpt checkpoints/multi_cdr_design.ckpt
--pdb demos/data/7l2m.pdb
--epitope_def demos/data/E_epitope.json
--library ./all_data/rabd_all.json
--n_sample 30
--save_dir demos/display
--gpu 0
والذي سينتج عنه 30 مرشحًا مع تقاربهم الذي تنبأ به FoldX.
شكرا لاهتمامك بعملنا!
لا تتردد في طرح أي أسئلة حول الخوارزميات والأكواد وكذلك المشكلات التي واجهتها أثناء تشغيلها حتى نتمكن من جعلها أكثر وضوحًا وأفضل. يمكنك إما إنشاء مشكلة في github repo أو الاتصال بنا على [email protected].
الملفات أدناه مستعارة من المستودعات الموجودة:
evaluation/TMscore.cpp
: https://zhanggroup.org/TM-score/evaluation/ddg
: https://github.com/HeliXonProtein/binding-ddg-predictor