Repositori ini berisi metode dari pra-cetak:
Ini menyediakan paket progres
Python yang memungkinkan Anda mencari struktur berdasarkan database struktural yang telah disematkan sebelumnya, menilai pasangan struktur, dan kumpulan data yang telah disematkan sebelumnya untuk pencarian. Pencarian biasanya memerlukan waktu 1-2 detik dan jauh lebih cepat untuk beberapa kueri. Untuk database AlphaFold, pemuatan data awal memerlukan waktu sekitar satu menit, namun pencarian selanjutnya memerlukan sepersepuluh detik per kueri.
Saat ini SCOPe, CATH, ECOD, seluruh PDB, struktur AlphaFold untuk 21 organisme model dan domain TED database AlphaFold disediakan untuk pencarian. Pencarian dilakukan berdasarkan domain tetapi Chainsaw dapat digunakan untuk secara otomatis membagi struktur kueri menjadi domain.
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
, yang juga akan menginstal Biopython, mmtf-python, einops dan pydantic jika belum ada.PROGRES_DATA_DIR
untuk mengubah tempat penyimpanan data ini, misalnya jika Anda tidak dapat menulis ke direktori paket. Ingatlah untuk tetap mengaturnya saat berikutnya Anda menjalankan Progres. Alternatifnya, file Docker tersedia di direktori docker
.
Pada sistem Unix, progres
yang dapat dieksekusi akan ditambahkan ke jalur selama instalasi. Di Windows Anda dapat memanggil skrip bin/progres
dengan python jika Anda tidak dapat mengakses file yang dapat dieksekusi.
Jalankan progres -h
untuk melihat teks bantuan dan progres {mode} -h
untuk melihat teks bantuan untuk setiap mode. Mode dijelaskan di bawah tetapi ada opsi lain yang diuraikan dalam teks bantuan. Misalnya tanda -d
menyetel perangkat untuk berjalan; ini adalah cpu
secara default karena ini sering kali merupakan yang tercepat untuk pencarian, tetapi cuda
kemungkinan akan lebih cepat ketika memisahkan domain dengan Chainsaw, mencari banyak kueri, atau menyematkan kumpulan data. Coba keduanya jika kinerja itu penting.
Untuk mencari file PDB query.pdb
(yang dapat ditemukan di direktori data
) terhadap domain di database SCOPe dan mencetak keluaran:
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
adalah jalur ke file struktur kueri. Alternatifnya, -l
adalah file teks dengan satu jalur file kueri per baris dan setiap hasil akan dicetak secara bergantian. Ini jauh lebih cepat untuk beberapa kueri karena penyiapan hanya dilakukan satu kali dan beberapa pekerja dapat digunakan. Hanya rantai pertama di setiap file yang dipertimbangkan.-t
adalah database yang sudah tertanam untuk dicari. Saat ini, database tersebut harus berupa salah satu database yang tercantum di bawah atau jalur file ke kumpulan data yang telah disematkan sebelumnya yang dihasilkan dengan progres embed
.-f
menentukan format file dari struktur kueri ( guess
, pdb
, mmcif
, mmtf
, atau coords
). Secara default, ini ditebak dari ekstensi file, dengan pdb
dipilih jika tebakan tidak dapat dilakukan. coords
mengacu pada file teks dengan koordinat atom Cα yang dipisahkan oleh spasi di setiap baris.-s
adalah skor Kemajuan (0 -> 1) yang di atasnya untuk mengembalikan pukulan, defaultnya adalah 0,8. Seperti yang dibahas di makalah, 0,8 menunjukkan lipatan yang sama.-m
adalah jumlah maksimum pukulan yang akan dikembalikan, defaultnya adalah 100.-c
menunjukkan untuk membagi struktur kueri menjadi domain dengan Chainsaw dan mencari dengan setiap domain secara terpisah. Jika tidak ada domain yang ditemukan dengan Chainsaw, tidak ada hasil yang akan dikembalikan. Hanya rantai pertama di setiap file yang dipertimbangkan. Menjalankan Chainsaw mungkin memerlukan waktu beberapa detik. Alat lain untuk membagi struktur kueri menjadi domain termasuk Merizo dan SWORD2. Anda juga dapat membagi domain secara manual menggunakan perangkat lunak seperti perintah pdb_selres
dari pdb-tools.
Menafsirkan deskripsi hit bergantung pada database yang dicari. Nama domain sering kali menyertakan referensi ke file PDB yang sesuai, misalnya d1a6ja_ mengacu pada PDB ID 1A6J rantai A, dan ini dapat dibuka di tampilan struktur RCSB PDB untuk melihat sekilas. Untuk domain TED database AlphaFold, file dapat diunduh dari tautan seperti ini di mana AF-A0A6J8EXE6-F1
adalah bagian pertama dari catatan hit dan diikuti oleh rentang sisa domain.
Basis data bawaan yang tersedia adalah:
Nama | Keterangan | Jumlah domain | Waktu pencarian (1 kueri) | Waktu pencarian (100 kueri) |
---|---|---|---|---|
scope95 | Kumpulan domain SCOPe 2.08 ASTRAL berkerumun pada 95% seq ID | 35.371 | 1,35 detik | 2,81 detik |
scope40 | Kumpulan domain SCOPe 2.08 ASTRAL berkerumun pada ID seq 40%. | 15.127 | 1,32 detik | 2,36 detik |
cath40 | S40 domain non-redundan dari CATH 23/11/22 | 31.884 | 1,38 detik | 2,79 detik |
ecod70 | Domain perwakilan F70 dari ECOD mengembangkan287 | 71.635 | 1,46 detik | 3,82 detik |
pdb100 | Semua rantai protein PDB pada 02/08/24 dipecah menjadi domain dengan Chainsaw | 1.177.152 | 2,90 detik | 27,3 detik |
af21org | Struktur AlphaFold untuk 21 organisme model dipecah menjadi beberapa domain oleh CATH-Assign | 338.258 | 2,21 detik | 11,0 dtk |
afted | Struktur database AlphaFold dipecah menjadi beberapa domain oleh TED dan dikelompokkan pada identitas urutan 50%. | 53.344.209 | 67,7 detik | 73,1 detik |
Waktu pencarian adalah untuk 150 protein residu (d1a6ja_ dalam format PDB) pada CPU Intel i9-10980XE dengan RAM 256 GB dan PyTorch 1.11. Waktu diberikan untuk 1 atau 100 pertanyaan. Perhatikan bahwa afted
menggunakan pencarian FAISS yang mendalam. Ini tidak mengubah kecocokan yang ditemukan, namun skor kemiripannya akan sedikit berbeda - lihat makalahnya.
Untuk menghitung skor Kemajuan antara dua domain protein:
progres score struc_1.pdb struc_2.pdb
0.7265280485153198
-f
dan -g
menentukan format file untuk struktur pertama dan kedua seperti di atas ( guess
, pdb
, mmcif
, mmtf
atau coords
).Urutan domain tidak mempengaruhi skor. Skor 0,8 atau lebih tinggi menunjukkan lipatan yang sama.
Untuk menyematkan kumpulan data struktur, sehingga memungkinkan pencariannya berdasarkan:
progres embed -l filepaths.txt -o searchdb.pt
-l
adalah file teks dengan informasi tentang satu struktur per baris, yang masing-masing akan menjadi satu entri dalam output. Spasi harus memisahkan jalur file ke struktur dan nama domain, dengan teks tambahan apa pun secara opsional diperlakukan sebagai catatan untuk kolom catatan hasil.-o
adalah jalur file keluaran untuk file PyTorch yang berisi kamus dengan embeddings dan data terkait. Itu dapat dibaca dengan torch.load
.-f
menentukan format file setiap struktur seperti di atas ( guess
, pdb
, mmcif
, mmtf
atau coords
).Sekali lagi, strukturnya harus sesuai dengan domain protein tunggal. Penyematan disimpan sebagai Float16, yang tidak memiliki pengaruh nyata terhadap kinerja pencarian.
Sebagai contoh, Anda dapat menjalankan perintah di atas dari direktori data
untuk menghasilkan database dengan dua struktur.
progres
juga dapat digunakan dalam Python, memungkinkannya untuk diintegrasikan ke dalam metode lain:
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])
Kumpulan data dan skrip untuk pembandingan (termasuk untuk metode lain), pembuatan dan pelatihan indeks FAISS ada di direktori scripts
. Model terlatih dan database yang sudah tertanam tersedia di Zenodo.
Implementasi GNN ekuivalen E(n) menggunakan EGNN PyTorch. Kami juga menyertakan kode dari SupContrast dan Chainsaw.
Silakan buka masalah atau hubungi masukan apa pun. Kontribusi melalui permintaan tarik dipersilakan.