基因組序列組件工具的組成部分
基因組,元基因組和轉錄組組件範圍從完全集成到完全模塊化。完全模塊化的組裝有許多好處。該存儲庫正在進行的工作,以在模塊化裝配管道中定義一些重要的檢查點以及標準輸入/輸出格式。目前,我們對Illumina型測序數據有偏見(單讀,配對讀物,配對對,10倍),但我們的目標是使組件也與第三代讀數兼容。
隨意通過拉力要求做出貢獻。
FASTA/FASTQ :可選屬性在註釋字段中找到,並像SAM一樣格式化, XX:x:xxxx 。評論字段遵循標題中的一個空間。
FASTQ :配對末端讀物交錯,可能會被壓縮。鏈接的讀取條形碼可以用BX標籤指示。
FASTA :序列不應包裹。 FASTA文件應索引(FAI)。
GFA :GFA2優於GFA1。序列字段可能為空( * )。這些序列可以存儲在相鄰的fasta文件中,命名為assembly.gfa和assembly.fa 。
SAM/BAM :除非另有說明,否則將SAM/BAM文件按位置排序並索引。可以用讀取組RG屬性表示不同的測序庫。
一個組件包含在單個目錄中。文件根據模式[0-9]+_[az]+.[az.]+命名。數字前綴為零固定且長度相同,它們表示組件的階段。描述性名稱和文件類型擴展名。文件可能會被壓縮。
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(記錄[屬性],…) +…→type2(record [屬性],…) +…
此階段需要一個type1的文件並生成Type2的文件。例如,估計單位的副本數量。序列片段和邊緣的GFA文件以及映射的BAM或PAF文件讀取的讀取可產生帶有估計的unitig副本編號的GFA文件。
GFA(SE) + BAM/PAF→GFA(S [CN],E)
刪除針對每種測序技術特定的測序工件。以最小的信息丟失(例如雜合變體)提高輸入讀取的質量。
FastQ→FastQ
評估測序的質量,並估計基因組的參數。
FastQ→TSV
讀取讀取中的排序錯誤。
FastQ→FastQ
通過de Bruijn圖(DBG)組裝或重疊,佈局,共識(OLC)組件組裝單元。
FastQ→GFA(SE)
從彙編圖中刪除測序錯誤。保留變體。
GFA(SE)→GFA(SE)
識別和/或從圖中刪除變體。
GFA(SE)→GFA(SE)
可以選擇通過凸起的單個序列或路徑,或者可以使用IUPAC歧義代碼代表共識的凸起序列替換凸起。
地圖讀取為組裝序列。
FastQ + GFA(S)/Fasta→BAM
估計每個序列段的拷貝數。
GFA(SE) + BAM/PAF→GFA(S [CN],E)
請注意,覆蓋範圍的中間深度比由重複崩潰,讀取錯誤和其他問題引起的對齊偽像的平均覆蓋範圍更強。
將重複序列以及順序和方向序列段擴展到重疊群和支架中。
fasta/gfa(SE) + bam/paf→fasta/gfa(se)
重疊群是沒有間隙的連續序列。創建重疊群需要擴展唯一重疊群之間發現的重複序列。重疊群是從沒有任何間隙的序列段的連續路徑中得出的。腳手架是從序列段的不連續路徑中得出的,這些序列段之間的序列段之間有間隙。
工具可以將腳手架作為一個組裝階段實現。然而,腳手架可能被視為由三個不同的階段組成:鏈接unitigs,訂單和東方單位構建路徑的序列以及合同路徑以創建新的序列段。
組裝在相鄰重疊群之間的支架間隙中發現的序列。
fastq + fasta/gfa(s)→fasta/gfa(s)
將讀取映射到組件並正確的組件錯誤。
fastq + fasta/gfa(SE) + bam/paf→fasta/gfa(se)
GFA(SE)→PNG/SVG
評估組件的連續性和正確性。
fasta/gfa(s)→TSV
工具可以將多個裝配階段組合在單個工具中。
ema preprocesslongranger basicsga preqc bfcBcool.pysga index | sga correct ABYSS或ABYSS-P或abyss-bloom-dbg然後AdjList或abyss-overlapbcalm | convertToGFA.pysga index | sga filter | sga overlap | sga assemble abyss-filtergraphgfaview -t PopBubbles | MergeContigsgfaview -b abyss-mapbgreatbwa memema align鏈接讀取longranger alignminimap2unicycler_align sga-astat.py abyss-fixmate | DistanceEstabyss-longseqdist長期閱讀arcs abyss-scaffold或SimpleGraph | MergePathssga scaffold MergeContigssga scaffold2fasta abyss-sealer abyss-fac和abyss-samtobreak數據來自Unicycler:“這些是來自Shigella Sonnei 53G基因組組裝的質粒A,B和E的合成讀數”。 shigella sonnei質粒(合成讀取),short_reads_1.fastq.gz,short_reads_2.fastq.gz
使用深淵組裝配對末端讀取。該深淵管道是由完整的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 & 該組裝使用BCALM用於unitigs,然後使用上一個示例中的其餘Abyss管道。
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