Este repositorio contiene el método de la preimpresión:
Proporciona el paquete progres
Python que le permite buscar estructuras en bases de datos estructurales preintegradas, calificar pares de estructuras y conjuntos de datos preintegrados para realizar búsquedas. La búsqueda suele tardar entre 1 y 2 segundos y es mucho más rápida para consultas múltiples. Para la base de datos AlphaFold, la carga inicial de datos tarda alrededor de un minuto, pero la búsqueda posterior tarda una décima de segundo por consulta.
Actualmente, se proporcionan SCOPe, CATH, ECOD, todo el PDB, las estructuras AlphaFold para 21 organismos modelo y los dominios TED de la base de datos AlphaFold para realizar búsquedas. La búsqueda se realiza por dominio, pero Chainsaw se puede utilizar para dividir automáticamente las estructuras de consulta en dominios.
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
, que también instalará Biopython, mmtf-python, einops y pydantic si aún no están presentes.PROGRES_DATA_DIR
para cambiar dónde se almacenan estos datos, por ejemplo, si no puede escribir en el directorio del paquete. Recuerde mantenerlo configurado la próxima vez que ejecute Progres. Alternativamente, hay un archivo Docker disponible en el directorio docker
.
En sistemas Unix, el progres
ejecutable se agregará a la ruta durante la instalación. En Windows, puede llamar al script bin/progres
con Python si no puede acceder al ejecutable.
Ejecute progres -h
para ver el texto de ayuda y progres {mode} -h
para ver el texto de ayuda para cada modo. Los modos se describen a continuación, pero hay otras opciones descritas en el texto de ayuda. Por ejemplo, el indicador -d
configura el dispositivo para ejecutarse; Esta es cpu
de forma predeterminada, ya que suele ser la más rápida para realizar búsquedas, pero es probable que cuda
sea más rápido al dividir dominios con Chainsaw, buscar muchas consultas o incrustar un conjunto de datos. Pruebe ambos si el rendimiento es importante.
Para buscar un archivo PDB query.pdb
(que se puede encontrar en el directorio data
) en dominios en la base de datos SCOPe e imprimir el resultado:
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
es la ruta al archivo de estructura de consulta. Alternativamente, -l
es un archivo de texto con una ruta de archivo de consulta por línea y cada resultado se imprimirá por turno. Esto es considerablemente más rápido para consultas múltiples, ya que la configuración solo ocurre una vez y se pueden utilizar varios trabajadores. Sólo se considera la primera cadena de cada archivo.-t
es la base de datos preintegrada para buscar. Actualmente, esta debe ser una de las bases de datos que se enumeran a continuación o la ruta del archivo a un conjunto de datos preincrustado generado con progres embed
.-f
determina el formato de archivo de la estructura de consulta ( guess
, pdb
, mmcif
, mmtf
o coords
). De forma predeterminada, esto se adivina a partir de la extensión del archivo, y se elige pdb
si no se puede adivinar. coords
se refiere a un archivo de texto con las coordenadas de un átomo de Cα separadas por espacios en blanco en cada línea.-s
es la puntuación de Progreso (0 -> 1) por encima de la cual devolver resultados, por defecto 0,8. Como se analiza en el artículo, 0,8 indica el mismo pliegue.-m
es el número máximo de visitas a devolver, el valor predeterminado es 100.-c
indica dividir las estructuras de consulta en dominios con Chainsaw y buscar con cada dominio por separado. Si no se encuentran dominios con Chainsaw, no se devolverán resultados. Sólo se considera la primera cadena de cada archivo. Ejecutar Chainsaw puede tardar unos segundos. Otras herramientas para dividir estructuras de consulta en dominios incluyen Merizo y SWORD2. También puede dividir dominios manualmente utilizando software como el comando pdb_selres
de pdb-tools.
La interpretación de las descripciones de los resultados depende de la base de datos en la que se busca. El nombre de dominio a menudo incluye una referencia al archivo PDB correspondiente, por ejemplo, d1a6ja_ se refiere a la cadena A del PDB ID 1A6J, y esto se puede abrir en la vista de estructura de RCSB PDB para obtener una vista rápida. Para los dominios TED de la base de datos AlphaFold, los archivos se pueden descargar desde enlaces como este, donde AF-A0A6J8EXE6-F1
es la primera parte de las notas de éxito y va seguida del rango residual del dominio.
Las bases de datos preintegradas disponibles son:
Nombre | Descripción | Número de dominios | Tiempo de búsqueda (1 consulta) | Tiempo de búsqueda (100 consultas) |
---|---|---|---|---|
scope95 | Conjunto ASTRAL de dominios SCOPe 2.08 agrupados al 95% de ID de secuencia | 35.371 | 1,35 segundos | 2,81 segundos |
scope40 | Conjunto ASTRAL de dominios SCOPe 2.08 agrupados con un 40 % de ID de secuencia | 15.127 | 1,32 segundos | 2,36 segundos |
cath40 | Dominios S40 no redundantes de CATH 23/11/22 | 31.884 | 1,38 segundos | 2,79 segundos |
ecod70 | Dominios representativos F70 de ECOD development287 | 71.635 | 1,46 segundos | 3,82 segundos |
pdb100 | Todas las cadenas de proteínas de PDB a partir del 24/02/24 se dividieron en dominios con Chainsaw | 1.177.152 | 2,90 segundos | 27,3 segundos |
af21org | Estructuras AlphaFold para 21 organismos modelo divididos en dominios por CATH-Assign | 338,258 | 2,21 segundos | 11,0 segundos |
afted | Las estructuras de la base de datos AlphaFold se dividen en dominios por TED y se agrupan con un 50% de identidad de secuencia | 53.344.209 | 67,7 segundos | 73,1 segundos |
El tiempo de búsqueda es para una proteína de 150 residuos (d1a6ja_ en formato PDB) en una CPU Intel i9-10980XE con 256 GB de RAM y PyTorch 1.11. Se dan tiempos para 1 o 100 consultas. Tenga en cuenta que afted
utiliza una búsqueda FAISS exhaustiva. Esto no cambia los resultados encontrados, pero la puntuación de similitud diferirá en una pequeña cantidad (consulte el artículo).
Para calcular la puntuación de Progres entre dos dominios de proteínas:
progres score struc_1.pdb struc_2.pdb
0.7265280485153198
-f
y -g
determinan el formato de archivo para la primera y segunda estructuras como se indicó anteriormente ( guess
, pdb
, mmcif
, mmtf
o coords
).El orden de los dominios no afecta la puntuación. Una puntuación de 0,8 o superior indica el mismo pliegue.
Para incrustar un conjunto de datos de estructuras, permitiendo buscarlo:
progres embed -l filepaths.txt -o searchdb.pt
-l
es un archivo de texto con información sobre una estructura por línea, cada una de las cuales será una entrada en la salida. El espacio en blanco debe separar la ruta del archivo a la estructura y el nombre de dominio, y opcionalmente cualquier texto adicional se trata como una nota para la columna de notas de los resultados.-o
es la ruta del archivo de salida para el archivo PyTorch que contiene un diccionario con las incrustaciones y los datos asociados. Se puede leer con torch.load
.-f
determina el formato de archivo de cada estructura como se indicó anteriormente ( guess
, pdb
, mmcif
, mmtf
o coords
).Nuevamente, las estructuras deberían corresponder a dominios proteicos únicos. Las incrustaciones se almacenan como Float16, lo que no tiene ningún efecto perceptible en el rendimiento de la búsqueda.
Como ejemplo, puede ejecutar el comando anterior desde el directorio data
para generar una base de datos con dos estructuras.
progres
también se puede utilizar en Python, lo que permite integrarlo en otros métodos:
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])
Los conjuntos de datos y scripts para la evaluación comparativa (incluidos otros métodos), la generación de índices FAISS y la capacitación se encuentran en el directorio scripts
. El modelo entrenado y las bases de datos preintegradas están disponibles en Zenodo.
La implementación del GNN equivalente a E (n) utiliza EGNN PyTorch. También incluimos código de SupContrast y Chainsaw.
Abra los problemas o póngase en contacto con cualquier comentario. Las contribuciones a través de solicitudes de extracción son bienvenidas.