ABO Marker Coordinates and Provenance¶
All genomic coordinates used by genoABO are stored in
src/genoabo/data/assemblies.yaml.
This document summarizes sources; the YAML file is authoritative.
Primary markers¶
| rsID | Role | GRCh37 (chr:pos) | GRCh38 (chr:pos) | Source |
|---|---|---|---|---|
| rs8176719 | O defining (c.261delG) | 9:136132908 | 9:133257521 | dbSNP rs8176719 |
| rs8176746 | A/B (c.796C>A) | 9:136131322 | 9:133255935 | dbSNP rs8176746 |
| rs8176747 | A/B (c.803G>C) | 9:136131315 | 9:133255928 | dbSNP rs8176747 |
| rs505922 | O proxy (LD) | 9:136149229 | 9:133273813 | dbSNP rs505922 |
Figure. ABO on chr9 (GRCh38): exon 7 A/B SNPs (rs8176747, rs8176746), exon 6 O-defining deletion (rs8176719), and the non-functional O LD proxy (rs505922).
Linkage disequilibrium (1000 Genomes)¶
Pairwise haplotype r² among the four tag SNPs in 1000 Genomes 30x GRCh38 (NYGC), super-populations AFR (n=661), AMR (n=347), EAS (n=504), and EUR (n=503). The statistic is haplotype-frequency r² from phased GT (same as PLINK 2 --r2-phased; GWASTutorial LD).
Research use only
These values describe LD in 1000 Genomes genotypes, not serological ABO types.
Figure. Haplotype r² heatmaps for AFR, AMR, EAS, and EUR. Axis labels: 6747 = rs8176747, 6746 = rs8176746, 6719 = rs8176719, 922 = rs505922.
| Pair | Role | AFR | AMR | EAS | EUR |
|---|---|---|---|---|---|
| rs8176746–rs8176747 | A/B vs A/B | 1.000 | 1.000 | 1.000 | 1.000 |
| rs8176719–rs505922 | O vs O proxy | 0.437 | 0.820 | 0.946 | 0.869 |
| rs8176719–rs8176746 | O vs A/B | 0.264 | 0.165 | 0.391 | 0.142 |
| rs8176746–rs505922 | A/B vs O proxy | 0.118 | 0.178 | 0.352 | 0.159 |
rs8176746 and rs8176747 (7 bp apart) are in perfect LD in all four super-populations, so three-marker is a consistency check rather than an independent A/B signal. rs505922 tags the O-defining deletion well in EAS, EUR, and AMR; in AFR the proxy is weaker (r² = 0.437, |D′| = 0.777), which is why ukb proxy fallback is low-confidence and is a poorer substitute for rs8176719 in African-ancestry data. |D′| for rs8176719–rs505922: AFR 0.777, AMR 0.940, EAS 0.975, EUR 0.987. |D′| for rs8176719–rs8176746 is 1.000 in AMR/EAS/EUR and 0.734 in AFR, matching O-cis-B haplotypes seen in the assume-bo check.
| r² | rs8176747 | rs8176746 | rs8176719 | rs505922 |
|---|---|---|---|---|
| rs8176747 | 1.000 | 1.000 | 0.264 | 0.118 |
| rs8176746 | 1.000 | 1.000 | 0.264 | 0.118 |
| rs8176719 | 0.264 | 0.264 | 1.000 | 0.437 |
| rs505922 | 0.118 | 0.118 | 0.437 | 1.000 |
| r² | rs8176747 | rs8176746 | rs8176719 | rs505922 |
|---|---|---|---|---|
| rs8176747 | 1.000 | 1.000 | 0.165 | 0.178 |
| rs8176746 | 1.000 | 1.000 | 0.165 | 0.178 |
| rs8176719 | 0.165 | 0.165 | 1.000 | 0.820 |
| rs505922 | 0.178 | 0.178 | 0.820 | 1.000 |
| r² | rs8176747 | rs8176746 | rs8176719 | rs505922 |
|---|---|---|---|---|
| rs8176747 | 1.000 | 1.000 | 0.391 | 0.352 |
| rs8176746 | 1.000 | 1.000 | 0.391 | 0.352 |
| rs8176719 | 0.391 | 0.391 | 1.000 | 0.946 |
| rs505922 | 0.352 | 0.352 | 0.946 | 1.000 |
| r² | rs8176747 | rs8176746 | rs8176719 | rs505922 |
|---|---|---|---|---|
| rs8176747 | 1.000 | 1.000 | 0.142 | 0.159 |
| rs8176746 | 1.000 | 1.000 | 0.142 | 0.159 |
| rs8176719 | 0.142 | 0.142 | 1.000 | 0.869 |
| rs505922 | 0.159 | 0.159 | 0.869 | 1.000 |
VCF ALT allele frequencies (GRCh38; B at rs8176746/rs8176747, NON_O at rs8176719, O_PROXY at rs505922):
| Marker | ALT | AFR | AMR | EAS | EUR |
|---|---|---|---|---|---|
| rs8176747 | G (B) | 0.169 | 0.048 | 0.193 | 0.084 |
| rs8176746 | T (B) | 0.169 | 0.048 | 0.193 | 0.084 |
| rs8176719 | TC (NON_O) | 0.294 | 0.232 | 0.380 | 0.395 |
| rs505922 | T (O_PROXY) | 0.635 | 0.781 | 0.619 | 0.632 |
Regenerate from local NYGC 30x panels (~/.gwaslab/{ANC}.ALL.split_norm_af.1kg_30x.hg38.vcf.gz, or GENOABO_1KG_<ANC>_VCF):
Pairwise table: examples/data/1kg_ld/abo_markers_ld.tsv.
Chromosome 9 lengths (build detection)¶
| Assembly | Length | Source |
|---|---|---|
| GRCh37 | 141,213,431 | NCBI NC_000009.11 |
| GRCh38 | 138,394,717 | NCBI NC_000009.12 |
| CHM13v2 | 150,617,247 | T2T-CHM13v2.0 NC_060925.1 |
CHM13v2 (T2T-CHM13)¶
Positions in assemblies.yaml were lifted from GRCh38 with UCSC hg38-chm13v2.over.chain.gz (not hand-typed):
| rsID | CHM13v2 (chr:pos) | Source |
|---|---|---|
| rs8176719 | 9:145471385 | UCSC liftOver from GRCh38:133257521 |
| rs8176746 | 9:145469798 | UCSC liftOver from GRCh38:133255935 |
| rs8176747 | 9:145469791 | UCSC liftOver from GRCh38:133255928 |
| rs505922 | 9:145487688 | UCSC liftOver from GRCh38:133273813 |
scripts/derive_chm13_markers.py can alternatively scan chm13v2.0_dbSNPv155.vcf.gz; packaged coordinates are the UCSC liftOver values above.
Biological allele mapping¶
See src/genoabo/data/markers.yaml.
Do not assume VCF REF = A allele. On GRCh37/38, REF at rs8176719 corresponds to the O-associated sequence.
Figure. GRCh37/38 often encode A/B at rs8176719 as an insertion (G → GC). genoABO maps records to O_DEL or NON_O; haplotype rules never use raw REF/ALT.
Variant identification¶
Markers are matched by (in priority order):
- rsID when present in the input file
- contig + position using all equivalent contig names for the resolved build (table below)
- contig + position + alleles — harmonized IDs like
9:133257521:G:GC(nea/ea may be swapped). 1000 Genomes / left-aligned VCFs may encode rs8176719 asT:TCat the same position, and rs8176747 asC:G(GRCh38 orientation).
| Build | Numeric | chr-prefixed | NC accession (chr9) |
|---|---|---|---|
| GRCh37 | 9 |
chr9 |
NC_000009.11 |
| GRCh38 | 9 |
chr9 |
NC_000009.12 |
| CHM13v2 | 9 |
chr9 |
NC_060925.1 |
Implementation: core/core_marker_lookup.py (MarkerQuery, lookup_keys_for_query).
Matching uses rsID, contig aliases (9 / chr9 / NC accessions), and allele-aware keys with both REF/ALT orientations from markers.yaml (including left-aligned 1KG T:TC at rs8176719). genoABO does not run a left-alignment algorithm or split multiallelic records; the first ALT is used when a site has multiple ALTs.