Componentes das ferramentas de montagem de sequência do genoma
Os montadores do genoma, metagenoma e transcriptoma variam de totalmente integrado a totalmente modular. A montagem totalmente modular tem vários benefícios. Este repositório é um trabalho em andamento para definir alguns pontos de verificação importantes em um pipeline de montagem modular, juntamente com os formatos de entrada/saída padrão. Por enquanto, temos um viés para dados de sequenciamento do tipo Illumina (leituras únicas, leituras emparelhadas, mate-pares, 10x), mas pretendemos fazer com que os componentes também sejam compatíveis com as leituras da 3ª geração.
Sinta-se à vontade para contribuir por meio de solicitações de tração.
FASTA/FASTQ : Os atributos opcionais são encontrados no campo de comentários e formatados como em sam, XX:x:xxxx . O campo de comentários segue um espaço no cabeçalho.
FASTQ : As leituras de extremidade pareada são intercaladas e podem ser compactadas. Os códigos de barras de leitura vinculados podem ser indicados com a tag BX .
FASTA : A sequência não deve ser embrulhada em linha. O arquivo fasta deve ser indexado (FAI).
GFA : GFA2 é preferido em relação ao GFA1. Os campos de sequência podem estar vazios ( * ). As seqüências podem ser armazenadas em um arquivo fasta adjacente, nomeado por exemplo, assembly.gfa e assembly.fa .
SAM/BAM : Os arquivos SAM/BAM são classificados por posição e indexados, salvo indicação em contrário. Diferentes bibliotecas de sequenciamento podem ser indicadas com o atributo RG do grupo de leitura.
Uma montagem está contida em um único diretório. Os arquivos são nomeados de acordo com o padrão [0-9]+_[az]+.[az.]+ . Os prefixos numéricos são de comprimento com zero e idênticos, e indicam o estágio da montagem. Um nome descritivo e extensão do tipo de arquivo seguem. Os arquivos podem ser compactados.
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
TIPO1 (registro [Atributos],…) +… → Tipo2 (registro [Atributos],…) +…
Este estágio requer um arquivo do tipo1 e produz um arquivo do tipo2. Por exemplo, estimar o número de cópias de unidades. Um arquivo GFA de segmentos e bordas de sequência e um arquivo BAM ou PAF de leituras mapeadas produz um arquivo GFA com números estimados de cópia de unidades.
GFA (SE) + BAM/PAF → GFA (S [CN], E)
Remova os artefatos de sequenciamento específicos para cada tecnologia de sequenciamento. Melhore a qualidade das leituras de entrada com perda mínima de informações, por exemplo, variantes heterozigotas.
FastQ → FastQ
Avalie a qualidade do sequenciamento e estimar parâmetros do genoma.
FastQ → TSV
Erros de sequenciamento corretos nas leituras.
FastQ → FastQ
Montar unidades de montagem ou sobreposição ou sobreposição do gráfico de De Bruijn (DBG), montagem de layout, consenso (OLC).
FastQ → GFA (SE)
Remova os erros de seqüenciamento do gráfico de montagem. Reter variantes.
GFA (SE) → GFA (SE)
Identifique e/ou remova variantes do gráfico.
GFA (SE) → GFA (SE)
Uma única sequência ou caminho através da protuberância pode ser selecionada, ou a protuberância pode ser substituída por uma sequência de consenso, possivelmente usando códigos de ambiguidade da IUPAC para representar o consenso.
O mapa lê para as seqüências de montagem.
FastQ + GFA (S)/FASTA → BAM
Estime o número de cópias de cada segmento de sequência.
GFA (SE) + BAM/PAF → GFA (S [CN], E)
Observe que a profundidade mediana da cobertura é mais robusta do que a profundidade média de cobertura dos artefatos de alinhamento causados por repetições em colapso, leituras desalinhadas e outros problemas.
Expanda repetições e pedidos e orientam segmentos de sequência em contigs e andaimes.
FASTA/GFA (SE) + BAM/PAF → FASTA/GFA (SE)
Contigs são sequências contíguas sem lacunas. A criação de contigs requer a expansão da sequência repetitiva encontrada entre os contigs exclusivos. Os contigs são derivados de caminhos contíguos dos segmentos de sequência sem lacunas. Os andaimes são derivados de caminhos descontíguos dos segmentos de sequência com lacunas entre os segmentos.
Uma ferramenta pode implementar o andaime como um único estágio de montagem. No entanto, o andaime pode ser visto como composto pelos três estágios distintos: unidades de ligação, unidades de ordem e orientação para construir caminhos e contratar caminhos para criar novos segmentos de sequência.
Monte a sequência encontrada nas lacunas de andaimes entre os contigs adjacentes.
FastQ + FASTA/GFA (S) → FASTA/GFA (S)
Mapeie as leituras para os erros de montagem e correção.
FastQ + fastA/GFA (SE) + BAM/PAF → FASTA/GFA (SE)
GFA (SE) → PNG/SVG
Avalie a contiguidade e a correção da montagem.
FASTA/GFA (S) → TSV
Uma ferramenta pode combinar vários estágios de montagem em uma única ferramenta.
ema preprocesslongranger basicsga preqc bfcBcool.pysga index | sga correct ABYSS ou ABYSS-P ou abyss-bloom-dbg então AdjList ou abyss-overlapbcalm | convertToGFA.pysga index | sga filter | sga overlap | sga assemble abyss-filtergraphgfaview -t PopBubbles | MergeContigsgfaview -b abyss-mapbgreatbwa memema align para leituras vinculadaslongranger align para leituras vinculadasminimap2unicycler_align sga-astat.py abyss-fixmate | DistanceEst para leituras de extremidade emparelhada e mate-parabyss-longseqdist para leituras longasarcs arcos para leituras vinculadas abyss-scaffold ou SimpleGraph | MergePathssga scaffold MergeContigssga scaffold2fasta abyss-sealer abyss-fac e abyss-samtobreakOs dados são da Unicycler: "Essas são leituras sintéticas dos plasmídeos A, B e E da montagem do genoma Shigella Sonnei 53G". Plasmídeos Shigella Sonnei (leituras sintéticas), short_reads_1.fastq.gz, short_reads_2.fastq.gz
Montar leituras de extremidade emparelhada usando abismo. Este pipeline do Abyss é um subconjunto mínimo de ferramentas executadas pelo pipeline completo abyss-pe .
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 & Isso reúne leituras usando o BCalm for Unitigs e, em seguida, usa o restante do pipeline do Abyss a partir do exemplo 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