Skip to content

title: GEO omits !Sample_relation = SRA: for series that have SRA data

GEO omits !Sample_relation = SRA: for series that have SRA data

Status: open, unreported Found: documented in fetch10xmeta before 2026-09; re-measured 2026-09-14 Archive: NCBI (GEO) Severity: silent data loss

Symptom

A SOFT family file lists samples that declare a BioSample relation and nothing else, even though the samples have SRA experiments. Reading the SOFT file alone reports the series as having no sequencing data.

Prevalence

This section corrects an earlier figure

An earlier version of this page reported 16 in 13,045 series (0.12%), from a census of gse->experiment:soft_family. That number is real but it measures only total omission — series where no sample has an SRA relation, so the route returns empty. A series where 37 of 50 samples lack the relation still resolves 13 experiments and looks like an ordinary success. The census could not see partial omission at all, and partial omission is the common form.

Measured properly on 500 series drawn in visit order from the reprocessed corpus, 2026-09-15, by comparing each series' sample list against the samples that carry a relation:

Series Share
Every sample linked 493 98.6%
Partially missing 6 1.2%
No sample linked 1 0.2%
Affected at all 7 1.4%

The old figure corresponds to the 0.2% row. Counting partial omission raises the affected-series rate about sevenfold.

At the sample level, and why the headline number misleads

1,592 of 17,585 samples (9.05%) carry no SRA relation — but that figure is almost entirely one series:

Samples affected Rate
All 500 series 1,592 / 17,585 9.05%
GSE137870 alone 1,534 96.4% of all affected samples
Every other series 58 / 14,494 0.40%

GSE137870 has 3,091 samples and omits the relation for 1,534 of them. Quoting 9% as "the rate" would attribute one series' problem to the archive as a whole.

0.40% is the number to use for "will a given sample resolve", and it is corroborated independently: a separate 1,000-sample run of geo_sample->experiment:acc_cgi found 4 samples with no relation — 0.4%.

Worst partial cases found

Series Samples Linked Missing
GSE137870 3,091 1,557 1,534 (50%)
GSE197518 20 8 12 (60%)
GSE143151 39 27 12 (31%)
GSE216189 34 28 6 (18%)
GSE139388 7 3 4 (57%)
GSE165371 141 139 2 (1%)

Affected accessions, total omission

The 16 series where no sample carries a relation, from the full 13,045-series census. Every one names a BioProject and has samples; none names a single SRA relation.

Series Samples Samples with a BioSample relation Recovered via BioProject → ENA
GSE135325 6 6 6 experiments
GSE137444 12 12 12
GSE175516 2 2 2
GSE175533 147 147 147
GSE178485 4 4 4
GSE203552 22 22 15
GSE223155 5 5 5
GSE270158 6 6 5
GSE272976 16 16 4
GSE208337 105 0 105
GSE296731 10 0 10
GSE156524 3 0 none
GSE264624 26 0 none
GSE275199 2 0 none
GSE307587 20 0 none
GSE308007 31 0 none

Two shapes. Nine series record a BioSample relation per sample and omit only the SRA half; seven record no sample relations at all.

The five that recover nothing return nothing from ELink either, and their BioProjects have no released runs — so they are most likely awaiting release rather than mis-linked. They are listed because a resolver cannot tell the two cases apart from the outside, and "no data yet" is a different answer from "I could not find it".

Reproducer

curl -s "https://ftp.ncbi.nlm.nih.gov/geo/series/GSE135nnn/GSE135325/soft/GSE135325_family.soft.gz" \
  | gunzip | grep '!Sample_relation'
# -> only BioSample: lines, no SRA: lines

fetch resolve GSE135325 --to experiment --explain
# -> gse->experiment:soft_family is empty; gse->experiment:elink_gds_sra returns 6

Why it matters

This is the exact mirror image of ELink returning no links. The two routes fail on disjoint populations:

SOFT family ELink gds→sra
GSE135325, GSE137444 empty resolves
GSE27679 and 5 others resolves empty
GSE206528 resolves (8) empty
GSE203201 resolves (15) resolves (12)

There is no ordering of these two routes that answers all of them, which is why the resolver merges rather than falls through, and records per-accession provenance so a disagreement is visible rather than arbitrated silently.

Workaround

Query ELink gds→sra as well, and take the union.

fetch10xmeta instead reconstructs the relations downstream, by matching accession shape rather than column position across the SRA and ENA metadata tables. That works, and it has the advantage of needing no extra request — but it can only recover samples that are already in a metadata table it fetched for another reason.