curl -s ' http://bgtdemo.herokuapp.com/ '
curl -s ' http://bgtdemo.herokuapp.com/?a=(impact=="HIGH")&s=(population=="FIN")&f=(AC>0) '
curl -s ' http://bgtdemo.herokuapp.com/?t=CHROM,POS,END,REF,ALT,AC/AN&f=(AC>1)&r=20 '
对于最后一个查询,最后一行是“*”,表示结果不完整。请注意,此 Web 应用程序使用 Heroku 的免费套餐。它仅限于一个 CPU,并在应用程序空闲时进入睡眠状态。有唤醒的开销。 Heroku 还强制免费应用程序“在 24 小时内休眠 6 小时”。我不知道这到底是如何运作的。
# Installation
git clone https://github.com/lh3/bgt.git
cd bgt ; make
# Download demo BCF (1st 1Mbp of chr11 from 1000g), and convert to BGT
wget -O- http://bit.ly/BGTdemo | tar xf -
./bgt import 1kg11-1M.bgt 1kg11-1M.raw.bcf
gzip -dc 1kg11-1M.raw.samples.gz > 1kg11-1M.bgt.spl # sample meta data
# Get all sample genotypes
./bgt view -C 1kg11-1M.bgt | less -S
# Get genotypes of HG00171 and HG00173 in region 11:100,000-200,000
./bgt view -s,HG00171,HG00173 -f ' AC>0 ' -r 11:100000-200000 1kg11-1M.bgt
# Get alleles high-frequency in CEU but absent from YRI
./bgt view -s ' population=="CEU" ' -s ' population=="YRI" ' -f ' AC1/AN1>=0.1&&AC2==0 ' -G 1kg11-1M.bgt
# Select high-impact sites (var annotation provided with -d)
./bgt view -d anno11-1M.fmf.gz -a ' impact=="HIGH" ' -CG 1kg11-1M.bgt
# Compile the server; Go compiler required
make bgt-server
GOMAXPROCS=4 ./bgt-server -d anno11-1M.fmf.gz 1kg11-1M.bgt 2> server.log &
curl -s ' 0.0.0.0:8000 ' | less -S # help
curl -s ' 0.0.0.0:8000/?a=(impact=="HIGH")&s=(population=="FIN")&f=(AC>0) '
BGT 是一种紧凑的文件格式,用于高效存储和查询数万到数十万个样本的全基因组基因型。它可以被视为纯基因型 BCFv2 的替代品。 BGT 尺寸更紧凑,处理效率更高,查询更灵活。
BGT 附带一个命令行工具和一个 Web 应用程序,很大程度上反映了命令行的使用。该工具支持富有表现力且强大的查询语法。 “入门”部分显示了一些示例。
BGT 将基因型数据集建模为基因型矩阵,行按位点索引,列按样本索引。每个 BGT 数据库都保存一个基因型矩阵和一个样本注释文件。站点注释保存在一个单独的文件中,该文件旨在在多个 BGT 数据库之间共享。该模型与 VCF 的不同之处在于,VCF 1) 在标头中保留样本信息,2) 在 INFO 中存储位点注释以及不应在 VCF 之间共享的基因型。
BGT 数据库始终具有从 VCF/BCF 获取的基因型矩阵和样本名称。位点注释和样本表型是可选的,但建议使用。灵活的元数据查询是BGT的一大特色。
# Import BCFv2
bgt import prefix.bgt in.bcf
# Import VCF with "##contig" header lines
bgt import -S prefix.bgt in.vcf.gz
# Import VCF without "##contig" header lines
bgt import -St ref.fa.fai prefix.bgt in.vcf.gz
在导入过程中,BGT 会分离一条 VCF 线上的多个等位基因。它丢弃除 GT 之外的所有 INFO 字段和 FORMAT 字段。请参阅第 2.3 节了解如何将变体注释与 BGT 结合使用。
导入VCF/BCF后,BGT生成prefix.bgt.spl
文本文件,该文件目前只有一列样本名称。您可以将表型数据添加到此文件中,格式如下(字段制表符分隔):
sample1 gender:Z:M height:f:1.73 region:Z:WestEurasia foo:i:10
sample2 gender:Z:F height:f:1.64 region:Z:WestEurasia bar:i:20
其中每个元注释采用格式key:type:value
其中type
Z
表示字符串, f
表示实数, i
表示整数。我们将此格式简称为“扁平元数据格式”或“FMF”。您可以获得符合某些条件的样本:
bgt fmf prefix.bgt.spl ' height>1.7&®ion=="WestEurasia" '
bgt fmf prefix.bgt.spl ' mass/height**2>25&®ion=="WestEurasia" '
您可以在条件中使用最常见的算术和逻辑运算符。
站点注释也保存在 FMF 文件中,例如:
11:209621:1:T effect:Z:missense_variant gene:Z:RIC8A CCDS:Z:CCDS7690.1 CDSpos:i:347
11:209706:1:T effect:Z:synonymous_variant gene:Z:RIC8A CCDS:Z:CCDS7690.1 CDSpos:i:432
我们提供了一个脚本misc/vep2fmf.pl
用于将带有--pick
选项的VEP输出转换为FMF。
请注意,由于实现限制,我们建议将“重要”变体的子集与 BGT 一起使用,例如:
gzip -dc vep-all.fmf.gz | grep -v " effect:Z:MODIFIER " | gzip > vep-important.fmf.gz
使用完整的变体集很好,但当前的实现要慢得多。
BGT 查询由输出和条件组成。默认情况下,输出为 VCF,或者如果需要,也可以是制表符分隔的表。条件包括使用选项-r
和-a
进行的与基因型无关的位点选择(例如,某个区域中的变异)、使用选项-s
进行的与基因型无关的样本选择(例如,样本列表)以及使用选项-f
进行的与基因型相关的位点选择(例如,选定样本中的等位基因频率高于阈值)。 BGT 对基因型依赖性样本选择(例如具有等位基因的样本)的支持有限。
BGT有一个重要的概念“样本组”。在命令行上,每个选项-s
都会创建一个示例组。第 # 个选项-s
填充一对AC#
和AN#
聚合变量。这些变量可用于输出或基因型依赖性位点选择。
# Select by a region
bgt view -r 11:100,000-200,000 1kg11-1M.bgt > out.vcf
# Select by regions in a BED (BGT will read through the entire BGT)
bgt view -B regions.bed 1kg11-1M.bgt > out.vcf
# Select a list of alleles (if on same chr, use random access)
bgt view -a,11:151344:1:G,11:110992:AACTT:A,11:160513::G 1kg11-1M.bgt
# Select by annotations (-d specifies the site annotation database)
bgt view -d anno11-1M.fmf.gz -a ' impact=="HIGH" ' -CG 1kg11-1M.bgt
需要注意的是,在最后一个命令行中,BGT 将读取整个注释文件以查找匹配等位基因的列表。如果站点注释文件包含1亿行,则可能需要几分钟的时间。这就是为什么我们建议使用重要等位基因的子集(第 2.3 节)。
# Select a list of samples
bgt view -s,HG00171,HG00173 1kg11-1M.bgt
# Select by phenotypes (see also section 2.2)
bgt view -s ' population=="CEU" ' 1kg11-1M.bgt
# Create sample groups (there will be AC1/AN1 and AC2/AN2 in VCF INFO)
bgt view -s ' population=="CEU" ' -s ' population=="YRI" ' -G 1kg11-1M.bgt
# Select by allele frequency
bgt view -f ' AN>0&&AC/AN>.05 ' 1kg11-1M.bgt
# Select by group frequnecy
bgt view -s ' population=="CEU" ' -s ' population=="YRI" ' -f ' AC1>10&&AC2==0 ' -G 1kg11-1M.bgt
当然,我们可以在一个命令行中混合所有三种类型的条件:
bgt view -G -s ' population=="CEU" ' -s ' population=="YRI" ' -f ' AC1/AN1>.1&&AC2==0 '
-r 11:100,000-500,000 -d anno11-1M.fmf.gz -a ' CDSpos>0 ' 1kg11-1M.bgt
# Output position, sequence and allele counts
bgt view -t CHROM,POS,REF,ALT,AC1,AC2 -s ' population=="CEU" ' -s ' population=="YRI" ' 1kg11-1M.bgt
# Get samples having a set of alleles (option -S)
bgt view -S -a,11:151344:1:G,11:110992:AACTT:A,11:160513::G -s ' population=="CEU" ' 1kg11-1M.bgt
# Count haplotypes
bgt view -Hd anno11-1M.fmf.gz -a ' gene=="SIRT3" ' -f ' AC/AN>.01 ' 1kg11-1M.bgt
# Count haplotypes in multiple populations
bgt view -Hd anno11-1M.fmf.gz -a ' gene=="SIRT3" ' -f ' AC/AN>.01 '
-s ' region=="Africa" ' -s ' region=="EastAsia" ' 1kg11-1M.bgt
除了命令行工具之外,我们还提供了用于基因型查询的原型 Web 应用程序。查询语法类似于“入门”中所示的bgt view
,但有一些显着差异:
.and.
逻辑 AND 运算符&&
(因为&
是 HTML 的特殊字符)。g
)。BGT 服务器实现了一种简单的机制来保护样本或样本子集的隐私。它由一个参数控制:最小样本组大小或 MGS。如果组的大小小于组中样本之一的 MGS,则服务器拒绝创建样本组。特别是,如果 MGS 大于 1,服务器不会报告样本名称或样本基因型。每个样本可能有不同的 MGS,如prefix.bgt.spl
中的_mgs
整数标签所标记。对于没有此标签的样品,将应用默认的 MGS。
BGT 与 PBWT。 BGT 使用与 PBWT 相同的数据结构,并受到 PBWT 的启发。 PBWT 支持单倍型匹配、定相和插补等高级查询,而 BGT 更注重快速随机访问和数据检索。
BGT 与 BCF2。 BCF 的用途更加广泛。它能够保留每个基因型元信息(例如每个基因型读取深度和基因型可能性)。 BGT 通常更高效且更小。它可以更好地扩展到许多样本。 BGT 还支持更灵活的查询,尽管从技术上讲,没有什么可以阻止我们在 BCF 之上实现类似的功能。
BGT 与 GQT。在不考虑 LD 的情况下,GQT 在遍历整个染色体上的位点时应该要快得多。然而,由于其设计,在小区域检索数据或获取单倍型信息效率低下。因此,GQT 被视为 BCF 或 BGT 的补充,而不是替代品。就文件大小而言,GQT 通常大于仅基因型的 BCF,因此也大于 BGT。
该测试在第一版单体型参考联盟 (HRC) 数据上运行。 32,488 个样本中约有 3900 万个阶段性 SNP。我们已经为整个数据集生成了 BGT,但我们仅在区域 chr11:10,000,001-20,000,000 中运行工具。下表显示了时间和命令行。请注意,该表省略了选项-r 11:10,000,001-20,000,000
,该选项已应用于下面的所有命令行。
时间 | 命令行 |
---|---|
11秒 | bgt视图-G HRC-r1.bgt |
13秒 | bcftools查看-Gu HRC-r1.bcf |
30秒 | bgt视图-GC HRC-r1.bgt |
4秒 | bgt视图-GC -s'源==“1000G”' |
19秒 | bcftools查看-Gu -S 1000G.txt HRC-r1.bcf |
8秒 | bgt view -G -s '源=="UK10K"' -s '源=="1000G"&&population!="GBK"' |
在文件大小上,HRC-r1的BGT数据库为7.4GB(1GB=1024*1024*1024字节)。相比之下,相同数据的BCFv2需要65GB,GQT需要93GB,PBWT需要4.4GB。 BGT和PBWT基于相同的数据结构,因此更加紧凑。 BGT 比 PBWT 大,主要是因为 BGT 为每个单倍型保留一个额外的位来区分参考和多等位基因,并存储标记以实现快速随机访问。