vg
のチュートリアルはいろいろある(本家のwikiやポルトガルでの講習会)が、「〇〇をしたいときにどんなコマンドを使えばいいのかわからない」ときに、これらの資料を探すのはすごくしんどい。そこで、やりたいことベースで vg
コマンドの使い方を探せるように、コマンドを整理してみた。
バージョンは v1.10.0 "Rionero"
とする。static binary または docker imageはここ から入手可能。
vg construct -r ref.fa -v valiant.vcf > graph.vg
vg msga -f multi.fa > graph.vg
clustalo -i multi.fa > msa.fa # vg msga の代わりに汎用的なマルチプルアライナーを使う
vg construct -F fasta -M msa.fa > graph.vg
vg view graph.vg > graph.gfa # vgをGFAに変換する
vg view -j graph.vg > graph.json # vgをJSONに変換する
vg view -Fv hoge.gfa > graph.vg
- アセンブリグラフを下流の解析に用いるときはこれ
- アセンブラとして
minia
を使うなら、ここを参照
- アセンブラとして
grep -v ^P assembly_graph_with_scaffolds.gfa | vg view -Fv - | vg mod -X 1000 - > graph.vg
- SPAdesはv3.11.1を使用
vg view -d graph.vg | dot -Tpng -o vis.png # vgをdot形式にする
vg view -dnp graph.vg | dot -Tpng -o vis.png # 各パスがグラフのどこを通るのかを出す
vg index -x index.xg graph.vg
vg view -a mapped.gam > mapped.json
vg stats -l graph.vg
vg stats -z grpah.vg
vg view graph.vg | grep ^P | wc -l
vg find -n 10 -P chr1 -x index.xg # IDが10のノードがchr1というパスでは、どこの座標に位置するのか
vg mod -X 1000 graph.vg > graph.1000.vg # ノードの大きさを最大で1000bpで切る
- GCSAインデックスを作成するときとかに使う
vg mod -u graph.vg > merged.graph.vg
vg mod -c graph.vg > fixed.graph.vg
vg find -n 5 -c 10 -x index.xg > node5.dis10.vg # IDが5のノードから距離が10まで離れているノードまでのグラフを抽出する
vg find -n 5 -c 10 -L -x index.xg > node5.dis10.vg # IDが5のノードから距離が10bpまで離れているノードまでのグラフを抽出する
vg find -n 5 -c 10 -p chr1:50000-55520 -x index.xg > chr1:50000-55520.vg # chr1:50000-55520に対応するノードおよびそこから距離が10まで離れているノードまでのグラフを抽出する
vg ids -j 1.vg 2.vg # ノードIDを揃える
cat 1.vg 2.vg > merged.vg
vg augment -a direct grpah.vg aln.gam > aug.vg
vg index -g index.gcsa -k 16 -b . graph.vg # -bでtmpファイルをおくディレクトリを指定
# メモリ消費量がしんどい場合は、
vg prune graph.vg > prune.vg # グラフの簡略化
vg index -g index.gcsa -k 16 -b . prune.vg # メモリ消費量を減らすことができる
rm prune.vg
# xgとgcsaがあることは前提として
vg map -x index.xg -g index.gcsa -t 1 -f 1.fq -f 2.fq > mapped.gam
vg pack -x index.xg -g mapped.gam -d > coverage.tsv
# pileup的なものがほしいときは、-eフラグをたてる
vg pack -x index.xg -g mapped.gam -d -e > coverage.edit.tsv
vg view -a mapped.gam | jq -cr 'select(.score > 0)' | vg view -aJG - > filtered.gam
vg view -a mapped.gam | jq -cr 'select(.identity >= 0.95)' | vg view -aJG - > filtered.id95.gam
vg stats -a mapped.gam graph.vg
- 計算に使わないが、位置引数が必要
vg surject -x index.xg -t 1 -b mapped.gam > mapped.bam
# -p でパス名を指定すると、そのパスに対するマッピングだけを抽出できる
vg surject -x index.xg -t 1 -s -p chr1 mapped.gam > mapped.sam
vg inject -x index.xg -t 1 mapped.sam > mapped.gam
遺伝子アノテーションをvgのグラフ上にパスとして載せるには、一度遺伝子アノテーションをゲノムグラフに対するアラインメントに変換し、それから パスを生成して、vgのグラフにマージするという作業を行います。
vg annotate -b input.bed -x index.xg > annotation.gam
vg annotate -g input.gff -x index.xg > annotation.gam
vg mod -P --include-aln annotation.gam graph.vg > mod.vg
# アノテーションの切れ目でノードを分割したい場合は、-P を外す
vg mod --include-aln annotation.gam graph.vg > mod.vg
怪しいところもあるので注意
vg snarls -m 1000 -r list.st graph.vg > snarls.pb
vg view -E list.st | jq '.visit[1:-1][].node_id | select(. != null) | tonumber' | sort -n | uniq > node_list_in_ultra_bubble.txt
# コア領域(=ハブになっている領域)のノードIDのリストを抽出には
vg view graph.vg | grep ^S | cut -f 2 | grep -vwf node_list_in_ultra_bubble.txt > node_list_of_core_region.txt
- 用語の定義はPaten et al.を参照
vg snarls
の-m
は helpでは<=
だが、 ソースコードでは<
となっているので注意 → v1.10.0で修正
- valiant callの話