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 '
Pour la dernière requête, la dernière ligne est "*", indiquant que le résultat est incomplet. Notez que cette application Web utilise le niveau gratuit de Heroku. Il est limité à un seul processeur et mis en veille lorsque l'application est inactive. Il y a une surcharge de réveil. Heroku force également les applications gratuites à dormir pendant « 6 heures sur une période de 24 heures ». Je ne sais pas exactement comment cela fonctionne.
# 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 est un format de fichier compact permettant de stocker et d’interroger efficacement des génotypes du génome entier comprenant des dizaines à des centaines de milliers d’échantillons. Il peut être considéré comme une alternative au BCFv2 uniquement génotypique. BGT est plus compact en taille, plus efficace à traiter et plus flexible en matière de requêtes.
BGT est livré avec un outil de ligne de commande et une application Web qui reflète largement les utilisations de la ligne de commande. L'outil prend en charge une syntaxe de requête expressive et puissante. La section "Mise en route" présente quelques exemples.
BGT modélise un ensemble de données génotypiques sous la forme d'une matrice de génotypes avec des lignes indexées par site et des colonnes par échantillon. Chaque base de données BGT conserve une matrice de gène et un exemple de fichier d'annotation. Les annotations du site sont conservées dans un fichier séparé destiné à être partagé entre plusieurs bases de données BGT. Ce modèle est différent du VCF dans la mesure où le VCF 1) conserve les informations sur les échantillons dans l'en-tête et 2) stocke les annotations du site dans INFO ainsi que les génotypes qui ne sont pas destinés à être partagés entre les VCF.
Une base de données BGT contient toujours une matrice de génotypes et des noms d'échantillons, acquis à partir de VCF/BCF. Les annotations du site et les échantillons de phénotypes sont facultatifs mais sont recommandés. La requête flexible de métadonnées est une caractéristique distinctive 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
Lors de l'importation, BGT sépare plusieurs allèles sur une seule ligne VCF. Il supprime tous les champs INFO et FORMAT à l'exception de GT. Voir la section 2.3 pour savoir comment utiliser les annotations de variantes avec BGT.
Après avoir importé VCF/BCF, BGT génère un fichier texte prefix.bgt.spl
, qui ne contient pour l'instant qu'une seule colonne de noms d'échantillons. Vous pouvez ajouter des données de phéotype à ce fichier dans un format tel que (champs délimités par des TAB) :
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
où chaque méta-annotation prend un format key:type:value
type
étant Z
pour une chaîne, f
pour un nombre réel et i
pour un entier. Nous appelons ce format Flat Metadata Format ou FMF en abrégé. Vous pouvez obtenir des échantillons répondant à certaines conditions avec :
bgt fmf prefix.bgt.spl ' height>1.7&®ion=="WestEurasia" '
bgt fmf prefix.bgt.spl ' mass/height**2>25&®ion=="WestEurasia" '
Vous pouvez utiliser les opérateurs arithmétiques et logiques les plus courants dans la condition.
Les annotations du site sont également conservées dans un fichier FMF comme :
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
Nous fournissons un script misc/vep2fmf.pl
pour convertir la sortie VEP avec l'option --pick
en FMF.
Notez qu'en raison d'une limitation d'implémentation, nous recommandons d'utiliser un sous-ensemble de variantes « importantes » avec BGT, par exemple :
gzip -dc vep-all.fmf.gz | grep -v " effect:Z:MODIFIER " | gzip > vep-important.fmf.gz
Utiliser l’ensemble complet des variantes est une bonne chose, mais c’est beaucoup plus lent avec l’implémentation actuelle.
Une requête BGT est composée de sorties et de conditions. La sortie est VCF par défaut ou peut être une table délimitée par des TAB si nécessaire. Les conditions incluent la sélection de sites indépendante du génotype avec les options -r
et -a
(par exemple, des variantes dans une région), la sélection d'échantillons indépendante du génotype avec l'option -s
(par exemple une liste d'échantillons) et la sélection de sites dépendant du génotype avec l'option -f
( par exemple, fréquence allélique parmi les échantillons sélectionnés au-dessus d'un seuil). BGT prend en charge de manière limitée la sélection d'échantillons dépendant du génotype (par exemple, les échantillons ayant un allèle).
BGT a un concept important de « groupe d'échantillons ». Sur la ligne de commande, chaque option -s
crée un exemple de groupe. La #-ème option -s
remplit une paire de variables agrégées AC#
et AN#
. Ces variables peuvent être utilisées dans la sélection de sites en sortie ou en fonction du génotype.
# 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
Il convient de noter que dans la dernière ligne de commande, BGT lira l'intégralité du fichier d'annotation pour trouver la liste des allèles correspondants. Cela peut prendre plusieurs minutes si les fichiers d'annotation du site contiennent 100 millions de lignes. C'est pourquoi nous recommandons d'utiliser un sous-ensemble d'allèles importants (section 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
Bien entendu, nous pouvons mélanger les trois types de conditions sur une seule ligne de commande :
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
En plus d'un outil en ligne de commande, nous fournissons également un prototype d'application Web pour les requêtes de génotype. La syntaxe de la requête est similaire à celle bgt view
comme indiqué dans « Mise en route », mais avec quelques différences notables :
.and.
pour l'opérateur logique ET &&
(car &
est un caractère spécial HTML).g
requise pour le serveur). Le serveur BGT implémente un mécanisme simple pour préserver la confidentialité des échantillons ou d'un sous-ensemble d'échantillons. Elle est contrôlée par un seul paramètre : la taille minimale du groupe d'échantillons ou MGS. Le serveur refuse de créer un groupe d'échantillons si la taille du groupe est inférieure au MGS de l'un des échantillons du groupe. En particulier, si MGS est supérieur à un, le serveur ne signale pas le nom de l'échantillon ni les génotypes de l'échantillon. Chaque échantillon peut avoir un MGS différent, comme indiqué par la balise entière _mgs
dans prefix.bgt.spl
. Pour les échantillons sans cette balise, un MGS par défaut est appliqué.
BGT contre PBWT. BGT utilise la même structure de données que PBWT et s'inspire de PBWT. PBWT prend en charge les requêtes avancées telles que la correspondance d'haplotypes, le phasage et l'imputation, tandis que BGT met davantage l'accent sur l'accès aléatoire rapide et la récupération de données.
BGT contre BCF2. BCF est plus polyvalent. Il est capable de conserver des méta-informations par génotype (par exemple, profondeur de lecture et probabilité de génotype). BGT est généralement plus efficace et parfois plus petit. Il s'adapte mieux à de nombreux échantillons. BGT prend également en charge des requêtes plus flexibles, même si techniquement, rien ne nous empêche d'implémenter des fonctionnalités similaires en plus de BCF.
BGT contre GQT. GQT devrait être beaucoup plus rapide pour parcourir des sites sur des chromosomes entiers sans tenir compte de LD. Il est cependant inefficace de récupérer des données dans de petites régions ou d'obtenir des informations sur les haplotypes en raison de sa conception. Pour cette raison, GQT est considéré comme un complément au BCF ou au BGT, et non comme un remplacement. En ce qui concerne la taille du fichier, GQT est généralement plus grand que le BCF uniquement pour le génotype et est donc plus grand que le BGT.
Le test est exécuté sur la première version des données du Haplotype Reference Consortium (HRC). Il existe environ 39 millions de SNP par étapes dans 32 488 échantillons. Nous avons généré le BGT pour l'ensemble de données, mais nous n'exécutons que des outils dans la région chr11 : 10 000 001-20 000 000. Le tableau suivant montre l'heure et la ligne de commande. Notez que le tableau omet l'option -r 11:10,000,001-20,000,000
qui a été appliquée à toutes les lignes de commande ci-dessous.
Temps | Ligne de commande |
---|---|
11s | vue bgt -G HRC-r1.bgt |
13s | Vue bcftools -Gu HRC-r1.bcf |
années 30 | vue bgt -GC HRC-r1.bgt |
4s | vue bgt -GC -s'source=="1000G"' |
19s | Vue bcftools -Gu -S 1000G.txt HRC-r1.bcf |
8s | bgt view -G -s 'source=="UK10K"' -s 'source=="1000G"&&population!="GBK"' |
Concernant la taille des fichiers, la base de données BGT pour HRC-r1 est de 7,4 Go (1 Go = 1 024*1 024*1 024 octets). En comparaison, BCFv2 pour les mêmes données prend 65 Go, GQT 93 Go et PBWT 4,4 Go. BGT et PBWT, qui reposent sur la même structure de données, sont beaucoup plus compacts. BGT est plus grand que PBWT principalement parce que BGT conserve un bit supplémentaire par haplotype pour distinguer la référence et l'allèle multiple, et stocke des marqueurs pour permettre un accès aléatoire rapide.