Componentes de las herramientas de ensamblaje de secuencia del genoma
Los ensambladores del genoma, el metagenoma y el transcriptoma van desde completamente integrados hasta completamente modulares. El ensamblaje totalmente modular tiene una serie de beneficios. Este repositorio es un trabajo continuo para definir algunos puntos de control importantes en una tubería de ensamblaje modular, junto con formatos de entrada/salida estándar. Por ahora tenemos un sesgo hacia los datos de secuenciación de tipo Illumina (lecturas individuales, lecturas emparejadas, pares de pareja, 10x), pero nuestro objetivo es hacer que los componentes también sean compatibles con las lecturas de la tercera generación.
Siéntase libre de contribuir a través de la solicitud de extracción.
FASTA/FASTQ : Los atributos opcionales se encuentran en el campo de comentarios y se formatean como en Sam, XX:x:xxxx . El campo de comentarios sigue un espacio en el encabezado.
FASTQ : las lecturas de extremo emparejado están entrelazadas y pueden comprimirse. Los códigos de barras de lectura vinculados pueden indicarse con la etiqueta BX .
FASTA : La secuencia no debe envolverse. El archivo FASTA debe indexarse (FAI).
GFA : GFA2 se prefiere sobre GFA1. Los campos de secuencia pueden estar vacíos ( * ). Las secuencias pueden almacenarse en un archivo FASTA adyacente, nombrado por ejemplo assembly.gfa y assembly.fa .
SAM/BAM : Los archivos SAM/BAM se ordenan por posición e indexados, a menos que se indique lo contrario. Se pueden indicar diferentes bibliotecas de secuenciación con el atributo RG del Grupo Read.
Un ensamblaje está contenido en un solo directorio. Los archivos se nombran de acuerdo con el patrón [0-9]+_[az]+.[az.]+ . Los prefijos numéricos son de longitud con trama cero e idéntica, e indican la etapa del ensamblaje. Sigue un nombre descriptivo y una extensión de tipo de archivo. Los archivos pueden estar comprimidos.
0_pe.fq.gz
1_unitig.gfa
2_denoise.gfa
3_debulge.gfa 3_debulge.bam 3_debulge.bam.bai
4_link.gfa
5_scaffold.gfa
6_assembly.gfa 6_assembly.fa 6_assembly.fa.fai 6_assembly.bam 6_assembly.bam.bai
Type1 (registro [atributos], ...) + ... → type2 (registro [atributos], ...) + ...
Esta etapa requiere un archivo de Tipo1 y produce un archivo de Tipo2. Por ejemplo, estime el número de copias de Unitigs. Un archivo GFA de segmentos y bordes de secuencia y un archivo BAM o PAF de lecturas asignadas produce un archivo GFA con números de copias estimados de unidades.
GFA (SE) + BAM/PAF → GFA (S [CN], E)
Elimine los artefactos de secuenciación específicos de cada tecnología de secuenciación. Mejore la calidad de las lecturas de entrada con una pérdida mínima de información, por ejemplo, variantes heterocigotas.
Fastq → Fastq
Evaluar la calidad de la secuenciación y estimar los parámetros del genoma.
Fastq → TSV
Errores de secuenciación correctos en lecturas.
Fastq → Fastq
Ensamble unidades de unidades mediante ensamblaje o superposición de gráfico de Bruijn (DBG), diseño, consenso (OLC).
Fastq → GFA (SE)
Elimine los errores de secuenciación del gráfico de ensamblaje. Retener variantes.
GFA (SE) → GFA (SE)
Identificar y/o eliminar variantes del gráfico.
GFA (SE) → GFA (SE)
Se puede seleccionar una sola secuencia o ruta a través del bulto, o el bulto puede reemplazarse por una secuencia de consenso, posiblemente utilizando códigos de ambigüedad IUPAC para representar el consenso.
El mapa lee en las secuencias de ensamblaje.
FastQ + GFA (S)/FASTA → BAM
Estime el número de copia de cada segmento de secuencia.
GFA (SE) + BAM/PAF → GFA (S [CN], E)
Tenga en cuenta que la profundidad media de cobertura es más robusta que la profundidad media de cobertura de los artefactos de alineación causados por repeticiones colapsadas, lecturas desalineadas y otros problemas.
Expanda las repeticiones y el orden y el orientar segmentos de secuencia en contigs y andamios.
FASTA/GFA (SE) + BAM/PAF → FASTA/GFA (SE)
Los contigs son secuencias contiguas sin huecos. La creación de contigs requiere expandir la secuencia repetitiva que se encuentra entre los contigs únicos. Los contigs se derivan de rutas contiguas de segmentos de secuencia sin huecos. Los andamios se derivan de rutas discontigios de segmentos de secuencia con espacios entre los segmentos.
Una herramienta puede implementar andamios como una sola etapa de ensamblaje. Sin embargo, el andamiaje puede verse compuesto por las tres etapas distintas: unidades de enlace, unidades de orden y orientación para construir rutas y contratar rutas para crear nuevos segmentos de secuencia.
Ensamble la secuencia encontrada en los espacios de andamio entre contigs adyacentes.
FASTQ + FASTA/GFA (S) → FASTA/GFA (S)
Mapee las lecturas al ensamblaje y corrija los errores de ensamblaje.
FASTQ + FASTA/GFA (SE) + BAM/PAF → FASTA/GFA (SE)
GFA (SE) → PNG/SVG
Evaluar la contigüidad y la corrección del ensamblaje.
FASTA/GFA (S) → TSV
Una herramienta puede combinar múltiples etapas de ensamblaje en una sola herramienta.
ema preprocesslongranger basicsga preqc bfcBcool.pysga index | sga correct ABYSS o ABYSS-P o abyss-bloom-dbg luego AdjList o abyss-overlapbcalm | convertToGFA.pysga index | sga filter | sga overlap | sga assemble abyss-filtergraphgfaview -t PopBubbles | MergeContigsgfaview -b abyss-mapbgreatbwa memema align para lecturas vinculadaslongranger align para lecturas vinculadasminimap2unicycler_align sga-astat.py abyss-fixmate | DistanceEst para lecturas de pares y pares de parejaabyss-longseqdist para lecturas largasarcs para lecturas vinculadas abyss-scaffold o SimpleGraph | MergePathssga scaffold MergeContigssga scaffold2fasta abyss-sealer abyss-fac y abyss-samtobreakLos datos son de Unicycler: "Estas son lecturas sintéticas de los plásmidos A, B y E del Asamblea del Genoma Shigella Sonnei 53G". Shigella sonnei plasmids (lecturas sintéticas), short_reads_1.fastq.gz, short_reads_2.fastq.gz
Ensamble las lecturas de extremo emparejado usando Abyss. Esta tubería Abyss es un subconjunto mínimo de herramientas ejecutadas por la tubería abyss-pe completa.
cd components
k=99
./download_test_data.sh
./abyss_unitigs.sh 0_pe.fq.gz $k
./abyss_contigs_from_unitigs.sh 1_unitig.gfa2 1_unitig.fa $k
./abyss_scaffolding.sh 6_contigs.fa 6_contigs.gfa $k
# Visualize the assembly graph
Bandage load 9_assembly.gfa1 & Esto ensambla se lee usando BCALM para unitigs, luego usa el resto de la tubería Abyss del ejemplo anterior.
cd components
k=99
./download_test_data.sh
./bcalm.sh 0_pe.fq.gz $k
./abyss_contigs_from_unitigs.sh 1_unitig.gfa2 1_unitig.fa $k
./abyss_scaffolding.sh 6_contigs.fa 6_contigs.gfa $k
# Visualize the assembly graph
Bandage load 9_assembly.gfa1 & # Download Unicycler test data
# input: nothing
# output: 0_pe.fq.gz
# install dependencies
brew install seqtk curl
seqtk mergepe <( curl -Ls https://github.com/rrwick/Unicycler/raw/master/sample_data/short_reads_1.fastq.gz ) <( curl -Ls https://github.com/rrwick/Unicycler/raw/master/sample_data/short_reads_2.fastq.gz ) | gzip > 0_pe.fq.gz-
# input: [reads] [k]
# e.g. 0_pe.fq.gz 99
#
# output: 1_unitig.gfa2
# contains unitigs created by BCALM
# make sure bcalm and convertToGFA.py are in your path (will later be automatically done by 'conda install bcalm' when someone makes bcalm availaon conda)
reads= $1
k= $2
# Install the dependencies
pip install gfapy
# Unitig with BCALM
bcalm -in $1 -out 1_bcalm -kmer-size $k -abundance-min 1 -verbose 0
mv 1_bcalm.unitigs.fa 1_unitig.fa
convertToGFA.py 1_unitig.fa 1_unitig.gfa $k
# convert bcalm output to gfa2
(printf " HtVN:Z:1.0n " ; tail -n +2 1_unitig.gfa) > 1_unitig.gfa1
gfapy-convert 1_unitig.gfa1 > 1_unitig.gfa2
# cleanup
rm -f 1_bcalm * glue * 1_bcalm.h5-
# input: [reads] [k]
# e.g. 0_pe.fq.gz 99
#
# output: 1_unitig.gfa2 1_unitig.fa
# contains unitigs created by abyss
reads= $1
k= $2
# setting up
brew install abyss
# Unitig
gunzip -c $reads | ABYSS -k $k -t0 -c0 -b0 -o 1_unitig.fa -
AdjList --gfa2 -k $k 1_unitig.fa > 1_unitig.gfa
mv 1_unitig.gfa 1_unitig.gfa2-
# input: [unitigs.gfa2] [unitigs.fa] [k]
# e.g. 1_unitig.gfa2 1_unitigs.fa 100
#
# output: 6_contigs.gfa2 and 6_contigs.fa
# contigs produced by ABySS
unitigs_gfa2= $1
unitigs_fa= $2
k= $3
# install dependencies
brew install abyss pigz samtools
# Denoise
abyss-filtergraph --gfa2 -k $k -t200 -c3 -g 2_denoise.gfa $unitigs_gfa2
# Collapse variants
PopBubbles --gfa2 -k $k -p0.99 -g 3_debulge.gfa $unitigs_fa 2_denoise.gfa > 3_debulge.path
MergeContigs --gfa2 -k $k -g 3_debulge.gfa -o 3_debulge.fa $unitigs_fa 2_denoise.gfa 3_debulge.path
# Map reads
gunzip -c 0_pe.fq.gz | abyss-map - 3_debulge.fa | pigz > 3_debulge.sam.gz
# Link unitigs
gunzip -c 3_debulge.sam.gz | abyss-fixmate -h 4_link.tsv | samtools sort -Osam | DistanceEst --dist -k $k -s500 -n1 4_link.tsv > 4_link.dist
# Resolve repeats
samtools faidx 3_debulge.fa
SimpleGraph -k $k -s500 -n5 -o 5_resolverepeats-1.path 3_debulge.gfa 4_link.dist
MergePaths -k $k -o 5_resolverepeats.path 3_debulge.fa.fai 5_resolverepeats-1.path
# Contract paths
MergeContigs --gfa2 -k $k -g 6_contigs.gfa2 -o 6_contigs.fa 3_debulge.fa 3_debulge.gfa 5_resolverepeats.path
# cleanup (comment to keep files)
rm -f 5_resolverepeats.path 3_debulge.gfa 3_debulge.fa 3_debulge.fa.fai 3_debulge.path 5_resolverepeats-1.path 4_link.dist 4_link.tsv 2_denoise.gfa 3_debulge.sam.gz -
# input: [unitigs_gfa1] [unitigs_gfa2] [unitigs_fa] [k]
# e.g. 1_unitig.gfa1
# output: 6_contigs.gfa 6_contigs.fa
# 'contigs' generated by popping bubbles and removing tips using gfa1 tool
# https://github.com/lh3/gfa1
unitigs_gfa1= $1
unitigs_gfa2= $2
unitigs_fa= $3
k= $4
# remove tips (2 rounds), misc trimming, pop bubbles,
# but then cannot use -u to build unitigs of simplified graph (i.e. contigs), because it doesn't output sequences
gfaview -t -m -t -b $unitigs_gfa1 > 2_denoised.gfa1
# make the output of gfaview properly gfa1 and gfa2
sed -i ' s/L1/l1/g ' 2_denoised.gfa1 # gfapy wants lower case flags
sed -i ' s/L2/l2/g ' 2_denoised.gfa1
sort -n -k 2 2_denoised.gfa1 > 2_denoised.gfa1.sorted # because ABySS GFA parser wants S lines in same order as in FASTA file
head -n 1 $unitigs_gfa2 > 2_denoised.gfa2 # copy header as gfaview doesnt
gfapy-convert 2_denoised.gfa1.sorted >> 2_denoised.gfa2
# would like to use use rgfa to do compaction but itdoesnt work on the Singella example
# ./rgfa-mergelinear 2_denoised.gfa1 > 6_contigs.gfa
# convert gfa to fasta
awk ' $1 ~/S/ {print ">"$2"n"$3} ' 2_denoised.gfa1.sorted > 2_denoised.fa
# just contract paths in the 2_denoised.gfa2, using ABySS as wasn't able to do it with neither gfaview nor rgfa-mergelinear
abyss-filtergraph --gfa2 -k $k --assemble 2_denoised.gfa2 2_denoised.fa -g 3_denoised.gfa2 > 3_denoised.paths
MergeContigs --gfa2 -k $k 2_denoised.fa 3_denoised.gfa2 3_denoised.paths -o 6_contigs.fa -g 6_contigs.gfa2
# cleanup (comment to keep files)
rm -f 2_denoised.gfa1.sorted 2_denoise.gfa1 2_denoised.gfa1 3_denoised.paths 3_denoised.gfa2 # input: [contigs.fa] [contigs.gfa] [k]
# e.g. 6_contigs.fa 6_contigs.gfa 99
#
# output: 9_assembly.gfa and 9_assembly.gfa1
# scaffolds assembly using abyss scaffolder in GFA2 and GFA1 format
contigs_fa= $1
contigs_gfa= $2
k= $3
# Map reads
gunzip -c 0_pe.fq.gz | abyss-map - $contigs_fa | pigz > 6_contigs.sam.gz
# Link unitigs
gunzip -c 6_contigs.sam.gz | abyss-fixmate -h 7_link.tsv | samtools sort -Osam | DistanceEst --dot -k $k -s500 -n1 7_link.tsv > 7_link.gv
# Order and orient
abyss-scaffold -k $k -s500-1000 -n5-10 $contigs_gfa 7_link.gv > 8_scaffold.path
# Contract paths
MergeContigs --gfa2 -k $k -g 9_assembly.gfa -o 9_assembly.fa $contigs_fa $contigs_gfa 8_scaffold.path
# Compute assembly metrics
abyss-fac 9_assembly.fa
# Convert GFA2 to GFA1
abyss-todot --gfa1 9_assembly.gfa > 9_assembly.gfa1
# cleanup (comment to remove)
rm -f 6_contigs.sam.gz 7_link.gv 7_link.tsv 8_scaffold.path 8_scaffold.path