Configuración sencilla de DRAM2 para que corra en el HPC de OMICA 🖥️. Facilito.
Este repositorio consiste de los siguientes archivos:
easy-DRAM2/
├── scripts/
│ ├── META_install_DRAM2.sh
│ └── META_MAG_distill_DRAM2.slurm
└── configs/
├── META_nf_DRAM2.config
└── META_omica_slurm.config
| Archivo | Descripción |
|---|---|
META_install_DRAM2.sh |
Script que copia el repositorio de DRAM2 a tu home y coloca META_omica_slurm.config dentro de DRAM2. |
META_MAG_distill_DRAM2.slurm |
Script que ejecuta el pipeline principal de Nextflow/DRAM2. |
META_nf_DRAM2.config |
Archivo de configuración de Nextflow. Aquí puedes personalizar los parámetros del pipeline. |
META_omica_slurm.config |
Archivo con parámetros de SLURM. No recomiendo editarlo; el script de META_install_DRAM2.sh lo copia a donde debe de ir y listo. |
Para poder correr DRAM2 en el servidor de OMICA, hay unos prerrequisitos que se deben cumplir. El servidor ya los cumple:
- Docker:
En el servidor de OMICA, Docker está instalado sólo en el nodo
nodo5. - Nextflow:
Se instaló Nextflow en el ambiente de conda
DRAMV2. - Bases de datos de referencia: Al día de hoy, las siguientes bases de datos están descargadas en el servidor: Kofam, Pfam, UniRef, Sulfur, Metals, Methyl, Camper, dbCAN y FeGenie. Puedes elegir las bases de datos a usar en tu flujo.
Sitúate dentro de la carpeta en la que desees clonar este repositorio. Clona:
git clone ruben1294/easy-DRAM2.git
cd easy-DRAM2Corre el script META_install_DRAM2.sh:
sbash scripts/META_install_DRAM2.shEste script va a clonar el repositorio de DRAM2 en tu home, y dentro de él, va a colocar una copia del archivo META_omica_slurm.config. Ahora debes configurar dos archivos para personalizar tus rutas y parámetros del pipeline. Recomiendo que los modifiques en este orden:
Este script lanza el job maestro y ejecuta el orquestador, que es Nextflow, quien a su vez pasa los subjobs a SLURM. Actualmente, Docker sólo está instalado en el nodo5, por esta razón, debemos dejarlo disponible para que sólo ahí se ejecuten los subjobs del pipeline. Entonces, el script del orquestador debe ejecutarse en cualquier nodo, excepto en el nodo5. Esto lo hacemos con:
#SBATCH --exclude=nodo5Modifica el job-name y el tiempo a reservar a tu gusto:
#SBATCH --job-name=MAG_distill_DRAM2
#SBATCH --time=160:00:00Nextflow usa pocos recursos. Por esta razón, recomiendo dejar los valors de nodes, ntasks, cpus-per-task y mem intactos:
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=2
#SBATCH --mem=2GAhora, modifica las rutas a los logs de output y error para que se guarden donde desees:
#SBATCH --output=/LUSTRE/bioinformatica_data/metagenomica/DRAM2_%j.out
#SBATCH --error=/LUSTRE/bioinformatica_data/metagenomica/DRAM2_%j.errSi quieres usar un archivo .env con rutas definidas, coloca la ruta del archivo y descomenta la sección con el encabezado Configuration Section:
#log_info "Loading configuration..."
#CONFIG_FILE="/LUSTRE/bioinformatica_data/metagenomica/config.env"
#if [[ ! -f "$CONFIG_FILE" ]]; then
# log_error "Configuration file not found: $CONFIG_FILE"
# exit 1
#fi
#source "$CONFIG_FILE"
#log_info "Configuration file sourced successfully"Configura las siguientes rutas:
export OUT_DIR="/LUSTRE/bioinformatica_data/metagenomica" # Directorio de salida (donde se colocarán las salidas del pipeline)
export RAW_DIR="/LUSTRE/bioinformatica_data/metagenomica" # Directorio donde están los MAGs a procesar
export QUALITY_DIR="/LUSTRE/bioinformatica_data/metagenomica" # Directorio donde están los resultados de calidad
export TAXONOMY_DIR="/LUSTRE/bioinformatica_data/metagenomica" # Directorio donde están los resultados de la clasificación taxonómicaEso es todo lo que tienes que hacer en este archivo.
-resume sirve para que DRAM2 guarde una caché de tu pipeline. Si llegaras a cancelar el job maestro (el del orquestador), puedes relanzar el script más adelante, y DRAM2 reanudará el pipeline en donde se quedó. La caché se guarda en:
~/.nextflow/assets/WrightonLabCSU/DRAM/work
Si quieres borrar la caché para que el script corra todo desde cero, simplemente borra la carpeta work. Puedes hacerlo sin preocupaciones.
Aquí es donde puedes configurar el pipeline para que corra los módulos que desees, que use las bases de datos de referencia que desees, etcétera. Te recomiendo modificar sólo lo que menciono a continuación.
Lo primero es elegir la ruta a tu directorio de trabajo. Las rutas a los archivos crudos (MAGs), reporte de calidad y reporte de taxonomía, van a estar en función de esta ruta:
WORK_DIR = "/LUSTRE/bioinformatica_data/metagenomica/"El pipeline de DRAM2 se divide en módulos. Puedes encender o apagar los que desees correr. Sin embargo, hay algunas condiciones que se deben cumplir si quieres usar algunos módulos. Para poder correr el módulo de traits, forzosamente se deben tener tres bases de datos: KEGG, FeGenie y Sulfur. Al día de hoy, no he podido conseguir la base de datos de KEGG, por lo que no he podido correr este módulo. Además, los módulos summarize y visualize encienden el módulo traits, por lo que también deben estar apagados. De lo contrario, obtendrás este error: When using Adjectives, make sure you use Kegg, FeGenie, and Sulfur Databases.
Esto es lo que hace cada módulo:
- rename: agrega el nombre del MAG en el encabezado de cada
contig, antes del ID actual. - annotate: asigna funciones biológicas a los genes predichos, usando como referencia las bases de datos que más adelante definas.
- summarize: el "destilado" del metabolismo. Resume las anotaciones del módulo de annotate en rutas metabólicas, módulos funcionales, etcétera, por MAG.
- visualize: genera gráficos con los resultados de summarize.
- traits: intenta extraer rasgos biológicos a partir de las anotaciones. Existen varias hojas llamadas "
distill sheets", con una serie de reglas para definir los traits de cada MAG. - qc: usa
barrnapytRNAscan-SEpara identificar rDNAs y tRNAs, respectivamente. - call: usa
Prodigalpara predecir marcos abiertos de lectura, genes y secuencias proteicas.
Si quieres usar tus propias salidas de Prodigal, puedes apagar el módulo call y definir la ruta a tus archivos aquí:
input_genes = "$GENES_DIR"Modifica la ruta input_fasta para que vaya a la carpeta donde están tus MAGs:
input_fasta = "${WORK_DIR}/01_raw_files"Puedes modificar los parámetros con los que correrá Prodigal:
prodigal_mode = 'single'
prodigal_trans_table = 11
min_contig_len = 2500En la parte de Annotation Database Flags, puedes elegir qué base de datos de referencia usar para la anotación funcional de proteínas. Puedes encender o apagar a tu gusto. No obstante, al día de hoy, hay un bug con la base de datos de Pfam. Si la enciendes, te dará el error: PFAM database is currently disabled in this pipeline due to a bug in the DRAM2 implementation with the PFAM database. It will be re-enabled in a future release.
En la sección de Taxonomy and Bin Quality ingest, puedes definir rutas a tu reporte de taxonomía y de calidad:
taxa = "${WORK_DIR}/03_taxonomy_assigned/classify/summary.tsv"
bin_quality = "${WORK_DIR}/02_mags_quality/quality_report.tsv"Estos resultados se incorporan al reporte raw-annotations.tsv.
Si tienes apagado el módulo de qc y deseas incluir tus propios resultados de la búsqueda de rDNAs y tRNAs, puedes incluir las rutas a los archivos aquí:
rrnas = null
trnas = nullEn la parte de SLURM options, el único parámetro que recomiendo modificar (si lo deseas), es la partición, si no vas a usar la de 'cicese':
partition = 'cicese'El parámetro de queue_size es para definir cuántos subjobs se ejecutarán al mismo tiempo. Aquí es importante mencionar que los subjobs usarán la memoria RAM disponible del nodo repartida entre ellos, por lo que a mayor cantidad de subjobs, menor RAM podrá usar cada uno. A mí me ha funcionado usar un valor conservador:
queue_size = 3Esto es todo lo que te sugiero modificar en el archivo.
Una vez que hayas revisado esos parámetros, puedes correr el script de SLURM:
sbatch scripts/META_MAG_distill_DRAM2.slurmComo habrás notado, el script está diseñado para que coloque las salidas en la carpeta que elijas, pero el comando de Nextflow se debe ejecutar en la carpeta del repositorio. El script hace todo eso, no necesitas hacer nada más.
Espero que funcione.