バリエーショングラフは、多くのゲノムのシーケンスの簡潔なエンコードを提供します。バリエーショングラフ(特にVGで実装されている)は次のもので構成されています。
このモデルは、アセンブリおよび複数のシーケンスアライメントで使用されているシーケンスグラフに似ています。
パスは、グラフにエンコードされたゲノムに関連する座標系を提供し、グラフの構造が変更されても安定したマッピングを生成できるようにします。バリエーショングラフモデルにより、この埋め込みは明示的かつ不可欠です。 VGのツールは、グラフの変換中にパスを不変として維持します。彼らはパスを使用して、グラフ関連データを参照関連座標スペースに投影します。パスは、同じ入力シーケンスとは異なる方法で構築されたグラフの安定した座標を提供します。
引用してください:
vg
使用するときのVGペーパーvg giraffe
使用する際のVG Giraffe Papervg call
を使用したSVジェノタイピング時のVGコールペーパーvg deconstruct
使用するときのHPRCペーパーvg snarls
使用するときの紙vg haplotypes
および/またはvg giraffe --haplotype-name
Biostarsに関するサポートフォーラムを維持しています:https://www.biostars.org/tag/vg/
VGを取得する最も簡単な方法は、Linux用のリリースビルドの1つをダウンロードすることです。 6週間のリリースケイデンスがあるため、ビルドはこれまでになくなっています。
Linuxの最新のVGリリースをダウンロードします
macosについては、macosの建物を参照してください。
VGの事前に構築されたリリースをしたくない、または使用できない場合、またはVG開発者になりたい場合は、代わりにソースからそれを構築できます。
まず、リポジトリとそのサブモジュールを取得します。
git clone --recursive https://github.com/vgteam/vg.git
cd vg
次に、VGの依存関係をインストールします。 ProtobufおよびJansson開発ライブラリをインストールする必要があり、必要なテストを実行するには:
jq
、 bc
、 rs
、およびparallel
bsdmainutils
のhexdump
column
npm
)。ubuntuでは、できるはずです:
make get-deps
sudo
が見つからないという苦情があった場合は、インストールしてください。
apt update
apt install sudo
E: Unable to locate package build-essential
ようなエラーがたくさんある場合は、パッケージインデックスファイルが実行中に最新であることを確認してください。
sudo apt update
他のディストリビューション、またはルートアクセスがない場合は、次のことを実行する必要があります。
sudo apt-get install build-essential git cmake pkg-config libncurses-dev libbz2-dev
protobuf-compiler libprotoc-dev libprotobuf-dev libjansson-dev
automake gettext autopoint libtool jq bsdmainutils bc rs parallel
npm curl unzip redland-utils librdf-dev bison flex gawk lzma-dev
liblzma-dev liblz4-dev libffi-dev libcairo-dev libboost-all-dev
libzstd-dev pybind11-dev python3-pybind11
Ubuntu 16.04は十分に新しいプロトブフを出荷していないことに注意してください。 VGには、手動でインストールする必要があるProtoBuf 3が必要です。
現在、VGをコンパイルするには、C ++ 14をサポートして、GCCバージョン4.9以降が必要です。 ( gcc --version
でバージョンを確認してください。)GCCは11.2.0までサポートされています。
他のライブラリが必要になる場合があります。ビルドの問題を報告してください。
64ビットOSが必要であることに注意してください。 Ubuntu 20.04は機能するはずです。
準備ができたら、 make
で構築します。 make -j16
を使用して、一度に16のビルドスレッドを実行できます。これにより、プロセスが大幅に加速できます。より多くのCPUコアがある場合は、より高い数値を使用できます。
VGは、マシンと使用するスレッドの数に応じて、10分から1時間以上かかることができることに注意してください。
また、システムにインストールされているすべての依存関係の静的バージョンがあると仮定して、静的バイナリmake static
することもできます。
VGが構築されると、バイナリはVGリポジトリディレクトリ内のbin/vg
になります。で実行できます:
./bin/vg
ディレクトリをPATH
環境変数に追加することもできます。これにより、任意のディレクトリからvg
呼び出すことができます。 BASHでそれを行うには、VGリポジトリディレクトリからこのコマンドを使用してください。
echo 'export PATH="${PATH}:'"$(pwd)"'/bin"' >>~/.bashrc
次に、ターミナルを閉じて新しいものを開きます。 vg
実行して、それが機能することを確認します。
.bash_profile
が機能しなかった場合は、 .bashrc
実行する。
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
最初のステップは、VGリポジトリをクローンすることです。
git clone --recursive https://github.com/vgteam/vg.git
cd vg
VGは、構築されているシステムにインストールされている多くのパッケージに依存します。依存関係は、MacPortsまたはHomeBrewのいずれかを使用してインストールできます。
MacPortsを使用してVGの依存関係をインストールできます。
sudo port install libtool protobuf3-cpp jansson jq cmake pkgconfig autoconf automake libtool coreutils samtools redland bison gperftools md5sha1sum rasqal gmake autogen cairo libomp boost zstd pybind11
HomeBrewはOSXに別のパッケージ管理ソリューションを提供しており、MacPortsよりも一部のユーザーよりも好ましい場合があります。 VGは、自宅の依存関係を説明するBrewfile
出荷するため、ルートVGディレクトリから依存関係をインストールして、次のようにVGに公開できます。
# Install all the dependencies in the Brewfile
brew bundle
依存関係をインストールすると、VGを構築できるようになりました。
make
Linuxと同様に、コンピューターがそれらを処理できる場合、最後に-j16
またはその他の数値を追加して複数のビルドタスクを一度に実行できます。
静的バイナリはまだMac用に構築できないことに注意してください。
VG Macは、Apple Clangの現在のバージョンが何であれ、Apple ClangのバージョンがGitHub Actions Mac CIシステムによって提供されるものをターゲットにします。あなたのclangが最新であり、VGがあなたのために構築されていない場合は、問題を開いてください。
VGが構築されると、バイナリはVGリポジトリディレクトリ内のbin/vg
になります。で実行できます:
./bin/vg
ディレクトリをPATH
環境変数に追加することもできます。これにより、任意のディレクトリからvg
呼び出すことができます。デフォルトのzsh
Macシェルでこれを行うには、VGリポジトリディレクトリからこのコマンドを使用してください。
echo 'export PATH="${PATH}:'"$(pwd)"'/bin"' >>~/.zshrc
次に、ターミナルを閉じて新しいものを開きます。 vg
実行して、それが機能することを確認します。
MACプラットフォームは、AppleのM1、M1 Pro、M1 Max、およびその後のチップデザインにより、腕に移動しています。 VGコードベースは、LinuxだけでなくMacのARMをサポートします。通常のインストール手順は、工場の新鮮なアームMACで機能します。
ただし、作業用のVGビルド環境を移行したり、X86_64からARMにMacPortsまたはHomeBrewを移行したりすると、問題が発生するのは簡単です。アームマシンは、古いマシンでMacPortsまたはHomeBrewを介してインストールされたX86_64ツールを正常に実行できますが、VGは、 make
やCmakeなどのビルドツールのARMバージョンを使用している場合にのみARMに適切に構築できます。
したがって、EG Appleの移行ツールを使用してARM Macに移行した後:
make clean
。これにより、すべてのビルドアーティファクトが削除されるはずです。make
でもう一度VGを構築します。この後でも問題のある問題が発生した場合は、チェックアウト全体を削除して、コードをもう一度チェックアウトしてください。 make clean
CIテスト中ではなく、ビルドシステムの残りの部分と常に最新の状態ではありません。
それが役立つかどうかにかかわらずmake clean
問題を開いてください。
注VGコンストラクトの代わりにそのツールを使用してグラフを1つのステップで
vg construct
およびインデックス作成する方法については、以下のvg autoindex
例を参照してください。
vg
を使用してグラフを構築する1つの方法は、参照FASTAファイルとVCFファイルを使用してバリアントコールからconstruct
ことです。 VGのtest/
ディレクトリで作業している場合:
vg construct -r small/x.fa -v small/x.vcf.gz > x.vg
グラフを作成するには、VCFファイルのインデックスが必要であることに注意してください。 VCFインデックスファイルは、Samtoolsが提供するtabix
コマンド(Command Lineのtabix -p vcf x.vcf.gz
など)を使用して生成できます。
また、Minigraph-cactusを使用して、上記のバリアントコールとは対照的に、一連のゲノムアセンブリ(FASTA)からグラフ(およびVGでマッピングするためのインデックス)を作成することもできます。
vg
多くの形式をサポートしていますが、最も重要な3つは次のとおりです。
PackedGraph (.vg)
:これはvg's
ネイティブ形式です。 (トポロジとパスに対して)あらゆる種類の編集をサポートしますが、特に多くのパスでは、大規模では非効率的です。GFA (.gfa)
:GFAは標準のテキストベースの形式であり、通常、 vg
と他のパンゲノームツールの間でグラフを交換する最良の方法です。 vg
、メモリでPackedGraph
表現を使用することにより、(非圧縮)GFAファイルで動作することもできます(したがって、その形式のスケーリングの懸念と編集可能性を共有します)。GBZ (.gbz)
:GBZは、上記の形式よりもパスを保存するためにはるかに少ないスペースを使用しますが、グラフへの一般的な編集を許可しないというコストで、高度に圧縮された形式です。 vg stats -F
使用して、任意のグラフの形式を照会できます。
一般に、 vg autoindex
(GFAまたはVCFから)またはMinigraph-Cactus
(FASTAS)を使用してvg
グラフを構築およびインデックス化します。また、 vg convert -g
を使用してODGIやPGGBなどの他のツールからGFA
ファイルをインポートすることもできます。
vg convert -f
使用して、任意のグラフをGFA
に変換できます。デフォルトでは、 vg
GFA V1.1を使用します。ここで、パスはWラインとして表されます。代わりにP -Linesを使用するには(GFA V1.0)、 vg convert -fW
を使用します。
GBZ
形式はREFERENCE
とHAPLOTYPE
パスを区別します。 REFERENCE
パスは座標系として使用できますが、保存するのはより高価です。 HAPLOTYPE
パスは高度に圧縮されていますが、位置検索には使用できません。たとえば、HPRCグラフでは、 GRCh38
およびCHM13(T2T)
のコンティグはREFERENCE
パスおよび他のすべてのサンプルHAPLOTYPE
パスです。
REFERENCE
とHAPLOTYPE
パスの区別は、変換と操作を容易にするために、 .vg
や.gfa
などの他の形式に引き継がれます。 .gfa
では、 REFERENCE
パスはPライン、またはサンプル名がヘッダーにフラグが付けられているWラインです。名前がヘッダーにフラグが付けられていないWラインは、 HAPLOTYPE
パスです。 .vg
では、命名規則を使用して示されています。
詳細については、Path Metadata Wikiを参照してください。
警告
GBZ
、vg
の多数のHAPLOTYPE
パスを効率的にロードすることをサポートする唯一の形式です。.vg
または.gfa
ファイルから何千ものHAPLOTYPE
を使用して全ゲノムグラフをロードしようとする問題に遭遇する可能性があります。vg convert -H
使用してHAPLOTYPE
パスをドロップし、グラフを他の形式でより簡単にロードできるようにします。
注GFA変換には、新しい
vg convert
Tool(上記)を使用するのが最善です
vg view
グラフをさまざまな形式に変換する方法を提供します。
# GFA output
vg view x.vg > x.gfa
# dot output suitable for graphviz
vg view -d x.vg > x.dot
# And if you have a GAM file
cp small/x-s1337-n1.gam x.gam
# json version of binary alignments
vg view -a x.gam > x.json
複数のシーケンスがある場合、または大きなグラフで作業している場合は、単に整列するのではなく、マッピングする必要があります。
vg
には複数の読み取りマッパーがあります:
vg giraffe
は、ハプロタイプ情報を含むグラフに対して、非常に正確な短い読み取りのために高速になるように設計されています。vg map
汎用の読み取りマッパーです。vg mpmap
「マルチパス」マッピングを行い、ローカルアライメントの不確実性を説明できるようにします。これは、トランスクリプトミクスに役立ちます。 vg giraffe
とのマッピングvg giraffe
使用して読み取りをマッピングするには、最初にインデックスを準備する必要があります。これは、 vg autoindex
使用して行うのが最適です。 vg autoindex
VCFファイルからハプロタイプ情報を使用するように取得するには、VCFと関連する線形参照を直接与えることができます。
# construct the graph and indexes (paths below assume running from `vg/test` directory)
vg autoindex --workflow giraffe -r small/x.fa -v small/x.vcf.gz -p x
# simulate a bunch of 150bp reads from the graph, into a GAM file of reads aligned to a graph
vg sim -n 1000 -l 150 -x x.giraffe.gbz -a > x.sim.gam
# now re-map these reads against the graph, and get BAM output in linear space
# FASTQ input uses -f instead of -G.
vg giraffe -Z x.giraffe.gbz -G x.sim.gam -o BAM > aln.bam
vg girafe
の使用に関する詳細については、 vg
Wikiをご覧ください。
vg map
でのマッピンググラフが大きい場合は、 vg index
使用してグラフとvg map
保存して読み取りを調整する必要があります。 vg map
KMERベースのシードを実装し、NovoAlignやMosaikなどのアライナーで使用されるものと同様のアライメントモデルを拡張します。最初に、グラフ自体と特定のサイズのkmersを含むvg index
でディスク上のインデックスが構築されます。マッピングの場合、インデックスで使用されるものよりも短いKMERサイズを使用でき、デフォルトでは、特定のKでのアライメントが失敗すると、マッパーがKMERサイズを減少させて感度を高めます。
# construct the graph (paths below assume running from `vg/test` directory)
vg construct -r small/x.fa -v small/x.vcf.gz > x.vg
# store the graph in the xg/gcsa index pair
vg index -x x.xg -g x.gcsa -k 16 x.vg
# align a read to the indexed version of the graph
# note that the graph file is not opened, but x.vg.index is assumed
vg map -s CTACTGACAGCAGAAGTTTGCTGTGAAGATTAAATTAGGTGATGCTTG -x x.xg -g x.gcsa > read.gam
# simulate a bunch of 150bp reads from the graph, one per line
vg sim -n 1000 -l 150 -x x.xg > x.sim.txt
# now map these reads against the graph to get a GAM
vg map -T x.sim.txt -x x.xg -g x.gcsa > aln.gam
# surject the alignments back into the reference space of sequence "x", yielding a BAM file
vg surject -x x.xg -b aln.gam > aln.bam
# or alternatively, surject them to BAM in the call to map
vg sim -n 1000 -l 150 -x x.xg > x.sim.txt
vg map -T x.sim.txt -x x.xg -g x.gcsa --surject-to bam > aln.bam
アラインメントからのバリエーションは、グラフに戻すことができます。このプロセスは増強と呼ばれ、たとえばde novoバリアント呼び出しに使用できます(以下を参照)。
バリアント呼び出しのために
vg augment
使用した警告は非常に実験的なままです。構造バリアント呼び出しにはまったく推奨されておらず、小さなバリアントであっても、BAM
にアラインメントを投影し、DeepVariantなどの線形バリアント発信者を実行することにより、はるかに正確な結果(少なくともヒトで)を得ることがよくあります。
# augment the graph with all variation from the GAM except that implied by soft clips, saving to aug.vg. aug.gam contains the same reads as aln.gam but mapped to aug.vg
vg augment x.vg aln.gam -A aug.gam > aug.vg
# augment the graph with all variation from the GAM, saving each mapping as a path in the graph.
# softclips of alignment paths are preserved (`-S`).
# Note, this can be much less efficient than the above example if there are many alignments in the GAM
vg augment x.vg aln.gam -i -S > aug_with_paths.vg
注意事項については、Wikiをご覧ください。
次の例は、読み取りサポートを使用してVGでVCFを生成する方法を示しています。上記のマッピングおよび増強の例からの出力に依存します。同じアプローチを使用して、小さなバリアントとSVを呼び出すことができます。現在、SVSのより正確です。
グラフに存在するバリエーションのみを呼び出します。
# Compute the read support from the gam
# -Q 5: ignore mapping and base qualitiy < 5
vg pack -x x.xg -g aln.gam -Q 5 -o aln.pack
# Generate a VCF from the support.
vg call x.xg -k aln.pack > graph_calls.vcf
デフォルトでは、 vg call
0/0
バリアントを省略し、対立遺伝子を正規化してVCFをよりコンパクトにしようとします。 VCFは同じグラフを使用して作成されていても、異なる座標を持つため、これらのステップは両方とも異なるサンプルからの出力を比較することを困難にすることができます。 -a
オプションは、同じ座標を使用してすべてのスナールを呼び出し、参照呼び出しを含むことにより、これに対処します。さまざまなサンプルの出力をbcftools merge -m all
と組み合わせることができます。
vg call x.xg -k aln.pack -a > snarl_genotypes.vcf
また、読み取りからの新しいバリアントを検討するために、拡張グラフとGAMを使用します( vg augment -A
使用して「増強」例で作成されています):
バリアント呼び出しのために
vg augment
使用した警告は非常に実験的なままです。構造バリアント呼び出しにはまったく推奨されておらず、小さなバリアントであっても、BAM
にアラインメントを投影し、DeepVariantなどの線形バリアント発信者を実行することにより、はるかに正確な結果(少なくともヒトで)を得ることがよくあります。
# Index our augmented graph
vg index aug.vg -x aug.xg
# Compute the read support from the augmented gam (ignoring qualitiy < 5, and 1st and last 5bp of each read)
vg pack -x aug.xg -g aug.gam -Q 5 -s 5 -o aln_aug.pack
# Generate a VCF from the support
vg call aug.xg -k aln_aug.pack > calls.vcf
同様のプロセスは、VCFからの既知のバリアントの遺伝子型に使用することによって使用できます。これを行うには、グラフをvg construct -a
備えたVCFから構築する必要があります( vg autoindex
やMinigraph-Cactus
などの他のソースからのグラフは使用できません):
# Re-construct the same graph as before but with `-a`
vg construct -r small/x.fa -v small/x.vcf.gz -a > xa.vg
# Index the graph with `-L' to preserve alt paths in the xg
vg index xa.vg -x xa.xg -L
# Compute the support (we could also reuse aln.pack from above)
vg pack -x xa.xg -g aln.gam -o aln.pack
# Genotype the VCF (use -v)
vg call xa.xg -k aln.pack -v small/x.vcf.gz > genotypes.vcf
サポートを計算する前にゲームを事前にフィルタリングすることで、SNP通話の精度を改善できます。
# filter secondary and ambiguous read mappings out of the gam
vg filter aln.gam -r 0.90 -fu -m 1 -q 15 -D 999 -x x.xg > aln.filtered.gam
# then compute the support from aln.filtered.gam instead of aln.gam in above etc.
vg pack -x xa.xg -g aln.filtered.gam -o aln.pack
vg call xa.xg -k aln.pack -v small/x.vcf.gz > genotypes.vcf
より大きなグラフの場合、スナールを個別に計算することをお勧めします。
vg snarls x.xg > x.snarls
# load snarls from a file instead of computing on the fly
vg call x.xg -k aln.pack -r x.snarls > calls.vcf
注: vg augment
、 vg pack
、 vg call
、 vg snarls
、すべてのグラフ形式(ex '.gbz'、 '.gfa'、 .vg
、 .xg
( augment
を除く)、またはvg convert
による出力の何かで直接実行できるようになりました。 vg convert
)。 .vg
または '.gfa'での操作は、最もメモリを使用しており、大きなグラフには推奨されません。 vg pack
の出力は、それを作成するために使用される同じグラフと組み合わせてのみ読み取ることができます。そのため、 vg pack x.vg -g aln.gam -o x.pack
then vg call x.xg -k x.pack
機能しません。
グラフのパスによって暗示されるアライメントからバリアントを推測します。これは、たとえば、異なるアセンブリの複数のアライメントから構築されたバリエーショングラフから直接SVSを呼び出すために使用できます。
# create a graph from a multiple alignment of HLA haplotypes (from vg/test directory)
vg msga -f GRCh38_alts/FASTA/HLA/V-352962.fa -t 1 -k 16 | vg mod -U 10 - | vg mod -c - > hla.vg
# index it
vg index hla.vg -x hla.xg
# generate a VCF using gi|568815592:29791752-29792749 as the reference contig. The other paths will be considered as haploid samples
vg deconstruct hla.xg -e -p " gi|568815592:29791752-29792749 " > hla_variants.vcf
.gbz
または.gbwt
インデックスからのハプロタイプパスは、それぞれ-z
と `-g 'を使用して検討できます。
vg call
と同様に、大きなグラフを使用するときに、Snarlsを個別に計算し、 -r
で渡すことが最善です。
vg
には、スプライスされたグラフ(つまり、スプライスジャンクションがグラフにエッジとして追加された注釈が付けられたグラフ)を使用して、トランスクリプトーム分析をサポートする多くのツールがあります。これらのエッジはvg rna
使用して既存のグラフに追加できます。その後、 vg mpmap
使用してこれらのグラフにスプライスアウェアマッピングを実行できます。 vg
開発者は、 rpvg
のこれらのツールに基づいて、ハプロタイプを認識した転写産物の定量化のためのツールを作成しました。このパイプラインを開始する最も簡単な方法は、 vg autoindex
サブコマンドを使用してvg mpmap
のインデックスを作成することです。 vg autoindex
、FASTA、VCF、GTFなどの一般的な交換形式からマッピングするためのインデックスを作成します。
詳細については、TranscriptomicsのWikiページをご覧ください。
test/
ディレクトリからの作業次の例は、4つのスレッドを使用してvg autoindex
使用して、スプライスされたパンゲノームグラフとインデックスを作成する方法を示しています。
# Create spliced pangenome graph and indexes for vg mpmap
vg autoindex --workflow mpmap -t 4 --prefix vg_rna --ref-fasta small/x.fa --vcf small/x.vcf.gz --tx-gff small/x.gtf
RNA-seqの読み取りは、4つのスレッドを使用してvg mpmap
使用して、スプライスされたパンゲノームグラフにマッピングできます。
# Map simulated RNA-seq reads using vg mpmap
vg mpmap -n rna -t 4 -x vg_rna.spliced.xg -g vg_rna.spliced.gcsa -d vg_rna.spliced.dist -f small/x_rna_1.fq -f small/x_rna_2.fq > mpmap.gamp
これにより、MultiPath形式でアラインメントが生成されます。 MultiPath Alignment Formatおよびvg mpmap
の詳細については、MPMAPのWikiページを参照してください。 4つのスレッドを使用して小さな例データで2つのコマンドを実行すると、ほとんどのマシンで1分もかかりません。
小さなグラフがある場合は、フルレングスの部分的な順序アライメントを使用して、グラフ全体にシーケンスを揃えることができます。
vg align -s CTACTGACAGCAGAAGTTTGCTGTGAAGATTAAATTAGGTGATGCTTG x.vg
グラフをディスクにまったく保存する必要がないことに注意してください。ローカルアライナーにパイプすることができます。
vg construct -r small/x.fa -v small/x.vcf.gz | vg align -s CTACTGACAGCAGAAGTTTGCTGTGAAGATTAAATTAGGTGATGCTTG -
ほとんどのコマンドでは、 vg
の内外のグラフのストリーミングを許可します。
さまざまなコマンドが利用可能です。
vg
、ProtoBufスキーマ(VG.Proto)で説明されている一般的なデータモデル(バリエーショングラフ)に基づくツールのコレクションです。 VG.Protoで定義されているデータオブジェクトは、Stream.hppで定義されたストリームパターンを介してシリアル化できます。ここに定義されているアルゴリズムとインターフェイスするために、VGでコードを記述する必要はありません。むしろ、同じデータ形式を読み取り、書き込む外部アルゴリズムを記述する方が簡単な場合があります。
mit