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의 무료 등급을 사용하고 있습니다. 하나의 CPU로만 제한되며 앱이 유휴 상태일 때 절전 모드로 전환됩니다. 웨이크업 오버헤드가 있습니다. Heroku는 또한 무료 앱을 "24시간 중 6시간" 동안 절전 모드로 강제 전환합니다. 이것이 정확히 어떻게 작동하는지 모르겠습니다.
# 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 1) 헤더에 샘플 정보를 유지하고 2) VCF 간에 공유할 수 없는 유전자형과 함께 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 라인에서 여러 대립 유전자를 분리합니다. GT를 제외한 모든 INFO 필드와 FORMAT 필드를 삭제합니다. BGT와 함께 변형 주석을 사용하는 방법은 섹션 2.3을 참조하세요.
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
여기서 각 메타 주석은 문자열의 경우 Z
, 실수의 경우 f
, 정수의 경우 i
type
으로 key:type:value
형식을 취합니다. 우리는 이 형식을 간략하게 FMF(Flat Metadata Format)라고 부릅니다. 다음을 통해 특정 조건과 일치하는 샘플을 얻을 수 있습니다.
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
--pick
옵션을 사용하여 VEP 출력을 FMF로 변환하는 스크립트 misc/vep2fmf.pl
을 제공합니다.
구현 제한으로 인해 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는 전체 주석 파일을 읽어 일치하는 대립 유전자 목록을 찾습니다. 사이트 주석 파일에 1억 줄이 포함되어 있으면 몇 분 정도 걸릴 수 있습니다. 그렇기 때문에 중요한 대립유전자의 하위 집합을 사용하는 것이 좋습니다(섹션 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.
논리 AND 연산자 &&
의 경우( &
HTML의 특수 문자이므로)g
필요). BGT 서버는 샘플 또는 샘플 하위 집합의 개인정보를 보호하기 위한 간단한 메커니즘을 구현합니다. 이는 최소 샘플 그룹 크기(MGS)라는 단일 매개변수로 제어됩니다. 그룹의 크기가 그룹 내 샘플 중 하나의 MGS보다 작은 경우 서버는 샘플 그룹 생성을 거부합니다. 특히, MGS가 1보다 크면 서버는 샘플 이름이나 샘플 유전자형을 보고하지 않습니다. 각 샘플은 prefix.bgt.spl
의 _mgs
정수 태그로 표시된 것처럼 서로 다른 MGS를 가질 수 있습니다. 이 태그가 없는 샘플의 경우 기본 MGS가 적용됩니다.
BGT 대 PBWT. BGT는 PBWT와 동일한 데이터 구조를 사용하며 PBWT에서 영감을 받았습니다. PBWT는 일배체형 일치, 위상 조정 및 대체와 같은 고급 쿼리를 지원하는 반면 BGT는 빠른 무작위 액세스 및 데이터 검색에 더 중점을 둡니다.
BGT 대 BCF2. BCF는 더 다양합니다. 유전자형별 메타 정보(예: 유전자형별 읽기 깊이 및 유전자형 가능성)를 유지할 수 있습니다. BGT는 일반적으로 더 효율적이고 시간은 더 작습니다. 많은 샘플에 더 잘 확장됩니다. BGT는 또한 보다 유연한 쿼리를 지원하지만 기술적으로는 BCF 위에 유사한 기능을 구현하는 데 방해가 되는 것이 없습니다.
BGT 대 GQT. GQT는 LD를 고려하지 않고 전체 염색체에 걸쳐 사이트를 통과할 때 훨씬 더 빨라야 합니다. 그러나 작은 영역의 데이터를 검색하거나 디자인으로 인해 일배체형 정보를 얻는 것은 비효율적입니다. 이러한 이유로 GQT는 대체품이 아닌 BCF 또는 BGT의 보완품으로 간주됩니다. 파일 크기에서 GQT는 일반적으로 유전자형만 있는 BCF보다 크므로 BGT보다 큽니다.
테스트는 HRC(Haplotype Reference Consortium) 데이터의 첫 번째 릴리스에서 실행됩니다. 32,488개 샘플에는 ~3,900만 개의 단계적 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 보기 -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"' |
파일 크기에서 HRC-r1의 BGT 데이터베이스는 7.4GB(1GB=1024*1024*1024바이트)입니다. 이에 비해 동일한 데이터에 대한 BCFv2는 65GB, GQT 93GB 및 PBWT 4.4GB를 차지합니다. 동일한 데이터 구조를 기반으로 하는 BGT와 PBWT는 훨씬 더 컴팩트합니다. BGT는 기본적으로 BGT가 참조 및 다중 대립유전자를 구별하기 위해 일배체형당 추가 비트를 유지하고 빠른 무작위 액세스를 가능하게 하기 위해 마커를 저장하기 때문에 PBWT보다 큽니다.