Composants des outils d'assemblage de séquence génomique
Les assembleurs de génome, de métagénome et de transcriptome vont de complètement intégrés à entièrement modulaires. L'assemblage entièrement modulaire présente un certain nombre d'avantages. Ce référentiel est en cours pour définir certains points de contrôle importants dans un pipeline d'assemblage modulaire, ainsi que des formats d'entrée / sortie standard. Pour l'instant, nous avons un biais vers les données de séquençage de type Illumina (lectures simples, lectures appariées, paires de mateaux, 10x), mais nous visons à rendre les composants également compatibles avec des lectures de 3e génération.
N'hésitez pas à contribuer via des requêtes de traction.
FASTA / FASTQ : Les attributs facultatifs se trouvent dans le champ de commentaires et formatés comme dans SAM, XX:x:xxxx . Le champ de commentaires suit un espace dans l'en-tête.
FASTQ : Les lectures de l'extrémité appariée sont entrelacées et peuvent être compressées. Les codes à barres de lecture liés peuvent être indiqués avec la balise BX .
FASTA : La séquence ne doit pas être enveloppée de ligne. Le fichier FASTA doit être indexé (FAI).
GFA : GFA2 est préféré à GFA1. Les champs de séquence peuvent être vides ( * ). Les séquences peuvent être stockées dans un fichier fasta adjacent, nommé par exemple assembly.gfa et assembly.fa .
Les fichiers SAM / BAM : SAM / BAM sont triés par position et indexés, sauf indication contraire. Différentes bibliothèques de séquençage peuvent être indiquées avec l'attribut RG du groupe de lecture.
Un assemblage est contenu dans un seul répertoire. Les fichiers sont nommés selon le modèle [0-9]+_[az]+.[az.]+ . Les préfixes numériques sont zéro padés et de longueur d'identité, et ils indiquent l'étape de l'assemblage. Une extension descriptive Nom et Type de fichier Suivez. Les fichiers peuvent être compressés.
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 (enregistrer [Attributs],…) +… → Type2 (enregistrer [Attributs],…) +…
Cette étape nécessite un fichier de Type1 et produit un fichier de Type2. Par exemple, estimez le nombre de copies d'unigs. Un fichier GFA de segments de séquences et de bords et un fichier BAM ou PAF de lectures mappées produit un fichier GFA avec des numéros de copie estimés de UniGIG.
GFA (SE) + BAM / PAF → GFA (S [CN], E)
Retirez les artefacts de séquençage spécifiques à chaque technologie de séquençage. Améliorer la qualité des lectures d'entrée avec une perte d'informations minimale, par exemple des variantes hétérozygotes.
FASTQ → FASTQ
Évaluez la qualité du séquençage et estimez les paramètres du génome.
Fastq → TSV
Erreurs de séquençage correctes dans les lectures.
FASTQ → FASTQ
Assembler des unitigs par assemblage ou chevauchement de Bruijn (DBG) ou chevauchement, disposition, assemblage consensuel (OLC).
FASTQ → GFA (SE)
Retirez les erreurs de séquençage du graphique d'assemblage. Conserver les variantes.
GFA (SE) → GFA (SE)
Identifier et / ou supprimer les variantes du graphique.
GFA (SE) → GFA (SE)
Une seule séquence ou chemin à travers le renflement peut être sélectionné, ou le renflement peut être remplacé par une séquence de consensus, en utilisant peut-être les codes d'ambiguïté IUPAC pour représenter le consensus.
La carte lit sur les séquences d'assemblage.
FASTQ + GFA (S) / FASTA → BAM
Estimer le numéro de copie de chaque segment de séquence.
GFA (SE) + BAM / PAF → GFA (S [CN], E)
Notez que la profondeur médiane de la couverture est plus robuste que la profondeur moyenne de la couverture des artefacts d'alignement causés par des répétitions effondrées, des lectures mal alignées et d'autres problèmes.
Développez les répétitions, et commandez et orientez les segments de séquence en contigs et échafaudages.
FASTA / GFA (SE) + BAM / PAF → FASTA / GFA (SE)
Les contigs sont des séquences contiguës sans lacunes. La création de contigs nécessite de développer la séquence répétitive trouvée entre les contigs uniques. Les contigs sont dérivés de chemins contiguës des segments de séquence sans aucune lacune. Les échafaudages sont dérivés de chemins discontigus des segments de séquence avec des lacunes entre les segments.
Un outil peut implémenter l'échafaudage en une seule étape d'assemblage. L'échafaudage peut cependant être considéré comme composé des trois étapes distinctes: lien les unitigs, ordre et orientation Unigs pour construire des chemins et contracter des chemins pour créer de nouveaux segments de séquence.
Assemblez la séquence trouvée dans les écarts d'échafaudage entre les contigs adjacents.
FASTQ + FASTA / GFA (S) → FASTA / GFA (S)
Maptez les lectures de l'assemblage et corrigez les erreurs d'assemblage.
FASTQ + FASTA / GFA (SE) + BAM / PAF → FASTA / GFA (SE)
GFA (SE) → PNG / SVG
Évaluez la contiguïté et l'exactitude de l'assemblage.
Fasta / GFA (S) → TSV
Un outil peut combiner plusieurs étapes d'assemblage dans un seul outil.
ema preprocess EMA EMAlongranger basicsga preqc bfcBcool.pysga index | sga correct ABYSS ou ABYSS-P ou abyss-bloom-dbg puis AdjList ou abyss-overlapbcalm | convertToGFA.pysga index | sga filter | sga overlap | sga assemble abyss-filtergraphgfaview -t PopBubbles | MergeContigsgfaview -b abyss-mapbgreatbwa memema align pour les lectures liéeslongranger align les lectures liéesminimap2unicycler_align sga-astat.py abyss-fixmate | DistanceEst pour les lectures de paire de paires et de mateabyss-longseqdist pour de longues lecturesarcs pour les lectures liées abyss-scaffold ou SimpleGraph | MergePathssga scaffold MergeContigssga scaffold2fasta abyss-sealer abyss-fac et abyss-samtobreakLes données proviennent de Unicycler: "Ce sont des lectures synthétiques des plasmides A, B et E de l'assemblage du génome Shigella Sonnei 53G". Shigella Sonnei Plasmides (lectures synthétiques), short_reads_1.fastq.gz, short_reads_2.fastq.gz
Assemblez les lectures à extrémité appariée à l'aide d'AbySS. Ce pipeline ABYSS est un sous-ensemble minimal d'outils exécuté par le pipeline abyss-pe complet.
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 & Cela se rassemble à l'aide de BCALM pour UniGIGS, puis utilise le reste du pipeline ABYSS à partir de l'exemple précédent.
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