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 '
Untuk query terakhir, baris terakhir adalah "*", yang menunjukkan hasil tidak lengkap. Perhatikan bahwa aplikasi web ini menggunakan tingkat gratis Heroku. Ini dibatasi hanya untuk satu CPU dan dialihkan ke mode tidur saat aplikasi menganggur. Ada overhead saat bangun. Heroku juga memaksa aplikasi gratis untuk tidur selama "6 jam dalam periode 24 jam". Saya tidak tahu persis bagaimana cara kerjanya.
# 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 adalah format file ringkas untuk menyimpan dan menanyakan genotipe seluruh genom secara efisien dari puluhan hingga ratusan ribu sampel. Ini dapat dianggap sebagai alternatif BCFv2 khusus genotipe. BGT berukuran lebih kompak, lebih efisien untuk diproses, dan lebih fleksibel dalam permintaan.
BGT hadir dengan alat baris perintah dan aplikasi web yang sebagian besar mencerminkan penggunaan baris perintah. Alat ini mendukung sintaksis kueri yang ekspresif dan kuat. Bagian "Memulai" memperlihatkan beberapa contoh.
BGT memodelkan kumpulan data genotipe sebagai matriks genotipe dengan baris yang diindeks berdasarkan situs dan kolom berdasarkan sampel. Setiap database BGT menyimpan matriks tipe gen dan contoh file anotasi. Anotasi situs disimpan dalam file terpisah yang dimaksudkan untuk dibagikan ke beberapa database BGT. Model ini berbeda dari VCF karena VCF 1) menyimpan informasi sampel di header dan 2) menyimpan anotasi situs di INFO bersama dengan genotipe yang tidak dimaksudkan untuk dibagikan ke seluruh VCF.
Basis data BGT selalu memiliki matriks genotipe dan nama sampel, yang diperoleh dari VCF/BCF. Anotasi situs dan sampel fenotipe bersifat opsional tetapi direkomendasikan. Kueri meta data yang fleksibel adalah fitur pembeda 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
Selama impor, BGT memisahkan beberapa alel pada satu jalur VCF. Ini membuang semua bidang INFO dan bidang FORMAT kecuali GT. Lihat bagian 2.3 tentang cara menggunakan anotasi varian dengan BGT.
Setelah mengimpor VCF/BCF, BGT menghasilkan file teks prefix.bgt.spl
, yang untuk saat ini hanya memiliki satu kolom nama sampel. Anda dapat menambahkan data pheotype ke file ini dalam format seperti (bidang yang dibatasi 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
di mana setiap anotasi meta mengambil format key:type:value
dengan type
Z
untuk string, f
untuk bilangan real dan i
untuk bilangan bulat. Kami menyebutnya format Flat Metadata Format atau singkatnya FMF. Anda bisa mendapatkan sampel yang sesuai dengan kondisi tertentu dengan:
bgt fmf prefix.bgt.spl ' height>1.7&®ion=="WestEurasia" '
bgt fmf prefix.bgt.spl ' mass/height**2>25&®ion=="WestEurasia" '
Anda dapat menggunakan operator aritmatika dan logika paling umum dalam kondisi tersebut.
Anotasi situs juga disimpan dalam file FMF seperti:
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
Kami menyediakan skrip misc/vep2fmf.pl
untuk mengkonversi output VEP dengan opsi --pick
ke FMF.
Perhatikan bahwa karena keterbatasan penerapan, kami menyarankan untuk menggunakan subkumpulan varian "penting" dengan BGT, misalnya:
gzip -dc vep-all.fmf.gz | grep -v " effect:Z:MODIFIER " | gzip > vep-important.fmf.gz
Menggunakan rangkaian varian lengkap tidak masalah, namun jauh lebih lambat dengan penerapan saat ini.
Kueri BGT terdiri dari keluaran dan kondisi. Outputnya adalah VCF secara default atau dapat berupa tabel yang dibatasi TAB jika diminta. Syaratnya mencakup pemilihan lokasi yang tidak bergantung pada genotipe dengan opsi -r
dan -a
(misalnya varian dalam suatu wilayah), pemilihan sampel yang tidak bergantung pada genotipe dengan opsi -s
(misalnya daftar sampel), dan pemilihan lokasi yang bergantung pada genotipe dengan opsi -f
( misalnya frekuensi alel di antara sampel terpilih di atas ambang batas). BGT memiliki dukungan terbatas terhadap pemilihan sampel yang bergantung pada genotipe (misalnya sampel yang memiliki alel).
BGT memiliki konsep penting “kelompok sampel”. Pada baris perintah, setiap opsi -s
membuat grup sampel. -s
ke-# -s mengisi sepasang variabel agregat AC#
dan AN#
. Variabel-variabel ini dapat digunakan dalam pemilihan lokasi yang bergantung pada keluaran atau genotipe.
# 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
Perlu dicatat bahwa pada baris perintah terakhir, BGT akan membaca seluruh file anotasi untuk menemukan daftar alel yang cocok. Mungkin diperlukan waktu beberapa menit jika file anotasi situs berisi 100 juta baris. Itu sebabnya kami menyarankan untuk menggunakan subset alel penting (bagian 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
Tentu saja, kita dapat menggabungkan ketiga jenis kondisi tersebut dalam satu baris perintah:
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
Selain alat baris perintah, kami juga menyediakan aplikasi web prototipe untuk kueri genotipe. Sintaks kueri mirip dengan bgt view
seperti yang ditunjukkan di "Memulai", namun dengan beberapa perbedaan penting:
.and.
untuk operator logika AND &&
(karena &
adalah karakter khusus untuk HTML).g
diperlukan untuk server). Server BGT menerapkan mekanisme sederhana untuk menjaga privasi sampel atau sebagian sampel. Hal ini dikontrol oleh satu parameter: ukuran kelompok sampel minimal atau MGS. Server menolak membuat grup sampel jika ukuran grup lebih kecil dari MGS salah satu sampel dalam grup. Khususnya, jika MGS di atas satu, server tidak melaporkan nama sampel atau genotipe sampel. Setiap sampel mungkin memiliki MGS berbeda seperti yang ditandai dengan tag integer _mgs
di prefix.bgt.spl
. Untuk sampel tanpa tag ini, MGS default diterapkan.
BGT vs PBWT. BGT menggunakan struktur data yang sama dengan PBWT dan terinspirasi oleh PBWT. PBWT mendukung kueri tingkat lanjut seperti pencocokan haplotype, pentahapan, dan imputasi, sementara BGT lebih menekankan pada akses acak cepat dan pengambilan data.
BGT vs BCF2. BCF lebih serbaguna. Ia mampu menyimpan informasi meta per genotipe (misalnya kedalaman baca per genotipe dan kemungkinan genotipe). BGT umumnya lebih efisien dan kali lebih kecil. Skala ini lebih baik untuk banyak sampel. BGT juga mendukung kueri yang lebih fleksibel, meskipun secara teknis, tidak ada yang menghalangi kami untuk mengimplementasikan fungsi serupa di atas BCF.
BGT vs GQT. GQT seharusnya lebih cepat dalam melintasi situs di seluruh kromosom tanpa mempertimbangkan LD. Namun tidak efisien untuk mengambil data di wilayah kecil atau mendapatkan informasi haplotype karena desainnya. Oleh karena itu, GQT dianggap sebagai pelengkap BCF atau BGT, bukan pengganti. Dari segi ukuran file, GQT biasanya lebih besar dari BCF khusus genotipe dan karenanya lebih besar dari BGT.
Pengujian dijalankan pada rilis pertama data Haplotype Referrence Consortium (HRC). Ada ~39 juta SNP bertahap dalam 32.488 sampel. Kami telah membuat BGT untuk seluruh kumpulan data, tetapi Kami hanya menjalankan alat di wilayah chr11:10,000,001-20,000,000. Tabel berikut menunjukkan waktu dan baris perintah. Perhatikan bahwa tabel menghilangkan opsi -r 11:10,000,001-20,000,000
yang telah diterapkan ke semua baris perintah di bawah.
Waktu | Baris perintah |
---|---|
11 detik | tampilan bgt -G HRC-r1.bgt |
13 detik | tampilan bcftools -Gu HRC-r1.bcf |
30an | tampilan bgt -GC HRC-r1.bgt |
4 detik | tampilan bgt -GC -s'source=="1000G"' |
19-an | tampilan bcftools -Gu -S 1000G.txt HRC-r1.bcf |
8 detik | bgt lihat -G -s 'source=="UK10K"' -s 'source=="1000G"&&populasi!="GBK"' |
Pada ukuran file, database BGT untuk HRC-r1 adalah 7,4 GB (1 GB=1024*1024*1024 byte). Sebagai perbandingan, BCFv2 untuk data yang sama membutuhkan 65GB, GQT 93GB, dan PBWT 4,4GB. BGT dan PBWT, yang didasarkan pada struktur data yang sama, jauh lebih kompak. BGT lebih besar dari PBWT terutama karena BGT menyimpan bit tambahan per haplotype untuk membedakan referensi dan multi alel, dan menyimpan penanda untuk memungkinkan akses acak cepat.