Open data: which markers are on the chip your DNA file came from
dna-chip-coverage β a per-marker, per-platform coverage table built from published array manifests. CC BY 4.0, archived with a DOI.
A consumer DNA raw data file is a list of markers that one particular genotyping array happened to assay. If a marker is not on that array, nothing in the file supports a statement about it β but the file does not say so, and tools reading it often produce an answer anyway.
This dataset makes coverage a checkable fact. It answers one question and no others: does array X carry marker rsY?
What is in it
70 clinically discussed markers, resolved against five published Illumina array manifests, plus consumer products and markers observed in published raw data files.
- Every call records the evidence it rests on β a manifest, an observed file, or an inference from a documented backbone.
- Where the public record does not settle the question, the value is unknown rather than a guess. unknown is a real value, and the notes column says why.
- A build script regenerates the whole table from the source manifests, so every number here is reproducible from scratch.
- Out of scope, deliberately: genotype interpretation, risk estimates, allele frequencies, anything resembling medical advice.
Coverage across the five published arrays
Of the 70 markers in the dataset, this is how many each published array carries:
| Array | Carries | Missing | Undetermined |
|---|---|---|---|
| Infinium OmniExpress-24 v1.2 A1 | 33 | 37 | 0 |
| Infinium OmniExpress-24 v1.3 A1 | 33 | 37 | 0 |
| Infinium GSA-24 v1.0 C1 (build 37) | 56 | 13 | 1 |
| Infinium GSA-24 v1.0 C2 (build 38) | 56 | 13 | 1 |
| Infinium GSA-24 v2.0 A2 | 64 | 5 | 1 |
Read "missing" as: this array has no probe for that locus. A consumer chip built on one of these arrays may add custom probes of its own, so a gap in the backbone is not automatically a gap in the chip β and no consumer vendor publishes a per-chip manifest.
What the data shows
Five findings, each worked through case by case in notable-gaps.md.
1. Half a pair is worse than none of it
Assigning an APOE Ξ΅ genotype requires both rs429358 and rs7412; neither site means anything alone. All five arrays carry rs7412. Exactly one carries rs429358. So a file from a chip built on OmniExpress-24 or GSA v1.0 yields the half that looks like an answer, and nothing in it announces that the other site was never assayed. The same shape recurs in TPMT (*3B without *3C), HFE (H63D without C282Y) and SERPINA1 (PiZ without PiS).
Read the full case β2. The error has a direction, and it is reassurance
CYP2C19 is the clearest case. Both loss-of-function alleles β rs4244285 (*2) and rs4986893 (*3) β are on all five arrays. rs12248560 (*17), which increases function, is absent from both OmniExpress-24 revisions. An ultrarapid metaboliser therefore cannot be distinguished from a normal one and is systematically reported as normal. Across these cases the marker that drops out is disproportionately the one that would have changed a decision.
Read the full case β3. Some questions no array here can answer at all
rs3892097 (CYP2D6*4) and rs1065852 (CYP2D6*10) β the most common loss-of-function alleles in European and East Asian populations respectively β are on none of the five arrays. Beyond that, CYP2D6 star-allele calling depends on gene deletions and duplications, and a genotyping array reports one call per probe and cannot represent copy number at all.
Read the full case β4. Absence has a false version too
rs9923231 (VKORC1, the primary determinant of warfarin dose in CPIC's algorithm) is on all five arrays β but the manifests name it rs9923231, seq-rs9923231 and chr16-31107689:rs9923231-CT. Anything deciding presence by matching the literal rsID string reports it missing on three of five, when it is there. Presence in this dataset is resolved by genomic coordinate, with the probe name recorded so the alias stays visible.
Read the full case β5. Newer is not a superset
26 of the 70 markers move the expected way β absent from OmniExpress-24, present on every GSA revision. But rs601338 (FUT2) and rs1801198 (TCN2) are on OmniExpress-24 and on no GSA revision, and lactase persistence rs4988235 is present, then absent on GSA v1.0, then present again on v2.0. The two backbones overlap on only 24% of positions, so array generation is not a proxy for coverage of any particular marker.
Read the full case βWhere a call comes from
Not every row rests on the same kind of evidence, and the evidence column says which. In descending order of what it settles:
- manifest β read directly from a published array manifest. Definitive for that array.
- public_file_observation β the marker was seen, or not seen, in files produced by the product itself. Definitive for what the product ships, including custom content a manifest cannot describe.
- backbone_manifest_family β inherited from a backbone family whose revisions all agree.
- no_public_manifest, family_revisions_disagree β nothing public settles it; the call is unknown and the notes say why.
Cite it
Each release is archived on Zenodo with a DOI. The DOI below always resolves to the latest version.
- Attribution string
- dna-chip-coverage by Andrey Soloviev, CC BY 4.0 β https://github.com/AndreySoloviev/dna-chip-coverage
- BibTeX
@dataset{dna_chip_coverage, title = {dna-chip-coverage: SNP marker coverage across consumer DNA genotyping arrays}, author = {Soloviev, Andrey}, year = {2026}, publisher = {Zenodo}, doi = {10.5281/zenodo.21708539}, url = {https://doi.org/10.5281/zenodo.21708539} }
The repositories
dna-chip-coverage
The dataset itself: coverage.csv, the markers and arrays it is built from, the notable-gaps analysis, every source with a retrieval date, and the build script that regenerates it.
View the dataset βdnafile
A Go library and CLI for reading consumer raw DNA files β format detection, marker census, coverage checks. The companion tool for asking the coverage question of a file you actually hold.
View the library βLicence
Data and documentation are CC BY 4.0; the code in scripts/ is MIT. Use it commercially, modify it, redistribute it β attribution is the only condition.
The array manifests the dataset is derived from remain the property of their publishers and are not redistributed; the build script downloads them from the original source. Coverage tells you whether a question can be asked of a file, not what the answer means β for clinical interpretation of any marker, consult ClinVar, PharmGKB or CPIC, and a clinician.
Ask My DNA maintains this dataset because the same question comes up on every file we read: was this marker measured at all? If you are holding your own raw data file, you can ask it there.
Check your own file