變異圖提供了許多基因組序列的簡潔編碼。一個變體圖(尤其是VG中實現)由:
該模型類似於在組裝和多個序列比對中使用的序列圖。
路徑提供相對於圖中編碼的基因組的坐標系統,即使圖形的結構更改了,也可以生成穩定的映射。變體圖模型使此嵌入顯式和必不可少。 VG中的工具將路徑保持在圖形轉換期間不變。他們使用路徑將相關數據投影到參考層的坐標空間中。路徑為與相同的輸入序列不同方式構建的圖形提供穩定的坐標。
請引用:
vg
時的VG紙vg giraffe
時的VG長頸鹿紙vg call
分型時的VG呼叫紙vg deconstruct
時的HPRC紙vg snarls
時咆哮的紙張vg haplotypes
和/或vg giraffe --haplotype-name
時,個性化的pangenome紙我們維持一個關於biostars的支持論壇:https://www.biostars.org/tag/vg/
獲得VG的最簡單方法是下載我們的Linux版本之一。我們有一個為期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沒有足夠新的Protobuf; VG需要Protobuf 3 ,必須手動安裝。
目前,您將需要GCC版本4.9或更高版本,並支持C ++ 14的支持,以編譯VG。 (使用gcc --version
檢查您的版本。)GCC支持高達11.2.0。
可能需要其他圖書館。請報告任何建築困難。
請注意,需要64位OS。 Ubuntu 20.04應該起作用。
準備就緒時,請與make
一起構建。您可以使用make -j16
一次運行16個構建線程,從而大大加速了該過程。如果您有更多的CPU內核,則可以使用更高的數字。
請注意,VG可能需要10分鐘到一個小時以上的時間來編譯,具體取決於您的機器和所使用的線程數。
假設您在系統上安裝了所有依賴項的靜態版本,則還可以生產具有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的當前版本,以及我們的GitHub Actions Mac CI系統提供的任何版本的Apple Clang。如果您的叮噹聲是最新的,並且VG不為您建立,請打開問題。
構建VG後,二進制將在VG存儲庫目錄內的bin/vg
處。您可以運行它:
./bin/vg
您還可以將其目錄添加到PATH
環境變量中,以便可以從任何目錄調用vg
。為了在默認的zsh
MAC Shell上執行此操作,請使用VG存儲庫目錄中的此命令:
echo 'export PATH="${PATH}:'"$(pwd)"'/bin"' >>~/.zshrc
然後關閉您的終端並打開一個新的終端。運行vg
以確保其有效。
MAC平台帶有Apple的M1,M1 Pro,M1 Max和隨後的芯片設計。 VG代碼庫支持Mac和Linux上的ARM。正常的安裝說明在工廠新的手臂Mac上起作用。
但是,在遷移工作VG構建環境或從X86_64遷移Macports或自製到ARM時,很容易遇到問題。手臂機可以成功運行X86_64通過MacPorts或舊機器上安裝的工具,但是如果您使用Make and Cmake(例如make
and Cmake)的ARM版本,VG只能在ARM上正確構建。
因此,使用EG蘋果的遷移工具遷移到ARM Mac之後:
make clean
VG。這應該刪除所有構建人工製品。make
構建VG。如果您在此之後仍然遇到構建問題,請刪除整個結帳並再次查看代碼; make clean
不受CI測試,並且並不總是與構建系統的其餘部分保持最新。
是否有幫助,請打開一個問題,以便我們可以幫助修復構建或修復make clean
。
注意,請參見下面的
vg autoindex
示例,了解如何在單個步驟中使用該工具代替vg construct
來構建和索引圖。
用vg
構建圖形的一種方法是使用參考FastA文件和VCF文件從變體調用construct
它。如果您在VG的test/
目錄中工作:
vg construct -r small/x.fa -v small/x.vcf.gz > x.vg
請注意,要構建圖形,需要VCF文件的索引。 VCF索引文件可以使用SamTool提供的tabix
命令(例如命令行上的tabix -p vcf x.vcf.gz
)生成。
您還可以使用Minigraph-Cactus從一組基因組組件(FASTA)中構建一組基因組組件(FASTA)的圖(FASTA)(FASTA)(FASTA)(FASTA)。
vg
支持許多格式,最重要的三種格式是:
PackedGraph (.vg)
:這是vg's
本機格式。它支持各種(拓撲和路徑)的編輯,但在大尺度上可能會效率低下,尤其是在許多路徑上。GFA (.gfa)
:GFA是基於文本的標準格式,通常是vg
和其他Pangenome工具之間交換圖形的最佳方法。 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線(GFA V1.0),請使用vg convert -fW
。
GBZ
格式可以區分REFERENCE
和HAPLOTYPE
路徑。 REFERENCE
路徑可以用作坐標系,但存儲更昂貴。 HAPLOTYPE
路徑被高度壓縮,但不能用於位置查找。例如,在HPRC圖中,來自GRCh38
和CHM13(T2T)
的重疊群是REFERENCE
路徑,所有其他樣品HAPLOTYPE
路徑。
REFERENCE
和HAPLOTYPE
路徑之間的區別被轉移到其他格式中,例如.vg
和.gfa
以促進轉換和操作。在.gfa
中, REFERENCE
路徑是p-lines或w-lines,其樣品名稱在標題中標記。標題中未標記名稱的W線是HAPLOTYPE
路徑。在.vg
中,它們使用命名約定表示。
有關更多詳細信息,請參見Metadata Wiki路徑。
警告
GBZ
是唯一支持vg
中有效加載大量單HAPLOTYPE
路徑的格式。您可能會遇到試圖從.vg
或.gfa
文件加載數千個HAPLOTYPE
的全基因組圖的問題。vg convert -H
可用於刪除HAPLOTYPE
路徑,從而使圖形更容易以其他格式加載。
請注意,最好將較新的
vg convert
工具(上述)用於GFA轉換
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等對齊器中使用的相似的比對模型。首先,使用vg index
構建了盤中索引,其中包括圖形本身和特定尺寸的kmers。映射時,可以使用比索引中所使用的kmer尺寸短,並且默認情況下,映射器將減小kmer尺寸,以提高特定k處的對準失敗時,以提高靈敏度。
# 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
從對齊中的變化可以嵌入到圖中。此過程稱為增強,可用於從頭呼叫,例如(見下文)。
警告使用
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
的“增強”示例中創建的-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
在計算支持之前對GAM進行過濾可以提高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', .vg
,.xg, .xg
( augment
)或vg convert
輸出的任何內容vg convert
)。在.vg
或'.gfa'上操作使用最多的內存,並且不建議用於大圖。 vg pack
的輸出只能與用於創建它的同一圖一起讀取,因此vg pack x.vg -g aln.gam -o x.pack
然後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
可以分別使用-z
和`raper oft offer .gbz
和.gbwt
索引輸入來考慮單倍型路徑。
與vg call
一樣,最好分別計算咆哮,並在使用大圖時用-r
傳遞-r。
vg
具有許多工具來支持使用剪接圖的轉錄組分析(即具有註釋的剪接連接作為邊緣的剪接連接的圖)。這些邊緣可以使用vg rna
添加到現有圖中。然後,我們可以使用vg mpmap
對這些圖進行剪接映射。 vg
開發人員還根據rpvg
中的這些工具為單倍型感知的成績單定量製造了工具。啟動此管道的最簡單方法是使用vg autoindex
子命令為vg mpmap
製作索引。 vg autoindex
創建索引,用於映射FASTA,VCF和GTF等通用互換格式。
有關轉錄組學的Wiki頁面中,請提供更多信息。
從test/
目錄工作以下示例顯示瞭如何使用4個線程使用vg autoindex
創建剪接的Pangenome圖形和索引:
# 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
映射到剪接的pangenome圖:
# 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
這將以多徑格式產生對齊。有關多徑對齊格式和vg mpmap
的更多信息,請參見MPMAP上的Wiki頁面。使用4個線程在小示例數據上運行兩個命令應在大多數機器上花費不到一分鐘的時間。
如果您的圖形很小,則可以使用全長的部分訂單對齊:
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中編寫代碼。相反,有時會更簡單地編寫讀取和寫入相同數據格式的外部算法。
麻省理工學院