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 '
Bei der letzten Abfrage lautet die letzte Zeile „*“, was darauf hinweist, dass das Ergebnis unvollständig ist. Beachten Sie, dass diese Web-App die kostenlose Stufe von Heroku nutzt. Es ist auf nur eine CPU beschränkt und wird in den Ruhezustand versetzt, wenn die App inaktiv ist. Es gibt einen Overhead des Aufwachens. Heroku zwingt außerdem kostenlose Apps dazu, „6 Stunden in einem Zeitraum von 24 Stunden“ in den Ruhezustand zu versetzen. Ich weiß nicht, wie das genau funktioniert.
# 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 ist ein kompaktes Dateiformat zur effizienten Speicherung und Abfrage von Genotypen des gesamten Genoms von Zehntausenden bis Hunderttausenden Proben. Es kann als Alternative zum reinen Genotyp-BCFv2 betrachtet werden. BGT ist kompakter, effizienter zu verarbeiten und flexibler bei Abfragen.
BGT wird mit einem Befehlszeilentool und einer Webanwendung geliefert, die die Verwendung der Befehlszeile weitgehend widerspiegelt. Das Tool unterstützt eine ausdrucksstarke und leistungsstarke Abfragesyntax. Im Abschnitt „Erste Schritte“ finden Sie einige Beispiele.
BGT modelliert einen Genotyp-Datensatz als Matrix von Genotypen mit Zeilen, die nach Standort und Spalten nach Probe indiziert sind. Jede BGT-Datenbank enthält eine Gentypmatrix und eine Beispielannotationsdatei. Site-Anmerkungen werden in einer separaten Datei gespeichert, die für die gemeinsame Nutzung in mehreren BGT-Datenbanken vorgesehen ist. Dieses Modell unterscheidet sich von VCF darin, dass VCF 1) Probeninformationen im Header behält und 2) Site-Anmerkungen in INFO zusammen mit Genotypen speichert, die nicht für die gemeinsame Nutzung zwischen VCFs gedacht sind.
Eine BGT-Datenbank verfügt immer über eine Genotypmatrix und Probennamen, die von VCF/BCF bezogen werden. Standortanmerkungen und Beispielphänotypen sind optional, werden jedoch empfohlen. Die flexible Abfrage von Metadaten zeichnet BGT aus.
# 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
Während des Imports trennt BGT mehrere Allele auf einer VCF-Linie. Es verwirft alle INFO-Felder und FORMAT-Felder außer GT. Informationen zur Verwendung von Variantenanmerkungen mit BGT finden Sie in Abschnitt 2.3.
Nach dem Import von VCF/BCF generiert BGT die Textdatei prefix.bgt.spl
, die vorerst nur eine Spalte mit Beispielnamen enthält. Sie können dieser Datei Phäotypdaten in einem Format wie (Felder durch Tabulatorzeichen getrennt) hinzufügen:
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
Dabei hat jede Metaanmerkung das Format „ key:type:value
wobei type
Z
für eine Zeichenfolge, f
für eine reelle Zahl und i
für eine Ganzzahl ist. Wir nennen dieses Format Flat Metadata Format oder kurz FMF. Muster, die bestimmten Bedingungen entsprechen, erhalten Sie bei:
bgt fmf prefix.bgt.spl ' height>1.7&®ion=="WestEurasia" '
bgt fmf prefix.bgt.spl ' mass/height**2>25&®ion=="WestEurasia" '
Sie können in der Bedingung die gängigsten arithmetischen und logischen Operatoren verwenden.
Site-Anmerkungen werden auch in einer FMF-Datei gespeichert, wie zum Beispiel:
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
Wir stellen ein Skript misc/vep2fmf.pl
zur Verfügung, um die VEP-Ausgabe mit der Option --pick
in FMF zu konvertieren.
Beachten Sie, dass wir aufgrund einer Implementierungsbeschränkung empfehlen, eine Teilmenge „wichtiger“ Varianten mit BGT zu verwenden, zum Beispiel:
gzip -dc vep-all.fmf.gz | grep -v " effect:Z:MODIFIER " | gzip > vep-important.fmf.gz
Die Verwendung des gesamten Variantensatzes ist in Ordnung, ist jedoch mit der aktuellen Implementierung viel langsamer.
Eine BGT-Abfrage besteht aus Ausgabe und Bedingungen. Die Ausgabe ist standardmäßig VCF oder kann bei Bedarf eine durch Tabulatoren getrennte Tabelle sein. Zu den Bedingungen gehören genotypunabhängige Standortauswahl mit Option -r
und -a
(z. B. Varianten in einer Region), genotypunabhängige Probenauswahl mit Option -s
(z. B. eine Liste von Proben) und genotypabhängige Standortauswahl mit Option -f
( z. B. Allelhäufigkeit unter ausgewählten Proben über einem Schwellenwert). BGT bietet nur begrenzte Unterstützung für die genotypabhängige Probenauswahl (z. B. Proben mit einem Allel).
BGT hat ein wichtiges Konzept „Probengruppe“. In der Befehlszeile erstellt jede Option -s
eine Beispielgruppe. Die #-te Option -s
füllt ein Paar von AC#
und AN#
-Aggregatvariablen. Diese Variablen können bei der Ausgabe oder der genotypabhängigen Standortauswahl verwendet werden.
# 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
Es ist zu beachten, dass BGT in der letzten Befehlszeile die gesamte Annotationsdatei durchliest, um die Liste der übereinstimmenden Allele zu finden. Es kann mehrere Minuten dauern, wenn die Site-Anmerkungsdateien 100 Millionen Zeilen enthalten. Aus diesem Grund empfehlen wir die Verwendung einer Teilmenge wichtiger Allele (Abschnitt 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
Natürlich können wir alle drei Arten von Bedingungen in einer Befehlszeile mischen:
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
Neben einem Kommandozeilentool stellen wir auch eine prototypische Webanwendung zur Genotypabfrage zur Verfügung. Die Abfragesyntax ähnelt bgt view
, wie in „Erste Schritte“ gezeigt, weist jedoch einige bemerkenswerte Unterschiede auf:
.and.
für den logischen UND-Operator &&
(da &
ein Sonderzeichen in HTML ist).g
für Server erforderlich). Der BGT-Server implementiert einen einfachen Mechanismus, um die Privatsphäre von Proben oder einer Teilmenge von Proben zu wahren. Es wird durch einen einzigen Parameter gesteuert: minimale Probengruppengröße oder MGS. Der Server weigert sich, eine Stichprobengruppe zu erstellen, wenn die Größe der Gruppe kleiner ist als der MGS einer der Stichproben in der Gruppe. Insbesondere wenn MGS über eins liegt, meldet der Server weder Probennamen noch Probengenotypen. Jede Probe kann einen anderen MGS haben, wie durch das Integer-Tag _mgs
in prefix.bgt.spl
gekennzeichnet. Für Proben ohne dieses Tag wird ein Standard-MGS angewendet.
BGT vs. PBWT. BGT verwendet dieselbe Datenstruktur wie PBWT und ist von PBWT inspiriert. PBWT unterstützt erweiterte Abfragen wie Haplotyp-Matching, Phasing und Imputation, während BGT mehr Wert auf schnellen Zufallszugriff und Datenabruf legt.
BGT vs. BCF2. BCF ist vielseitiger. Es ist in der Lage, Metainformationen pro Genotyp zu speichern (z. B. Lesetiefe pro Genotyp und Genotypwahrscheinlichkeit). BGT ist im Allgemeinen effizienter und mal kleiner. Es lässt sich besser auf viele Proben skalieren. BGT unterstützt auch flexiblere Abfragen, obwohl uns technisch gesehen nichts daran hindert, ähnliche Funktionalitäten zusätzlich zu BCF zu implementieren.
BGT vs. GQT. GQT sollte beim Durchqueren von Stellen über ganze Chromosomen ohne Berücksichtigung von LD viel schneller sein. Aufgrund seines Designs ist es jedoch ineffizient, Daten in kleinen Regionen abzurufen oder Haplotypinformationen zu erhalten. Aus diesem Grund wird GQT als Ergänzung zu BCF oder BGT und nicht als Ersatz betrachtet. In Bezug auf die Dateigröße ist GQT normalerweise größer als BCF nur für den Genotyp und daher größer als BGT.
Der Test wird mit der ersten Veröffentlichung der Daten des Haplotype Reference Consortium (HRC) durchgeführt. Es gibt etwa 39 Millionen phasenweise SNPs in 32.488 Proben. Wir haben die BGT für den gesamten Datensatz generiert, führen jedoch nur Tools in der Region chr11:10.000.001-20.000.000 aus. Die folgende Tabelle zeigt die Uhrzeit und die Befehlszeile. Beachten Sie, dass in der Tabelle die Option -r 11:10,000,001-20,000,000
weggelassen wird, die auf alle folgenden Befehlszeilen angewendet wurde.
Zeit | Befehlszeile |
---|---|
11s | bgt view -G HRC-r1.bgt |
13s | bcftools-Ansicht -Gu HRC-r1.bcf |
30er Jahre | bgt-Ansicht -GC HRC-r1.bgt |
4s | bgt view -GC -s'source=="1000G"' |
19er Jahre | bcftools view -Gu -S 1000G.txt HRC-r1.bcf |
8s | bgt view -G -s 'source=="UK10K"' -s 'source=="1000G"&&population!="GBK"' |
Bezüglich der Dateigrößen beträgt die BGT-Datenbank für HRC-r1 7,4 GB (1 GB = 1024 * 1024 * 1024 Byte). Im Vergleich dazu benötigt BCFv2 für die gleichen Daten 65 GB, GQT 93 GB und PBWT 4,4 GB. BGT und PBWT, die auf derselben Datenstruktur basieren, sind viel kompakter. BGT ist größer als PBWT, hauptsächlich weil BGT ein zusätzliches Bit pro Haplotyp behält, um Referenz und Multi-Allel zu unterscheiden, und Marker speichert, um einen schnellen Zufallszugriff zu ermöglichen.