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 '
Для последнего запроса последняя строка — «*», что указывает на то, что результат неполный. Обратите внимание, что это веб-приложение использует бесплатный уровень Heroku. Он ограничен только одним процессором и переводится в спящий режим, когда приложение бездействует. Есть накладные расходы на пробуждение. Heroku также заставляет бесплатные приложения спать «6 часов в 24 часа». Я не знаю, как именно это работает.
# 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 поставляется с инструментом командной строки и веб-приложением, которое во многом повторяет использование командной строки. Инструмент поддерживает выразительный и мощный синтаксис запросов. В разделе «Начало работы» показано несколько примеров.
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. Он отбрасывает все поля INFO и FORMAT, кроме GT. См. раздел 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
для преобразования вывода VEP с опцией --pick
в FMF.
Обратите внимание, что из-за ограничений реализации мы рекомендуем использовать с BGT подмножество «важных» вариантов, например:
gzip -dc vep-all.fmf.gz | grep -v " effect:Z:MODIFIER " | gzip > vep-important.fmf.gz
Использование полного набора вариантов — это нормально, но в текущей реализации это происходит намного медленнее.
Запрос BGT состоит из выходных данных и условий. По умолчанию выходные данные имеют формат VCF или могут представлять собой таблицу, разделенную символом TAB, если это необходимо. Условия включают независимый от генотипа выбор сайта с опцией -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 прочитает весь файл аннотаций, чтобы найти список совпадающих аллелей. Это может занять несколько минут, если файлы аннотаций сайта содержат 100 миллионов строк. Вот почему мы рекомендуем использовать подмножество важных аллелей (раздел 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
В дополнение к инструменту командной строки мы также предоставляем прототип веб-приложения для запроса генотипа. Синтаксис запроса аналогичен bgt view
, как показано в разделе «Начало работы», но с некоторыми заметными отличиями:
.and.
для логического оператора И &&
(поскольку &
является специальным символом HTML).g
). Сервер BGT реализует простой механизм, обеспечивающий конфиденциальность образцов или подмножества образцов. Он контролируется единственным параметром: минимальным размером группы выборки или MGS. Сервер отказывается создавать группу выборок, если размер группы меньше, чем MGS одной из выборок в группе. В частности, если MGS больше единицы, сервер не сообщает имя образца или генотипы образца. Каждый образец может иметь разные MGS, что отмечено целочисленным тегом _mgs
в prefix.bgt.spl
. Для образцов без этого тега применяется MGS по умолчанию.
БГТ против ПБВТ. BGT использует ту же структуру данных, что и PBWT, и основан на PBWT. PBWT поддерживает расширенные запросы, такие как сопоставление гаплотипов, фазирование и вменение, тогда как BGT уделяет больше внимания быстрому произвольному доступу и поиску данных.
БГТ против BCF2. BCF более универсален. Он способен хранить метаинформацию для каждого генотипа (например, глубину чтения для каждого генотипа и вероятность генотипа). BGT, как правило, более эффективен и в разы меньше. Он лучше масштабируется для многих образцов. BGT также поддерживает более гибкие запросы, хотя технически ничто не мешает нам реализовать аналогичный функционал поверх BCF.
БГТ против GQT. GQT должен быть намного быстрее при пересечении участков всей хромосомы без учета LD. Однако извлекать данные в небольших регионах или получать информацию о гаплотипах неэффективно из-за их конструкции. По этой причине GQT рассматривается как дополнение к BCF или BGT, а не как замена. По размеру файла GQT обычно больше, чем BCF только для генотипов, и, следовательно, больше, чем BGT.
Тест проводится на основе первого выпуска данных Консорциума ссылок на гаплотипы (HRC). В 32 488 образцах содержится ~39 миллионов поэтапных 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 view -GC -s'source=="1000G"' |
19 с | Просмотр bcftools -Gu -S 1000G.txt HRC-r1.bcf |
8 с | bgt view -G -s 'source=="UK10K"' -s 'source=="1000G"&&population!="GBK"' |
Что касается размеров файлов, база данных BGT для HRC-r1 составляет 7,4 ГБ (1 ГБ = 1024*1024*1024 байта). Для сравнения, BCFv2 для тех же данных занимает 65 ГБ, GQT — 93 ГБ и PBWT — 4,4 ГБ. BGT и PBWT, основанные на одной и той же структуре данных, гораздо компактнее. BGT больше, чем PBWT, главным образом потому, что BGT сохраняет дополнительный бит на гаплотип для различения эталонных и мультиаллелей, а также хранит маркеры для обеспечения быстрого произвольного доступа.