1000 Genomes FUT2 slices¶
Committed three-SNP extracts from 1000 Genomes Project panels (EAS, EUR, AFR) demonstrate ancestry-specific secretor calls and coordinate lookup when IDs are CHR:POS:REF:ALT rather than rsIDs.
Research use only
These examples are software demos, not clinical typing.
Source panels live under $GWASLAB_DIR (default ~/.gwaslab). genoSecretor only fetches the three FUT2 tags, so it can also run on the full VCF in place.
Prerequisites¶
# from repository root
pip install -e .
# regenerate slices if you have the local 1KG panels
python examples/extract_1kg.py # or: python examples/extract_1kg.py /path/to/.gwaslab
./examples/run_1kg.sh
bcftools and tabix are required only to re-extract. The committed files under examples/data/1kg/ are enough to run ./examples/run_1kg.sh. See examples/data/1kg/README.txt for panel provenance.
Pairwise haplotype r² among the three tags: Marker LD. Regenerate with ./examples/run_1kg_ld.sh.
The unphased --assume-trans rule vs phased cis/trans is in 1000 Genomes --assume-trans.
Layout¶
examples/data/1kg/
eas_hg19.vcf.gz # 1KG Phase 3 EAS, GRCh37, contig 19
eur_hg19.vcf.gz
afr_hg19.vcf.gz
eas_hg38.vcf.gz # 1KG 30x EAS, GRCh38, contig chr19
eur_hg38.vcf.gz
afr_hg38.vcf.gz
Each file holds rs1047781, rs601338, and rs602662 only.
Phase auto (EAS hg38)¶
The runner prefers, in order: GENOSECRETOR_1KG_EAS_VCF, ~/.gwaslab/EAS.ALL.split_norm_af.1kg_30x.hg38.vcf.gz (full indexed panel), then the bundled extract.
#!/usr/bin/env bash
# Run genoSecretor on 1000 Genomes 30x EAS (hg38): full local panel if present, else bundled extract.
# Uses --phase auto (detects phased GT).
set -euo pipefail
ROOT="$(cd "$(dirname "$0")" && pwd)"
ANC=EAS
# shellcheck source=_1kg_input.sh
source "$ROOT/_1kg_input.sh"
mkdir -p "$ROOT/out"
echo "Using: $VCF"
genosecretor "$VCF" \
--build hg38 \
--method auto \
--phase auto \
-o "$ROOT/out/1kg_eas"
echo "Open: $ROOT/out/1kg_eas.report.html"
EUR and AFR: ./examples/run_1kg_eur.sh, ./examples/run_1kg_afr.sh.
Allele frequencies¶
ALT allele frequencies in the source panels (se385 = T at rs1047781; se428 = A at rs601338; proxy = A at rs602662):
| Panel | N | se385 | se428 | proxy |
|---|---|---|---|---|
| EAS hg19 / hg38 | 504 | 0.439 | 0.004 | 0.004 |
| EUR hg19 / hg38 | 503 | 0 | 0.441 | 0.467 |
| AFR hg19 / hg38 | 661 | 0 | 0.491 | 0.492 |
se385 is common in East Asians and absent in these EUR/AFR extracts. se428 (and its LD proxy) is common in EUR/AFR and nearly absent in EAS.
Expected calls (--method auto)¶
auto selects two-marker because both functional SNPs are present.
| Slice | N | secretor | weak-secretor | non-secretor |
|---|---|---|---|---|
eas_hg19 / eas_hg38 |
504 | 407 | 97 | 0 |
eur_hg19 / eur_hg38 |
503 | 398 | 0 | 105 |
afr_hg19 / afr_hg38 |
661 | 502 | 0 | 159 |
hg38 counts match hg19 for the same ancestry (build and chr19 vs 19 smoke test).
--phenotype-coding gwas recodes the 97 EAS weak-secretor calls as non-secretor (407 secretor, 0 weak-secretor, 97 non-secretor). EUR and AFR counts are unchanged. Committed HTML reports use biochemical coding.
Example report¶
Snapshot of PREFIX.report.html from the bundled hg38 extracts (--method auto --phase auto). Research demo, not clinical typing. The report gallery has the same snapshots plus the synthetic cohort.
Open full report — 504 East Asian samples (hg38 30x); weak-secretor from se385.
Open full report — 503 European samples (hg38 30x); non-secretor from se428.
Open full report — 661 African samples (hg38 30x); non-secretor from se428.
Forced unphased (EAS)¶
--phase unphased uses the same VCF but ignores | phase. Default --assume-trans assigns the one EAS double-het to Se^w/se, so phenotype counts match the phased run (407 secretor, 97 weak-secretor). All 504 calls are phase_mode=unphased (confidence medium). Pass --no-assume-trans to leave that sample ambiguous:
#!/usr/bin/env bash
# Same 1000 Genomes 30x EAS VCF as run_1kg_eas.sh, but ignore phase (--phase unphased).
# The file is still phased (0|1); this run treats it as unphased genotypes.
set -euo pipefail
ROOT="$(cd "$(dirname "$0")" && pwd)"
ANC=EAS
# shellcheck source=_1kg_input.sh
source "$ROOT/_1kg_input.sh"
mkdir -p "$ROOT/out"
echo "Using: $VCF (forced unphased)"
genosecretor "$VCF" \
--build hg38 \
--method auto \
--phase unphased \
-o "$ROOT/out/1kg_eas_unphased"
echo "Open: $ROOT/out/1kg_eas_unphased.report.html"
secretor / fut2_genotype |
n (default --assume-trans) |
n (--no-assume-trans) |
|---|---|---|
| secretor | 407 | 407 |
| weak-secretor | 97 | 96 |
| non-secretor | 0 | 0 |
secretor_status=NA, fut2_genotype=ambiguous |
0 | 1 |
Counts are a software check, not a population frequency claim. Sample-level concordance of that double-het with phased Se^w/se, and the same check in AFR/AMR/EUR, is in 1000 Genomes --assume-trans.
Marker notation¶
IDs are 19:pos:REF:ALT (hg19) or chr19:pos:REF:ALT (hg38 30x), not rsIDs. genoSecretor matches markers by coordinates and contig aliases.
In-place full panel¶
If the GWASLab 1KG VCFs are installed, genoSecretor tabix-fetches the three tags without extracting:
genosecretor ~/.gwaslab/EAS.ALL.split_norm_af.1kg_30x.hg38.vcf.gz --build hg38 -o examples/out/1kg_eas_full
The local EAS hg19 PLINK2 files (.pgen) can be used the same way. Full-panel outputs stay under examples/out/ and are not committed.
Citation¶
1000 Genomes Project Consortium. A global reference for human genetic variation. Nature. 2015;526:68–74. DOI: 10.1038/nature15393.
High-coverage 30x VCFs: Byrska-Bishop et al. High-coverage whole-genome sequencing of the expanded 1000 Genomes Project cohort including 602 trios. Cell. 2022;185:3426–3440.e19. DOI: 10.1016/j.cell.2022.08.004.