يحتوي هذا المستودع على الطريقة من الطباعة المسبقة:
فهو يوفر حزمة progres
Python التي تتيح لك البحث في الهياكل مقابل قواعد البيانات الهيكلية المضمنة مسبقًا، وتسجيل أزواج من الهياكل ومجموعات البيانات المضمنة مسبقًا للبحث عنها. يستغرق البحث عادةً من ثانية إلى ثانيتين ويكون أسرع بكثير بالنسبة للاستعلامات المتعددة. بالنسبة لقاعدة بيانات AlphaFold، يستغرق التحميل الأولي للبيانات حوالي دقيقة واحدة، لكن البحث اللاحق يستغرق عُشر ثانية لكل استعلام.
يتم حاليًا توفير SCOpe وCATH وECOD وPDB بالكامل وهياكل AlphaFold لـ 21 كائنًا نموذجيًا ومجالات TED لقاعدة بيانات AlphaFold للبحث عنها. يتم البحث حسب المجال ولكن يمكن استخدام Chainsaw لتقسيم بنيات الاستعلام تلقائيًا إلى مجالات.
conda create -n prog python=3.9
conda activate prog
conda install pytorch=1.11 faiss-cpu -c pytorch
conda install pytorch-scatter pyg -c pyg
conda install kimlab::stride
pip install progres
، والذي سيقوم أيضًا بتثبيت Biopython وmmtf-python وeinops وPydantic إذا لم تكن موجودة بالفعل.PROGRES_DATA_DIR
لتغيير مكان تخزين هذه البيانات، على سبيل المثال إذا لم تتمكن من الكتابة إلى دليل الحزمة. تذكر أن تبقيه مضبوطًا في المرة التالية التي تقوم فيها بتشغيل Progress. وبدلاً من ذلك، يتوفر ملف Docker في دليل docker
.
في أنظمة Unix، سيتم إضافة progres
القابل للتنفيذ إلى المسار أثناء التثبيت. على نظام التشغيل Windows، يمكنك استدعاء البرنامج النصي bin/progres
باستخدام python إذا لم تتمكن من الوصول إلى الملف القابل للتنفيذ.
قم بتشغيل progres -h
لرؤية نص المساعدة progres {mode} -h
لرؤية نص المساعدة لكل وضع. تم توضيح الأوضاع أدناه ولكن هناك خيارات أخرى موضحة في نص المساعدة. على سبيل المثال، تقوم العلامة -d
بتعيين الجهاز ليتم تشغيله؛ هذه هي cpu
بشكل افتراضي نظرًا لأن هذا غالبًا ما يكون الأسرع في البحث، ولكن من المحتمل أن يكون cuda
أسرع عند تقسيم المجالات باستخدام Chainsaw أو البحث في العديد من الاستعلامات أو تضمين مجموعة بيانات. جرب كلاهما إذا كان الأداء مهمًا.
للبحث في ملف PDB query.pdb
(الذي يمكن العثور عليه في دليل data
) مقابل المجالات الموجودة في قاعدة بيانات SCOPe ومخرجات الطباعة:
progres search -q query.pdb -t scope95
# QUERY_NUM: 1
# QUERY: query.pdb
# DOMAIN_NUM: 1
# DOMAIN_SIZE: 150 residues (1-150)
# DATABASE: scope95
# PARAMETERS: minsimilarity 0.8, maxhits 100, chainsaw no, faiss no, progres v0.2.7
# HIT_N DOMAIN HIT_NRES SIMILARITY NOTES
1 d1a6ja_ 150 1.0000 d.112.1.1 - Nitrogen regulatory bacterial protein IIa-ntr {Escherichia coli [TaxId: 562]}
2 d2a0ja_ 146 0.9988 d.112.1.0 - automated matches {Neisseria meningitidis [TaxId: 122586]}
3 d3urra1 151 0.9983 d.112.1.0 - automated matches {Burkholderia thailandensis [TaxId: 271848]}
4 d3lf6a_ 154 0.9971 d.112.1.1 - automated matches {Artificial gene [TaxId: 32630]}
5 d3oxpa1 147 0.9968 d.112.1.0 - automated matches {Yersinia pestis [TaxId: 214092]}
...
-q
هو المسار إلى ملف بنية الاستعلام. وبدلاً من ذلك، -l
هو ملف نصي يحتوي على مسار ملف استعلام واحد في كل سطر وسيتم طباعة كل نتيجة على حدة. يعد هذا أسرع بكثير بالنسبة للاستعلامات المتعددة نظرًا لأن الإعداد يحدث مرة واحدة فقط ويمكن استخدام عدة عاملين. يتم أخذ السلسلة الأولى فقط في كل ملف بعين الاعتبار.-t
هي قاعدة البيانات المضمنة مسبقًا للبحث عنها. في الوقت الحالي، يجب أن يكون هذا إما إحدى قواعد البيانات المدرجة أدناه أو مسار الملف إلى مجموعة بيانات مضمنة مسبقًا تم إنشاؤها باستخدام progres embed
.-f
يحدد تنسيق ملف بنية الاستعلام ( guess
، pdb
، mmcif
، mmtf
أو coords
). افتراضيًا، يتم تخمين ذلك من امتداد الملف، مع اختيار pdb
إذا تعذر إجراء التخمين. تشير coords
إلى ملف نصي بإحداثيات ذرة Cα مفصولة بمسافة بيضاء على كل سطر.-s
هي درجة التقدم (0 -> 1) التي يتم فوقها إرجاع النتائج، الافتراضي 0.8. كما تمت مناقشته في الورقة، 0.8 يشير إلى نفس الطية.-m
هو الحد الأقصى لعدد النتائج التي يمكن إرجاعها، الافتراضي هو 100.-c
يشير إلى تقسيم بنية (هياكل) الاستعلام إلى مجالات باستخدام Chainsaw والبحث مع كل مجال على حدة. إذا لم يتم العثور على أي نطاقات بالمنشار، فلن يتم إرجاع أي نتائج. يتم أخذ السلسلة الأولى فقط في كل ملف بعين الاعتبار. قد يستغرق تشغيل المنشار بضع ثوانٍ. تتضمن الأدوات الأخرى لتقسيم بنيات الاستعلام إلى مجالات Merizo وSWORD2. يمكنك أيضًا تقسيم النطاقات يدويًا باستخدام برنامج مثل الأمر pdb_selres
من أدوات pdb.
يعتمد تفسير أوصاف النتائج على قاعدة البيانات التي يتم البحث فيها. غالبًا ما يتضمن اسم النطاق إشارة إلى ملف PDB المقابل، على سبيل المثال، يشير d1a6ja_ إلى سلسلة A لمعرف PDB 1A6J، ويمكن فتح هذا في عرض هيكل RCSB PDB للحصول على نظرة سريعة. بالنسبة لنطاقات TED لقاعدة بيانات AlphaFold، يمكن تنزيل الملفات من روابط مثل هذه حيث يكون AF-A0A6J8EXE6-F1
هو الجزء الأول من ملاحظات الدخول ويتبعه النطاق المتبقي للمجال.
قواعد البيانات المتوفرة مسبقًا والمضمنة هي:
اسم | وصف | عدد المجالات | وقت البحث (استعلام واحد) | وقت البحث (100 استعلام) |
---|---|---|---|---|
scope95 | مجموعة ASTRAL من نطاقات SCOpe 2.08 مجمعة بمعرف تسلسلي بنسبة 95% | 35,371 | 1.35 ثانية | 2.81 ثانية |
scope40 | مجموعة ASTRAL من نطاقات SCOpe 2.08 مجمعة بمعرف تسلسلي بنسبة 40% | 15,127 | 1.32 ثانية | 2.36 ثانية |
cath40 | نطاقات S40 غير الزائدة من CATH 23/11/22 | 31884 | 1.38 ثانية | 2.79 ثانية |
ecod70 | المجالات التمثيلية F70 من ECOD تتطور إلى 287 | 71,635 | 1.46 ثانية | 3.82 ثانية |
pdb100 | جميع سلاسل بروتين PDB اعتبارًا من 02/08/24 مقسمة إلى مجالات باستخدام بالمنشار | 1,177,152 | 2.90 ثانية | 27.3 ثانية |
af21org | تم تقسيم هياكل AlphaFold لـ 21 كائنًا نموذجيًا إلى مجالات بواسطة CATH-Assign | 338,258 | 2.21 ثانية | 11.0 ثانية |
afted | تم تقسيم هياكل قاعدة بيانات AlphaFold إلى مجالات بواسطة TED وتم تجميعها عند هوية تسلسلية بنسبة 50% | 53,344,209 | 67.7 ثانية | 73.1 ثانية |
وقت البحث مخصص لبروتين 150 بقايا (d1a6ja_ بتنسيق PDB) على وحدة المعالجة المركزية Intel i9-10980XE مع ذاكرة وصول عشوائي (RAM) سعة 256 جيجابايت وPyTorch 1.11. يتم تحديد الأوقات لـ 1 أو 100 استفسار. لاحظ أن afted
يستخدم بحث FAISS الشامل. هذا لا يغير النتائج التي تم العثور عليها، ولكن درجة التشابه ستختلف بمقدار صغير - راجع الورقة.
لحساب درجة التقدم بين مجالين من البروتين:
progres score struc_1.pdb struc_2.pdb
0.7265280485153198
-f
و -g
تنسيق الملف للبنيتين الأولى والثانية على النحو الوارد أعلاه ( guess
أو pdb
أو mmcif
أو mmtf
أو coords
).ترتيب المجالات لا يؤثر على النتيجة. تشير النتيجة 0.8 أو أعلى إلى نفس الطية.
لتضمين مجموعة بيانات من الهياكل، مما يسمح بالبحث عنها:
progres embed -l filepaths.txt -o searchdb.pt
-l
هو ملف نصي يحتوي على معلومات حول بنية واحدة في كل سطر، وسيكون كل منها بمثابة إدخال واحد في الإخراج. يجب أن تفصل المساحة البيضاء مسار الملف إلى البنية واسم المجال، مع اختياريًا يتم التعامل مع أي نص إضافي كملاحظة لعمود الملاحظات الخاص بالنتائج.-o
هو مسار ملف الإخراج لملف PyTorch الذي يحتوي على قاموس يحتوي على التضمينات والبيانات المرتبطة بها. يمكن قراءتها باستخدام torch.load
.-f
يحدد تنسيق الملف لكل بنية على النحو الوارد أعلاه ( guess
، pdb
، mmcif
، mmtf
أو coords
).مرة أخرى، يجب أن تتوافق الهياكل مع مجالات البروتين الفردية. يتم تخزين التضمينات كـ Float16، وهو ما ليس له أي تأثير ملحوظ على أداء البحث.
على سبيل المثال، يمكنك تشغيل الأمر أعلاه من دليل data
لإنشاء قاعدة بيانات ذات بنيتين.
يمكن أيضًا استخدام progres
في بايثون، مما يسمح بدمجه في طرق أخرى:
import progres as pg
# Search as above, returns a list where each entry is a dictionary for a query
# A generator is also available as pg.progres_search_generator
results = pg . progres_search ( querystructure = "query.pdb" , targetdb = "scope95" )
results [ 0 ]. keys () # dict_keys(['query_num', 'query', 'query_size', 'database', 'minsimilarity',
# 'maxhits', 'domains', 'hits_nres', 'similarities', 'notes'])
# Score as above, returns a float (similarity score 0 to 1)
pg . progres_score ( "struc_1.pdb" , "struc_2.pdb" )
# Pre-embed as above, saves a dictionary
pg . progres_embed ( structurelist = "filepaths.txt" , outputfile = "searchdb.pt" )
import torch
torch . load ( "searchdb.pt" ). keys () # dict_keys(['ids', 'embeddings', 'nres', 'notes'])
# Read a structure file into a PyTorch Geometric graph
graph = pg . read_graph ( "query.pdb" )
graph # Data(x=[150, 67], edge_index=[2, 2758], coords=[150, 3])
# Embed a single structure
embedding = pg . embed_structure ( "query.pdb" )
embedding . shape # torch.Size([128])
# Load and reuse the model for speed
model = pg . load_trained_model ()
embedding = pg . embed_structure ( "query.pdb" , model = model )
# Embed Cα coordinates and search with the embedding
# This is useful for using progres in existing pipelines that give out Cα coordinates
# queryembeddings should have shape (128) or (n, 128)
# and should be normalised across the 128 dimension
coords = pg . read_coords ( "query.pdb" )
embedding = pg . embed_coords ( coords ) # Can take a list of coords or a tensor of shape (nres, 3)
results = pg . progres_search ( queryembeddings = embedding , targetdb = "scope95" )
# Get the similarity score (0 to 1) between two embeddings
# The distance (1 - similarity) is also available as pg.embedding_distance
score = pg . embedding_similarity ( embedding , embedding )
score # tensor(1.) in this case since they are the same embedding
# Get all-v-all similarity scores between 1000 embeddings
embs = torch . nn . functional . normalize ( torch . randn ( 1000 , 128 ), dim = 1 )
scores = pg . embedding_similarity ( embs . unsqueeze ( 0 ), embs . unsqueeze ( 1 ))
scores . shape # torch.Size([1000, 1000])
توجد مجموعات البيانات والبرامج النصية لقياس الأداء (بما في ذلك الطرق الأخرى)، وإنشاء فهرس FAISS والتدريب عليه في دليل scripts
. النموذج المُدرب وقواعد البيانات المضمنة مسبقًا متاحة على Zenodo.
يستخدم تطبيق GNN المكافئ E(n) EGNN PyTorch. نقوم أيضًا بتضمين التعليمات البرمجية من SupContrast وChainsaw.
يرجى فتح القضايا أو التواصل مع أي ملاحظات. المساهمات عبر طلبات السحب هي موضع ترحيب.