ゲノム配列アセンブリツールのコンポーネント
ゲノム、メタゲノム、トランスクリプトームアセンブラーは、完全に統合されたものから完全にモジュラーまであります。完全なモジュラーアセンブリには多くの利点があります。このリポジトリは、標準の入力/出力形式とともに、モジュラーアセンブリパイプラインのいくつかの重要なチェックポイントを定義するための継続的な作業です。今のところ、イルミナタイプのシーケンスデータ(単一の読み取り、ペアの読み取り、メイトペア、10x)にバイアスがありますが、コンポーネントを第3世代の読み取りと互換性のあるものにすることを目指しています。
Pull-Requestsでお気軽に貢献してください。
FASTA/FASTQ :オプションの属性はコメントフィールドにあり、SAM、 XX:x:xxxxのようにフォーマットされています。コメントフィールドは、ヘッダーのスペースに従います。
FASTQ :ペアエンド読み取りはインターリーブされ、圧縮される可能性があります。リンクされた読み取りバーコードは、 BXタグで示される場合があります。
FASTA :シーケンスをラインラップしないでください。 FASTAファイルはインデックス付けされている必要があります(FAI)。
GFA :GFA2よりもGFA2が推奨されます。シーケンスフィールドは空になる場合があります( * )。シーケンスは、 assembly.gfaおよびassembly.faたとえば、隣接するFASTAファイルに保存できます。
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(Record [astributes]、…) +…→Type2(Record [attributes]、…) +…
この段階では、Type1のファイルが必要で、Type2のファイルが生成されます。たとえば、unitigのコピー数を推定します。シーケンスセグメントとエッジの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)
コンティグは、ギャップのない連続したシーケンスです。コンティグを作成するには、一意のコンティグ間で見つかった反復シーケンスを拡張する必要があります。コンティグは、ギャップのないシーケンスセグメントの連続したパスから派生しています。足場は、セグメント間の隙間を持つシーケンスセグメントの不連続な経路から派生しています。
ツールは、アセンブリの単一段階として足場を実装する場合があります。ただし、足場は、3つの異なる段階で構成されていると見なされる場合があります。ユニットのリンク、順序、およびオリエントユニットを構築してパスを構築し、契約パスを作成して新しいシーケンスセグメントを作成します。
隣接するコンティグ間の足場ギャップにあるシーケンスを組み立てます。
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 then AdjListまたはabyss-overlapbcalm | convertToGFA.pysga index | sga filter | sga overlap | sga assemble abyss-filtergraphgfaview -t PopBubbles | MergeContigsgfaview -b abyss-mapbgreatbwa memema alignlongranger alignminimap2unicycler_align sga-astat.py abyss-fixmate | DistanceEstペアエンドとメイトペアの読み取りでabyss-fixmate | DistanceEstabyss-longseqdist long readsarcs abyss-scaffoldまたはSimpleGraph | MergePathssga scaffold MergeContigssga scaffold2fasta abyss-sealer abyss-fac and abyss-samtobreakデータはUnicyclerからのものです。「これらは、Shigella sonnei 53gゲノムアセンブリからのプラスミドA、B、およびEからの合成読み取りです」。 Shigella sonneiプラスミド(合成読み取り)、short_reads_1.fastq.gz、short_reads_2.fastq.gz
Abyssを使用してペアエンド読み取りを組み立てます。このAbyssパイプラインは、完全な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 & これは、unitigsにBCALMを使用して読み取りを組み立て、前の例から残りの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