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 '
Para la última consulta, la última línea es "*", lo que indica que el resultado está incompleto. Tenga en cuenta que esta aplicación web utiliza el nivel gratuito de Heroku. Está restringido a una sola CPU y se pone en suspensión cuando la aplicación está inactiva. Hay una sobrecarga de despertar. Heroku también obliga a las aplicaciones gratuitas a dormir durante "6 horas en un período de 24 horas". No sé cómo funciona esto exactamente.
# 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 es un formato de archivo compacto para almacenar y consultar de manera eficiente genotipos de genoma completo de decenas a cientos de miles de muestras. Puede considerarse como una alternativa al BCFv2 de solo genotipo. BGT tiene un tamaño más compacto, es más eficiente de procesar y más flexible en las consultas.
BGT viene con una herramienta de línea de comandos y una aplicación web que refleja en gran medida los usos de la línea de comandos. La herramienta admite una sintaxis de consulta potente y expresiva. La sección "Comenzando" muestra algunos ejemplos.
BGT modela un conjunto de datos de genotipo como una matriz de genotipos con filas indexadas por sitio y columnas por muestra. Cada base de datos de BGT mantiene una matriz de tipo genético y un archivo de anotaciones de muestra. Las anotaciones del sitio se guardan en un archivo separado que debe compartirse entre múltiples bases de datos de BGT. Este modelo se diferencia del VCF en que el VCF 1) mantiene la información de la muestra en el encabezado y 2) almacena las anotaciones del sitio en INFO junto con los genotipos que no deben compartirse entre los VCF.
Una base de datos de BGT siempre tiene una matriz de genotipo y nombres de muestras, que se adquieren de VCF/BCF. Las anotaciones del sitio y los fenotipos de muestra son opcionales, pero se recomiendan. La consulta de metadatos flexible es una característica distintiva de 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
Durante la importación, BGT separa varios alelos en una línea VCF. Descarta todos los campos INFORMACIÓN y FORMATO excepto GT. Consulte la sección 2.3 sobre cómo utilizar anotaciones de variantes con BGT.
Después de importar VCF/BCF, BGT genera el archivo de texto prefix.bgt.spl
, que por ahora solo tiene una columna de nombres de muestra. Puede agregar datos de feotipo a este archivo en un formato como (campos delimitados por tabulaciones):
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
donde cada metaanotación toma un formato key:type:value
siendo type
Z
para una cadena, f
para un número real e i
para un número entero. A este formato lo llamamos formato plano de metadatos o FMF. Puede obtener muestras que cumplan determinadas condiciones con:
bgt fmf prefix.bgt.spl ' height>1.7&®ion=="WestEurasia" '
bgt fmf prefix.bgt.spl ' mass/height**2>25&®ion=="WestEurasia" '
Puede conocer los operadores lógicos y aritméticos más comunes en la condición.
Las anotaciones del sitio también se guardan en un archivo FMF como:
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
Proporcionamos un script misc/vep2fmf.pl
para convertir la salida VEP con la opción --pick
a FMF.
Tenga en cuenta que debido a una limitación de implementación, recomendamos utilizar un subconjunto de variantes "importantes" con BGT, por ejemplo:
gzip -dc vep-all.fmf.gz | grep -v " effect:Z:MODIFIER " | gzip > vep-important.fmf.gz
Usar el conjunto completo de variantes está bien, pero es mucho más lento con la implementación actual.
Una consulta BGT se compone de resultados y condiciones. La salida es VCF de forma predeterminada o puede ser una tabla delimitada por TAB si es necesario. Las condiciones incluyen selección de sitio independiente del genotipo con la opción -r
y -a
(por ejemplo, variantes en una región), selección de muestra independiente del genotipo con la opción -s
(por ejemplo, una lista de muestras) y selección de sitio dependiente del genotipo con la opción -f
( por ejemplo, frecuencia alélica entre muestras seleccionadas por encima de un umbral). BGT tiene un apoyo limitado a la selección de muestras dependiente del genotipo (por ejemplo, muestras que tienen un alelo).
BGT tiene un concepto importante de "grupo de muestra". En la línea de comando, cada opción -s
crea un grupo de muestra. La opción #-ésima -s
completa un par de variables agregadas AC#
y AN#
. Estas variables se pueden utilizar en la selección de sitios dependientes del resultado o del genotipo.
# 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
Cabe señalar que en la última línea de comando, BGT leerá todo el archivo de anotaciones para encontrar la lista de alelos coincidentes. Puede tardar varios minutos si los archivos de anotaciones del sitio contienen 100 millones de líneas. Por eso recomendamos utilizar un subconjunto de alelos importantes (sección 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
Por supuesto, podemos combinar los tres tipos de condiciones en una línea de comando:
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
Además de una herramienta de línea de comandos, también proporcionamos un prototipo de aplicación web para consulta de genotipo. La sintaxis de consulta es similar a bgt view
, como se muestra en "Cómo comenzar", pero con algunas diferencias notables:
.and.
para el operador lógico AND &&
(ya que &
es un carácter especial de HTML).g
para el servidor). El servidor BGT implementa un mecanismo simple para mantener la privacidad de las muestras o de un subconjunto de muestras. Está controlado por un único parámetro: tamaño mínimo del grupo de muestra o MGS. El servidor se niega a crear un grupo de muestra si el tamaño del grupo es menor que el MGS de una de las muestras del grupo. En particular, si MGS es superior a uno, el servidor no informa el nombre de la muestra ni los genotipos de la muestra. Cada muestra puede tener un MGS diferente como lo marca la etiqueta entera _mgs
en prefix.bgt.spl
. Para muestras sin esta etiqueta, se aplica un MGS predeterminado.
BGT frente a PBWT. BGT utiliza la misma estructura de datos que PBWT y está inspirado en PBWT. PBWT admite consultas avanzadas como coincidencia de haplotipos, fases e imputación, mientras que BGT pone más énfasis en el acceso aleatorio rápido y la recuperación de datos.
BGT frente a BCF2. BCF es más versátil. Es capaz de mantener metainformación por genotipo (por ejemplo, profundidad de lectura por genotipo y probabilidad de genotipo). BGT es generalmente más eficiente y más pequeño. Se adapta mejor a muchas muestras. BGT también admite consultas más flexibles, aunque técnicamente nada nos impide implementar funcionalidades similares además de BCF.
BGT frente a GQT. GQT debería ser mucho más rápido al atravesar sitios de cromosomas completos sin considerar LD. Sin embargo, debido a su diseño, es ineficiente recuperar datos en regiones pequeñas u obtener información de haplotipos. Por esta razón, GQT se considera un complemento de BCF o BGT, no un reemplazo. En cuanto al tamaño del archivo, GQT suele ser mayor que el BCF de solo genotipo y, por tanto, es mayor que BGT.
La prueba se ejecuta en la primera versión de los datos del Haplotype Reference Consortium (HRC). Hay ~39 millones de SNP en fases en 32.488 muestras. Hemos generado el BGT para todo el conjunto de datos, pero solo ejecutamos herramientas en la región chr11:10,000,001-20,000,000. La siguiente tabla muestra la hora y la línea de comando. Tenga en cuenta que la tabla omite la opción -r 11:10,000,001-20,000,000
que se ha aplicado a todas las líneas de comando siguientes.
Tiempo | línea de comando |
---|---|
11 | vista bgt -G HRC-r1.bgt |
13 | Vista de bcftools -Gu HRC-r1.bcf |
30 años | vista bgt -GC HRC-r1.bgt |
4s | vista bgt -GC -s'source=="1000G"' |
19 años | vista bcftools -Gu -S 1000G.txt HRC-r1.bcf |
8s | vista bgt -G -s 'source=="UK10K"' -s 'source=="1000G"&&población!="GBK"' |
En cuanto al tamaño de los archivos, la base de datos BGT para HRC-r1 es de 7,4 GB (1 GB = 1024*1024*1024 bytes). En comparación, BCFv2 para los mismos datos requiere 65 GB, GQT 93 GB y PBWT 4,4 GB. BGT y PBWT, que se basan en la misma estructura de datos, son mucho más compactos. BGT es más grande que PBWT principalmente porque BGT mantiene un bit adicional por haplotipo para distinguir la referencia y el alelo múltiple, y almacena marcadores para permitir un acceso aleatorio rápido.