Komponenten der Genomsequenz -Assemblierungs -Tools
Genom-, Metagenom- und Transkriptom -Assembler reichen von vollständig integriert bis vollständig modular. Die vollmodulare Baugruppe hat eine Reihe von Vorteilen. Dieses Repository ist laufende Arbeiten, um einige wichtige Checkpoints in einer modularen Montagepipeline zusammen mit Standardeingangs-/Ausgangsformaten zu definieren. Im Moment haben wir eine Tendenz zu Sequenzierungsdaten vom Typ Illumina (einzelne Reads, gepaarte Reads, Mate-Pairs, 10x), aber wir wollen die Komponenten auch mit den Lesevorgängen der 3. Generation kompatibel machen.
Fühlen Sie sich frei, über Pull-Requests beizutragen.
FASTA/FASTQ : Optionale Attribute finden Sie im Kommentarfeld und formatiert wie in SAM, XX:x:xxxx . Das Kommentarfeld folgt einem Raum im Kopf.
FASTQ : Paired-End-Lesevorgänge sind verschachtelt und können komprimiert werden. Linked Read Barcodes können mit dem BX -Tag angezeigt werden.
FASTA : Die Sequenz sollte nicht umwickelt werden. Die Fasta -Datei sollte indexiert sein (FAI).
GFA : GFA2 wird gegenüber GFA1 bevorzugt. Die Sequenzfelder können leer sein ( * ). Die Sequenzen können in einer benachbarten Fasta -Datei mit dem Namen z. B. assembly.gfa und assembly.fa gespeichert werden.
SAM/BAM : SAM/BAM -Dateien werden nach Position sortiert und indiziert, sofern nicht anders angegeben. Mit dem Attribut "Read Group RG können verschiedene Sequenzbibliotheken angezeigt werden.
Eine Baugruppe ist in einem einzigen Verzeichnis enthalten. Die Dateien werden nach dem Muster [0-9]+_[az]+.[az.]+ Benannt. Die numerischen Präfixe sind in der Länge von Null und identisch und geben die Stufe der Baugruppe an. Eine deskriptive Name und Dateityperweiterung folgen. Die Dateien können komprimiert werden.
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
Typ1 (Datensatz [Attribute],…) +… → Typ2 (Aufzeichnung [Attribute],…) +…
Diese Phase erfordert eine Datei vom Typ1 und erstellt eine Datei vom Typ 2. Schätzen Sie beispielsweise die Kopienzahl der Einheiten. Eine GFA -Datei mit Sequenzsegmenten und Kanten sowie eine BAM- oder PAF -Datei mit zugeordneten Lesungen erzeugt eine GFA -Datei mit geschätzten Kopiernummern von Unitigs.
GFA (SE) + BAM/PAF → GFA (S [CN], E)
Entfernen Sie die für jede Sequenzierungstechnologie spezifischen Sequenzartefakte. Verbessern Sie die Qualität der Eingabebereichungen mit minimalem Informationsverlust, z. B. heterozygoten Varianten.
Fastq → Fastq
Bewerten Sie die Qualität der Sequenzierung und schätzen Sie die Parameter des Genoms.
Fastq → TSV
Richtige Sequenzierungsfehler in Reads.
Fastq → Fastq
Montage Unitigs nach De Bruijn Graph (DBG) Montage oder Überlappung, Layout, Konsensbaugruppe (OLC).
Fastq → GFA (SE)
Entfernen Sie Sequenzierungsfehler aus dem Montagediagramm. Varianten behalten.
GFA (SE) → GFA (SE)
Identifizieren und/oder entfernen Sie Varianten aus dem Diagramm.
GFA (SE) → GFA (SE)
Eine einzelne Sequenz oder ein einzelner Weg durch die Ausbuchtung kann ausgewählt werden, oder die Ausbuchtung kann durch eine Konsensussequenz ersetzt werden, möglicherweise unter Verwendung von IUPAC -Ambiguitätscodes, um den Konsens darzustellen.
Map liest sich zu den Montagesequenzen.
FASTQ + GFA (s)/FASTA → BAM
Schätzen Sie die Kopienzahl jedes Sequenzsegments.
GFA (SE) + BAM/PAF → GFA (S [CN], E)
Beachten Sie, dass die mittlere Tiefe der Abdeckung robuster ist als die mittlere Tiefe der Abdeckung der Ausrichtungsartefakte, die durch zusammengebrochene Wiederholungen, falsch ausgerichtete Lesungen und andere Probleme verursacht werden.
Erweitern Sie Wiederholungen und bestellen und orientieren Sie Sequenzsegmente in Contigs und Gerüste.
Fasta/GFA (SE) + BAM/PAF → FASTA/GFA (SE)
Contigs sind zusammenhängende Sequenzen ohne Lücken. Um Contigs zu erstellen, muss die sich wiederholende Sequenz zwischen den einzigartigen Contigs erweitert werden. Contigs werden aus zusammenhängenden Pfaden der Sequenzsegmente ohne Lücken abgeleitet. Gerüste stammen aus dünneren Pfaden der Sequenzsegmente mit Lücken zwischen den Segmenten.
Ein Tool kann das Gerüst als eine einzige Montagestufe implementieren. Das Gerüst kann jedoch als aus den drei unterschiedlichen Phasen bestehen: Link -Unitigs, Ordnung und Orient -Unitigs zum Konstruktion von Pfaden und Vertragspfade zum Erstellen neuer Sequenzsegmente.
Montieren Sie die Sequenz in den Gerüstlücken zwischen benachbarten Contigs.
FASTQ + FASTA/GFA (S) → FASTA/GFA (S)
Kartieren Sie die Lesevorgänge in die Baugruppe und korrekte Montagefehler.
FASTQ + FASTA/GFA (SE) + BAM/PAF → FASTA/GFA (SE)
GFA (SE) → PNG/SVG
Bewerten Sie die Kontiguität und Korrektheit der Baugruppe.
Fasta/GFA (s) → TSV
Ein Werkzeug kann mehrere Montagestufen in einem einzigen Werkzeug kombinieren.
ema preprocesslongranger basicsga preqc bfcBcool.pysga index | sga correct ABYSS oder ABYSS-P oder abyss-bloom-dbg dann AdjList oder abyss-overlapbcalm | convertToGFA.pysga index | sga filter | sga overlap | sga assemble abyss-filtergraphgfaview -t PopBubbles | MergeContigsgfaview -b abyss-mapbgreatbwa memema align nach verknüpften Lesevorgängen auslongranger align nach verknüpften Lesevorgängen ausminimap2unicycler_align sga-astat.py abyss-fixmate | DistanceEst für Paired-End- und Mate-Pair-Lesevorgängeabyss-longseqdist für lange Lesevorgängearcs für verknüpfte Lesevorgänge abyss-scaffold oder SimpleGraph | MergePathssga scaffold MergeContigssga scaffold2fasta abyss-sealer abyss-fac und abyss-samtobreakDie Daten stammen von Unicycler: "Dies sind synthetische Lesevorgänge aus Plasmiden A, B und E von der Shigella Sonnei 53G -Genomanordnung". Shigella Sonnei Plasmids (synthetische Lesungen), Short_reads_1.fastq.gz, Short_reads_2.fastq.gz
Zusammenstellen Sie die Paired-End-Lesevorgänge mit Abyss zusammen. Diese Abyss-Pipeline ist eine minimale Teilmenge von Tools, die von der vollständigen abyss-pe -Pipeline ausgeführt werden.
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 & Dies montiert mithilfe von BCALM für Unitigs Lese und verwendet dann den Rest der Abyss -Pipeline aus dem vorherigen Beispiel.
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