Este repositorio contiene los códigos de nuestro artículo Diseño de anticuerpos condicionales como traducción de gráficos equivalentes en 3D. MEAN es la abreviatura de Red de Atención Equivariante Multicanal propuesta en nuestro artículo .
Hemos preparado el script para la configuración del entorno en scripts/setup.sh. Instale las dependencias con bash scripts/setup.sh
antes de ejecutar nuestro código.
Hemos proporcionado los datos resumidos utilizados en nuestro artículo de SAbDab, RAbD, SKEMPI_V2 en la carpeta de resúmenes; descargue todos los datos estructurales desde la página de descarga de SAbDab. Dado que SAbDab se actualiza semanalmente, también puede descargar el archivo de resumen más reciente desde su sitio web oficial. Las siguientes instrucciones supondrán que los datos de la estructura renumerados por imgt se encuentran en la carpeta all_structures/imgt .
Hemos proporcionado los scripts de shell para diferentes procedimientos de los experimentos, que se encuentran en la carpeta scripts o en la carpeta raíz de nuestro repositorio. Para los scripts en scripts , puede ejecutarlos sin argumentos para ver sus sugerencias de uso, que también se ilustrarán en README más adelante. Una cosa que podría necesitar explicación es el parámetro de modo que toma el valor de 100 o 111. 100 significa que solo se usa la cadena pesada en el contexto, y 111 significa que la cadena pesada, la cadena ligera y el epítopo se consideran en el contexto. El último es la configuración completa del diseño de CDR de unión a antígeno, mientras que el primero es solo para comparar con RefineGNN. <tipo de modelo> en los argumentos solo especifica el prefijo del directorio para guardar/cargar los puntos de control, usamos media en las siguientes secciones. Intente utilizar directorios absolutos al pasar argumentos a los scripts si encuentra problemas relacionados con las rutas.
Hemos proporcionado los guiones para la preparación de datos, la capacitación y la evaluación de k-fold.
Aquí hay un ejemplo para evaluar nuestra MEDIA:
bash scripts/prepare_data_kfold.sh summaries/sabdab_summary.tsv all_structures/imgt
GPU=0 bash scripts/k_fold_train.sh summaries 111 mean 9901
GPU=0 bash scripts/k_fold_eval.sh summaries 111 mean 0
Al ejecutar bash scripts/prepare_data_kfold.sh summaries/sabdab_summary.tsv all_structures/imgt
, el script copiará los pdbs en el resumen a summaries/pdb , transformará el resumen al formato json y generará divisiones de datos de 10 veces para cada cdr, lo que requiere ~5G de espacio. Si desea preparar los datos en otro directorio, simplemente copie el archivo de resumen allí y reemplace summaries/sabdab_summary.tsv con la nueva ruta. Además, para cada ejecución paralela de entrenamiento, los puntos de control se guardarán en la versión 0, 1,... Por lo tanto, debe especificar la identificación de la versión como último argumento de k_fold_eval.sh .
Antes de ejecutar esta tarea, ejecute al menos los comandos para descargar el resumen json de SAbDab en scripts/prepare_data_kfold.sh (línea 23-31). Supondremos que el archivo json está ubicado en resúmenes/sabdab_all.json.
Ejemplo:
bash scripts/prepare_data_rabd.sh summaries/rabd_summary.jsonl all_structures/imgt summaries/sabdab_all.json
GPU=0 MODE=111 DATA_DIR=summaries/cdrh3 bash train.sh mean 3
GPU=0 MODE=111 DATA_DIR=summaries/cdrh3 bash rabd_test.sh 0
También proporcionamos el punto de control capacitado utilizado en nuestro artículo en checkpoints/ckpt/rabd_cdrh3_mean.ckpt. Puede usarlo para realizar pruebas ejecutando GPU=0 MODE=111 DATA_DIR=summaries/cdrh3 bash rabd_test.sh 0 checkpoints/ckpt/rabd_cdrh3_mean.ckpt
. Los resultados se guardarán en la carpeta denominada resultados en el mismo directorio que el punto de control.
Antes de ejecutar esta tarea, ejecute al menos los comandos para descargar el resumen json de SAbDab en scripts/prepare_data_kfold.sh (línea 23-31). Supondremos que el archivo json está ubicado en resúmenes/sabdab_all.json.
Ejemplo:
bash scripts/prepare_data_skempi.sh summaries/skempi_v2_summary.jsonl all_structures/imgt summaries/sabdab_all.json
GPU=0 MODE=111 DATA_DIR=summaries bash train.sh mean 3
GPU=0 CKPT_DIR=summaries/ckpt/mean_CDR3_111/version_0 bash ita_train.sh
GPU=0 DATA_DIR=summaries bash ita_generate.sh summaries/ckpt/mean_CDR3_111/version_0/ita/iter_i.ckpt # specify the checkpoint from iteration i for testing
También proporcionamos el punto de control después del ajuste fino de ITA en checkpoints/ckpt/opt_cdrh3_mean.ckpt. Puede usarlo directamente para inferencia ejecutando GPU=0 DATA_DIR=summaries bash ita_generate.sh checkpoints/ckpt/opt_cdrh3_mean.ckpt
. Este script generará 100 candidatos optimizados para cada anticuerpo en sumaries/skempi_all.json e informará el top1 en términos de ddg previsto. Los pdbs de los candidatos optimizados se ubicarán en el mismo directorio del punto de control.
También proporcionamos el script para el diseño/optimización de un CDR único en scritps/design.py. El script requiere una pdb de entrada que contenga la cadena pesada, la cadena ligera y el antígeno. La pdb debe renumerarse utilizando el sistema IMGT de antemano, lo que se puede lograr mediante el script en data/ImmunoPDB.py de ANARCI. Aquí hay un ejemplo de diseño de CDR-H3 para 1ic7 pdb:
python ./data/ImmunoPDB.py -i data/1ic7.pdb -o 1ic7.pdb -s imgt # renumber the pdb
python ./scripts/design.py --pdb 1ic7.pdb --heavy_chain H --light_chain L
El pdb generado, así como un resumen de la secuencia CDR-H3, se guardarán en ./results. El punto de control predeterminado utilizado en el script es checkpoints/ckpt/rabd_cdrh3_mean.ckpt. Puede pasar su propio punto de control mediante el argumento --ckpt path/to/your/checkpoint
(por ejemplo, use opt_cdrh3_mean.ckpt para la optimización de CDR)
Además, el script puede alojar múltiples pdb como entradas, por ejemplo:
python ./scripts/design.py
--pdb pdb1 pdb2 ...
--heavy_chain Hchain1 Hchain2 ...
--light_chain Lchain1 Lchain2 ...
¡Gracias por su interés en nuestro trabajo!
No dude en preguntar cualquier pregunta sobre los algoritmos, códigos y problemas encontrados al ejecutarlos para que podamos hacerlo más claro y mejor. Puede crear un problema en el repositorio de github o contactarnos en [email protected].
Algunos códigos se toman prestados de repositorios existentes: