이 저장소에는 사전 인쇄의 방법이 포함되어 있습니다.
이는 사전 내장된 구조 데이터베이스, 구조 점수 쌍 및 검색용 사전 내장 데이터 세트에 대해 구조를 검색할 수 있는 progres
Python 패키지를 제공합니다. 검색에는 일반적으로 1~2초가 소요되며 여러 쿼리의 경우 훨씬 더 빠릅니다. AlphaFold 데이터베이스의 경우 초기 데이터 로드에는 약 1분이 걸리지만 후속 검색에는 쿼리당 10분의 1초가 걸립니다.
현재 SCOPe, CATH, ECOD, 전체 PDB, 21개 모델 유기체에 대한 AlphaFold 구조 및 AlphaFold 데이터베이스 TED 도메인이 검색용으로 제공됩니다. 검색은 도메인별로 수행되지만 전기톱을 사용하여 쿼리 구조를 도메인으로 자동 분할할 수 있습니다.
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
설정하여 이 데이터가 저장되는 위치를 변경할 수 있습니다. 다음에 Progres를 실행할 때 이 설정을 유지하는 것을 잊지 마세요. 또는 docker
디렉터리에서 Docker 파일을 사용할 수 있습니다.
Unix 시스템에서는 설치 중에 실행 가능한 progres
경로에 추가됩니다. Windows에서는 실행 파일에 액세스할 수 없는 경우 Python을 사용하여 bin/progres
스크립트를 호출할 수 있습니다.
도움말 텍스트를 보려면 progres -h
실행하고, 각 모드에 대한 도움말 텍스트를 보려면 progres {mode} -h
실행하세요. 모드는 아래에 설명되어 있지만 도움말 텍스트에는 다른 옵션이 설명되어 있습니다. 예를 들어 -d
플래그는 실행할 장치를 설정합니다. 이는 검색 시 가장 빠르기 때문에 기본적으로 cpu
입니다. 그러나 전기톱으로 도메인을 분할하거나 많은 쿼리를 검색하거나 데이터 세트를 삽입할 때 cuda
더 빠를 가능성이 높습니다. 성능이 중요하다면 둘 다 시도해 보세요.
SCOPe 데이터베이스의 도메인에 대해 PDB 파일 query.pdb
( data
디렉터리에서 찾을 수 있음)를 검색하고 출력을 인쇄하려면 다음을 수행하세요.
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
히트를 반환할 상위 Progres 점수(0 -> 1)이며 기본값은 0.8입니다. 논문에서 논의한 것처럼 0.8은 동일한 접힘을 나타냅니다.-m
반환할 최대 적중 수이며 기본값은 100입니다.-c
전기톱을 사용하여 쿼리 구조를 도메인으로 분할하고 각 도메인을 별도로 검색함을 나타냅니다. Chainsaw에서 도메인을 찾을 수 없으면 결과가 반환되지 않습니다. 각 파일의 첫 번째 체인만 고려됩니다. 전기톱을 실행하는 데 몇 초가 걸릴 수 있습니다. 쿼리 구조를 도메인으로 분할하는 다른 도구로는 Merizo 및 SWORD2가 있습니다. pdb-tools의 pdb_selres
명령과 같은 소프트웨어를 사용하여 수동으로 도메인을 분할할 수도 있습니다.
적중 설명 해석은 검색 중인 데이터베이스에 따라 다릅니다. 도메인 이름에는 해당 PDB 파일에 대한 참조가 포함되는 경우가 많습니다. 예를 들어 d1a6ja_는 PDB ID 1A6J 체인 A를 나타내며 이는 RCSB PDB 구조 보기에서 열어 빠르게 확인할 수 있습니다. AlphaFold 데이터베이스 TED 도메인의 경우 AF-A0A6J8EXE6-F1
이 히트 노트의 첫 번째 부분이고 그 뒤에 도메인의 나머지 범위가 이어지는 링크에서 파일을 다운로드할 수 있습니다.
사용 가능한 사전 내장 데이터베이스는 다음과 같습니다.
이름 | 설명 | 도메인 수 | 검색 시간(쿼리 1개) | 검색 시간(쿼리 100개) |
---|---|---|---|---|
scope95 | 95% seq ID로 클러스터링된 SCOPe 2.08 도메인의 ASTRAL 세트 | 35,371 | 1.35초 | 2.81초 |
scope40 | 40% seq ID로 클러스터링된 SCOPe 2.08 도메인의 ASTRAL 세트 | 15,127 | 1.32초 | 2.36초 |
cath40 | CATH 23/11/22의 S40 비중복 도메인 | 31,884 | 1.38초 | 2.79초 |
ecod70 | ECOD 개발의 F70 대표 도메인287 | 71,635 | 1.46초 | 3.82초 |
pdb100 | 2024년 2월 8일 현재 모든 PDB 단백질 사슬은 전기톱을 사용하여 도메인으로 분할됩니다. | 1,177,152 | 2.90초 | 27.3초 |
af21org | CATH-Assign을 통해 도메인으로 분할된 21개 모델 유기체의 AlphaFold 구조 | 338,258 | 2.21초 | 11.0초 |
afted | AlphaFold 데이터베이스 구조는 TED에 의해 도메인으로 분할되고 50% 서열 동일성으로 클러스터링됩니다. | 53,344,209 | 67.7초 | 73.1초 |
검색 시간은 256GB RAM 및 PyTorch 1.11을 갖춘 Intel i9-10980XE CPU에서 150개 잔기 단백질(PDB 형식의 d1a6ja_)에 대한 것입니다. 시간은 1개 또는 100개의 쿼리에 대해 제공됩니다. afted
는 철저한 FAISS 검색을 사용합니다. 발견된 히트 수는 변경되지 않지만 유사성 점수는 약간씩 달라집니다. 논문을 참조하세요.
두 단백질 도메인 간의 Progres 점수를 계산하려면:
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
Python에서도 사용할 수 있으므로 다른 메서드에 통합할 수 있습니다.
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에서 사용할 수 있습니다.
E(n)-등변 GNN의 구현은 EGNN PyTorch를 사용합니다. SupContrast 및 Chainsaw의 코드도 포함되어 있습니다.
문제를 열거나 피드백이 있으면 연락주세요. 풀 요청을 통한 기여를 환영합니다.