变异图提供了许多基因组序列的简洁编码。一个变体图(尤其是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中编写代码。相反,有时会更简单地编写读取和写入相同数据格式的外部算法。
麻省理工学院