Skip to content

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

ABO tag SNPs on chromosome 9

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.

ABO tag SNP LD r² in 1000 Genomes

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):

./examples/run_1kg_ld.sh

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.

rs8176719 VCF alleles map to biological states

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):

  1. rsID when present in the input file
  2. contig + position using all equivalent contig names for the resolved build (table below)
  3. contig + position + alleles — harmonized IDs like 9:133257521:G:GC (nea/ea may be swapped). 1000 Genomes / left-aligned VCFs may encode rs8176719 as T:TC at the same position, and rs8176747 as C: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.