Data dictionary
| column |
type |
meaning |
sample_key |
string |
ENA/BioSample accession (SAMEA/SAMN/SAMD) — primary key |
study_accession |
str |
BioProject (PRJ…) |
secondary_sample |
str |
ENA secondary sample accession (ERS/SRS/DRS) |
sample_title |
str |
submitter sample title |
body_site_class |
str |
vocabulary (v1.2.1): primary — infant gut/stool/meconium/rectal sample; unknown — no body-site evidence, kept in body-site scope; excluded — non-gut site (skin, oral, milk, vaginal, nasal, blood…) or, since v1.2.1, a non-human host / isolate-genome sample (exclusion_reason_code); linked — mother/other sample linked to an infant subject, outside body-site scope. Body-site scope = {primary, unknown}; headline scope = catalog_scope (age scope ∧ body-site scope) |
collection_date |
str |
archive collection_date as given |
is_gold_heldout |
bool |
True if in the curatedMetagenomicData evaluation set |
probiotic_exposure |
str |
yes |
preterm_status |
str |
preterm |
gestational_age_weeks |
float64 |
float weeks at birth |
delivery_mode |
str |
vaginal |
feeding_mode |
str |
exclusive_breast |
antibiotic_exposure |
str |
yes |
age_at_collection_days |
float64 |
integer days postnatal |
birth_weight_grams |
float64 |
integer grams |
country |
str |
ISO-3166 alpha-2 |
maternal_antibiotics |
str |
yes |
hmo_supplementation |
str |
yes |
nec_status |
str |
yes |
health_condition |
str |
healthy_control |
multiple_birth |
str |
singleton |
sibling_in_study |
str |
yes |
geo_subregion |
str |
'City, Region' free text as given by submitter (never reverse-geocoded) |
sex |
str |
male |
timepoint_label |
str |
study's own label (free text) |
subject_id |
str |
study's own subject identifier (free text) |
probiotic_exposure__confidence |
float |
confidence (0–1) of probiotic_exposure |
preterm_status__confidence |
float |
confidence (0–1) of preterm_status |
gestational_age_weeks__confidence |
float |
confidence (0–1) of gestational_age_weeks |
delivery_mode__confidence |
float |
confidence (0–1) of delivery_mode |
feeding_mode__confidence |
float |
confidence (0–1) of feeding_mode |
antibiotic_exposure__confidence |
float |
confidence (0–1) of antibiotic_exposure |
age_at_collection_days__confidence |
float |
confidence (0–1) of age_at_collection_days |
birth_weight_grams__confidence |
float |
confidence (0–1) of birth_weight_grams |
country__confidence |
float |
confidence (0–1) of country |
maternal_antibiotics__confidence |
float |
confidence (0–1) of maternal_antibiotics |
hmo_supplementation__confidence |
float |
confidence (0–1) of hmo_supplementation |
nec_status__confidence |
float |
confidence (0–1) of nec_status |
health_condition__confidence |
float |
confidence (0–1) of health_condition |
multiple_birth__confidence |
float |
confidence (0–1) of multiple_birth |
sibling_in_study__confidence |
float |
confidence (0–1) of sibling_in_study |
geo_subregion__confidence |
float |
confidence (0–1) of geo_subregion |
sex__confidence |
float |
confidence (0–1) of sex |
timepoint_label__confidence |
float |
confidence (0–1) of timepoint_label |
subject_id__confidence |
float |
confidence (0–1) of subject_id |
probiotic_exposure__route |
str |
evidence route of probiotic_exposure (R1–R4) |
preterm_status__route |
str |
evidence route of preterm_status (R1–R4) |
gestational_age_weeks__route |
str |
evidence route of gestational_age_weeks (R1–R4) |
delivery_mode__route |
str |
evidence route of delivery_mode (R1–R4) |
feeding_mode__route |
str |
evidence route of feeding_mode (R1–R4) |
antibiotic_exposure__route |
str |
evidence route of antibiotic_exposure (R1–R4) |
age_at_collection_days__route |
str |
evidence route of age_at_collection_days (R1–R4) |
birth_weight_grams__route |
str |
evidence route of birth_weight_grams (R1–R4) |
country__route |
str |
evidence route of country (R1–R4) |
maternal_antibiotics__route |
str |
evidence route of maternal_antibiotics (R1–R4) |
hmo_supplementation__route |
str |
evidence route of hmo_supplementation (R1–R4) |
nec_status__route |
str |
evidence route of nec_status (R1–R4) |
health_condition__route |
str |
evidence route of health_condition (R1–R4) |
multiple_birth__route |
str |
evidence route of multiple_birth (R1–R4) |
sibling_in_study__route |
str |
evidence route of sibling_in_study (R1–R4) |
geo_subregion__route |
str |
evidence route of geo_subregion (R1–R4) |
sex__route |
str |
evidence route of sex (R1–R4) |
timepoint_label__route |
str |
evidence route of timepoint_label (R1–R4) |
subject_id__route |
str |
evidence route of subject_id (R1–R4) |
subject_key |
str |
resolved subject id (study-scoped) |
role |
str |
infant · mother · other · unknown · adult (age ≥ 18 y) · child (1,101 d – 18 y). infant only when evidenced: an attribute/sample-name role, or age_scope ∈ {infant_evidenced, study_all_infant}; unevidenced body-site defaults are unknown (v1.2) |
role_source |
str |
what evidences role: attr_role, sample_name_token, body_site_raw, body_site_class=linked, age_scope:<value>, none |
t_index |
float64 |
ordinal timepoint within subject |
n_timepoints_subject |
float64 |
timepoints for this subject |
linked_infant_subject_key |
str |
for mother samples: the infant's subject_key |
run_accessions |
str |
';'-joined run accessions |
n_runs |
int64 |
runs for this sample |
instrument_model |
str |
instrument model(s) |
library_layout |
str |
PAIRED/SINGLE |
read_count_total |
int64 |
sum of read_count over runs |
study_title |
str |
BioProject title |
cohort_id |
str |
cohort cluster id (COH…) |
cohort_name |
str |
cohort name |
first_public_min |
str |
earliest run release date in study |
adult_age_flag |
bool |
Rule (v1.2): True iff age_at_collection_days > 1,100 — i.e. the sample carries a committed age_at_collection_days determination whose parse_note starts with out_of_scope_adult (an archive age attribute, R1, that the validator's in-scope check validate_age rejected as age N days outside 0-1100). The flag is therefore always evidence-linked; the 12 v1.1 samples that carried both an in-scope and an out-of-range age were resolved in favour of the archive attribute (reasons in value_history.parquet, change_stage = auditor_review:B9) |
n_fields_with_value |
int64 |
count of populated metadata fields |
ena_sample_url |
str |
ENA browser link |
ena_study_url |
str |
ENA browser link |
sample_determinations.parquet
| column |
meaning |
sample_key, study_accession, field_name |
key |
field_value |
raw value as found in the source |
value_normalized |
value in the controlled vocabulary/unit |
confidence |
0–1 |
evidence_source |
label: sample.attr.<key>, run.library_name, sample_id_pattern, paper.supp.table, paper.fulltext.methods, paper.abstract, study.description … |
evidence_locator |
attribute key / pmcid:file:sheet:column / section |
evidence_quote |
≤12-word verbatim quote |
evidence_limited_to_abstract |
1 when the paper was paywalled |
determined_by |
parser or model id |
route |
R1–R4 |
scope |
sample |
parse_note |
derivation notes (unit resolution, propagation, supersession, review flags) |
group_audit |
keep/downgrade for group statements (Opus audit) |
src_track |
pipeline pass that produced the row |
release_added |
release in which this row first became visible (R<YYYY>.<n> or a pre-numbered package semver 1.0.0–1.2.2); pre-1.3.0 values are reconstructed — see DATA_DICTIONARY 'Release columns' |
release_retired |
release that replaced/removed the row; null (empty in CSV) = current row |
package_added |
semver of the data package in which the row first appeared |
Routes
R1 = archive sample attribute or sample-name convention (per sample); R2 = supplementary table row (per sample; 'subject_level_join' in parse_note when copied from a per-subject row); R3 = statement in the paper text applied to a defined group; R4 = abstract/ENA description statement (group; confidence ≤0.5).
Field vocabularies
| field |
values |
delivery_mode |
vaginal |
feeding_mode |
exclusive_breast |
preterm_status |
preterm |
antibiotic_exposure |
yes |
maternal_antibiotics |
yes |
probiotic_exposure |
yes |
hmo_supplementation |
yes |
nec_status |
yes |
age_at_collection_days |
integer days postnatal |
gestational_age_weeks |
float weeks at birth |
birth_weight_grams |
integer grams |
country |
ISO-3166 alpha-2 |
sex |
male |
timepoint_label |
study's own label (free text) |
subject_id |
study's own subject identifier (free text) |
health_condition |
healthy_control |
multiple_birth |
singleton |
sibling_in_study |
yes |
geo_subregion |
'City, Region' free text as given by submitter (never reverse-geocoded) |
| column |
meaning |
study_accession, study_title, n_samples, n_runs, first_public_min |
archive identity and size |
catalog_status, triage_verdict, decision_stage, confidence, evidence |
INFANT-catalog inclusion verdict and its evidence (historical; not all-age catalog membership — use gut_studies.parquet) |
universe_slice |
enumeration channel that found the study |
recov_age, recov_delivery, … |
recoverability tier predicted before extraction (R1 archive / R2 table / R3 paper / R4 abstract / R0 none) |
cov_<field> |
fraction of the study's infant-scope samples with a value |
cohort_id, cohort_name, n_linked_papers, linked_pmids |
cohort and literature |
n_unique_infants_est |
distinct resolved subject_key among role = infant samples — populated only when n_unique_infants_source ∈ {subject_ids, subject_ids_partial}; NaN otherwise (v1.2; v1.1 wrote 0 or n = n_samples sentinels) |
n_unique_infants_source |
subject_ids (every infant sample has a resolved subject and subjects repeat), subject_ids_partial (subjects resolved on part of the infant samples), subject_ids_all_distinct (one subject id per sample — cannot distinguish cross-sectional from unresolved; render "≤ n"), no_subject_evidence (render "unknown (≤ n)"), no_infant_role_samples |
n_unique_infants_upper, n_unique_infants_display |
upper bound (number of infant-role samples) and the string the site should render |
n_infant_role_samples, n_infant_samples_with_subject |
inputs to the above |
n_infant_evidenced, n_study_all_infant, n_age_unknown_mixed_study, n_age_unknown_no_study_estimate, n_adult_flagged, n_non_infant_role, n_age_scope_infant |
per-study age_scope counts; n_age_scope_infant = infant_evidenced + study_all_infant |
mixed_age_deposit |
True when more than half of the study's sample rows are age_unknown_mixed_study or adult_flagged — render a banner |
n_samples, n_runs, n_biosamples |
from runs.parquet: runs of the study; distinct BioSamples; n_samples = runs for run-unit studies, else BioSamples. n_sample_rows = rows of the sample table keyed to this study (differs when a BioSample carries runs from two BioProjects; n_biosamples_shared_with_other_study) |
longitudinal, max_timepoints, n_mothers |
subject resolution (infant-role samples) |
worklist_rank, effort_class |
curation priority |
ena_url, ncbi_url |
links |
Sample unit (added after the auditor's run-vs-BioSample finding)
| column |
meaning |
biosample_accession |
str |
run_accession |
str |
age_scope |
str |
age_scope_basis |
str |
sample_unit |
biosample (default: one BioSample = one stool), run (child row: the submitter registered one BioSample per infant and one run per stool — 6 studies, 521 rows), biosample_pooled rows were moved to parent_biosamples.parquet in v1.2 — the sample table contains only biosample and run units |
parent_biosample |
for run rows, the pooled BioSample they belong to |
studies.n_samples |
catalog sample rows (biosample + run units); n_biosamples keeps the archive's BioSample count (e.g. PRJNA294605: 158 samples, 11 BioSamples) |
Class-A decision rule (deterministic, sample_unit_classification.csv): BioSample text says 'Assembly of N … samples'/'pooled', or a run-keyed supplementary table gives ≥2 distinct ages/timepoints across the BioSample's runs, or NCBI BioSample carries a collection-date range. Technical multi-run BioSamples (lanes, replicates, paired/unpaired, long+short reads; 33 studies) keep the BioSample as unit.
Confidence (v1.2 clarification)
confidence (and every <field>__confidence) is an ordinal reliability tier assigned by the route and engine that produced the value, not a calibrated probability. Deterministic R1 parsers emit 0.90 (title parser 0.70, unit resolution 0.75–0.85, date arithmetic 0.85, subject propagation 0.70–0.85); R2 table extraction emits 0.65–0.85 (0.75 typical, 0.85 when a paper's own table maps by exact run/sample accession); R3 paper-text group statements 0.25–0.80 (Opus-downgraded statements are capped at 0.40); R4 abstract statements 0.40–0.50. The full tier list is confidence_tiers.csv (route × determiner × scope, with the discrete values emitted). The empirical precision of each tier against the curatedMetagenomicData gold join is in tier_field_precision.csv (gold_set = hires excludes gold rows whose age is an integer number of years; all is the full 3,670-sample join; value mapping: cMD c-section subtypes → c_section, No Breastfeeding/Exclusively Formula Feeding → formula; age tolerance max(7 d, 10 %); GA ± 1 wk). On that join the tiers are monotone for age (R1 0.90 → 1.00, R1 0.85 date/propagation → 0.70, R2 0.85 → 1.00, R2 0.75 → 0.98) but not for feeding (R2 0.75 → 0.48, R2 0.85 → 0.94), and no gold exists for R4 or for exposure fields — treat the number as a tier label and read the precision table for the field you use.
parent_biosamples.parquet
The 16 BioSamples that the submitters of 6 deposits registered one-per-infant with one run per stool. Their runs are the catalog's run sample units (n_child_run_units, child_run_units). Same columns as the sample table plus n_determinations_moved (their 97 v1.1 determinations are in value_history.parquet, status moved_to_parent_biosamples). Excluded from every count.
study_verdict_history.parquet
One row per (study, stage table, replicate). stage_order (v1.2.1) follows the stage ontology stage_rank/stage_level: screen < tier1_rubric < confirm r1–r3 < adjudication < growth_wave (wave order ff, gap, grow, grow_w2, grow_w3, gsa, loose, nm, r3, v3_delta; r1 < r2 < wave adjudication) < growth_wave_merged < biosample_rejudge < human_review (round 1, round 2) < consolidated_triage_v2 < consolidated_final; ties broken by date, replicate, stage. is_consolidated marks rows copied from a consolidated table (consolidated_kind = final / triage_v2 / growth_wave) — render only the final row as the single 'final' line. verdict_norm (v1.2.1): Haiku screen yes → uncertain (screen-pass, not a verdict), no → exclude, ERROR and empty verdicts → null; verdict_norm_note explains each mapping. stage_family groups tables (haiku_screen, sonnet_rubric_tier1, sonnet_confirm:, opus_adjudication:, growth_triage_merged:*, biosample_rejudge, human_review_round1/2, triage_v2_consolidated, catalog_final). verdict is the raw label of that stage (include/exclude/unsure/uncertain; the Haiku screen's yes/no; ERROR for failed requests); verdict_norm maps it to include/exclude/uncertain/None. is_final marks the row that equals universe_studies_all. evidence is the stage's JSON evidence list; src_artifact/src_version_id name the release-bundle table the row was copied from.
value_history.parquet
Determinations that are not in sample_determinations.parquet. status: superseded (a higher-precedence value replaced it; replaced_by names it), rejected (validator or rule rejection; reason), dropped (group statement failed the Opus checklist audit; reason = drop_reason), recommitted_out_of_scope_adult (an R1 age the v1.1 validator rejected as out of range that v1.2 commits with parse_note out_of_scope_adult to evidence adult_age_flag), not_committed_duplicate (second out-of-range age attribute on the same sample), moved_to_parent_biosamples, auditor_finding_applied (study-level auditor findings and what was done). change_stage names the pipeline stage that made the change (auditor_review:B2/B9 for v1.2.0; auditor_review:R3-3 for the v1.2.1 host/isolate rule, statuses recommitted_out_of_scope_host and recommitted_out_of_scope_isolate, field_name body_site_class, evidence source run.scientific_name / run.library_source).
Release columns (R2026.1, package 1.3.0)
Fact tables — sample_determinations.parquet, universe_studies_all.parquet, study_metadata_wide.parquet, cohorts.csv, study_paper_links.csv, sandpiper_sample_summary.parquet, sandpiper_run_qc.parquet, sandpiper_top_genera.parquet, sandpiper_study_panels.parquet, study_metadata_wide.csv — end with three columns:
| column |
dtype |
meaning |
release_added |
string |
release in which this row first became visible (R<YYYY>.<n> or a pre-numbered package semver 1.0.0–1.2.2); pre-1.3.0 values are reconstructed — see DATA_DICTIONARY 'Release columns' |
release_retired |
string | null |
release that replaced/removed the row; null (empty in CSV) = current row |
package_added |
string |
semver of the data package in which the row first appeared |
Release ids are R<YYYY>.<n> (first: R2026.1 = package 1.3.0) or, for states published before numbering, the package
semver 1.0.0 (first public package, 2026-09-25), 1.1.0 (release v11), 1.2.0, 1.2.1, 1.2.2. "Current" = release_retired IS NULL;
in the shipped fact tables every row is current. sample_metadata_wide is derived from sample_determinations and carries no release columns.
Reconstruction caveat. Packages before 1.3.0 carried no release columns, so release_added of pre-existing rows was reconstructed:
newest value_history.change_stage touching the (sample_key, field_name) or sample_determinations.src_track, mapped to the package the
CHANGELOG records for that stage (sample_unit_fix → 1.1.0, auditor_review:B2/B9 → 1.2.0, auditor_review:R3-3 → 1.2.1,
owner_decision → 1.2.2). Exact for rows those stages touched (13191 current determinations:
src_track = sample_unit_fix → 1.1.0, src_track = adult_scope_fix → 1.2.0); every other pre-1.3.0 row is labelled 1.0.0 by assumption
(the first package is not archived as a table, so this cannot be verified row by row). package_added equals release_added for all
pre-1.3.0 rows. Study verdict rows are all 1.0.0 (no verdict change is dated after the first package); Sandpiper rows are 1.2.0
(when Sandpiper landed; the v1.2.1 recomputation of existing rows is recorded in the CHANGELOG, not as retire+add).
sample_determinations_all.parquet (R2026.1)
sample_determinations columns + the three release columns + retired_reason (string|null; value_history.reason) +
retired_change_stage (string|null; value_history.change_stage). Rows: every current determination (618,898,
release_retired null) ∪ every retired published value (1,316) reconstructed from value_history
rows whose status ∈ {superseded, moved_to_parent_biosamples, recommitted_out_of_scope_host, recommitted_out_of_scope_isolate}
(release_retired = the package of their change_stage). value_history rows with status rejected, dropped, not_committed_duplicate,
recommitted_out_of_scope_adult (the pre-history of a row that IS current) or auditor_finding_applied were never published and are not
rows here. Exactly one current row per (sample_key, field_name); retired rows may repeat a key. sample_determinations_superseded.parquet
(223 rows) is the same set as the superseded rows of stages sample_unit_fix (75) and auditor_review:B9 (148) and is kept for the v1.1 layout.
releases.csv (R2026.1)
One row per release id, oldest first: release_id, package_version, release_date, data_tag, site_tag, doi (empty until Zenodo
mints one), n_studies_included, n_samples, n_catalog_scope, n_determinations_current, sandpiper_version, notes_file. Historical
rows carry only the counts the CHANGELOGs state (empty otherwise — never invented).
Contribute worklist (R2026.2, package 1.4.0)
contribute_worklist.csv — one row per open study (universe_studies_all.triage_verdict ∈ {include, uncertain} and at least one of the
six worklist fields below 0.5 coverage on its catalog_scope samples; studies with 0 catalog_scope samples are judged on body-site scope
body_site_class ∈ {primary, unknown}). Complete studies are not listed. Rules, templates and vocabularies: the pipeline's
config/contribute.yaml and docs/CONTRIBUTE.md. Read-only: nothing here is a curated value — every column is derived from the tables
of this package and from the recoverability / R2-rescue / supplement-inventory artifacts registered in config/inputs.json (group contribute).
contribute_worklist.csv (439 rows)
| column |
dtype |
meaning |
rank |
int64 |
1 = highest priority_score (ties: n_samples desc, accession) |
study_accession |
string |
BioProject accession (universe_studies_all key) |
study_title |
string |
universe_studies_all.study_title |
cohort_id |
string |
cohorts.csv id |
cohort_name |
string |
cohorts.csv name |
triage_verdict |
string |
include |
n_samples |
int64 |
sample units of the study (universe_studies_all.n_samples) |
n_catalog_scope |
int64 |
sample_metadata_wide rows with catalog_scope = True |
n_infant_samples_est |
float64 |
null |
missing_fields |
string |
';'-joined short field names (age, delivery, feeding, preterm, antibiotics, probiotic) whose coverage < 0.5 |
n_missing_fields |
int64 |
count of missing_fields (≥ 1 for every listed study) |
coverage_<field> |
float64 |
fraction of catalog_scope samples with a value for the field (body-site scope {primary, unknown} when n_catalog_scope = 0); six columns: age, delivery, feeding, preterm, antibiotics, probiotic |
best_tier_<field> |
string |
best recoverability tier for study × field (R1 archive attribute · R2 supplementary table · R3 paper text · R4 abstract · R0 none); six columns |
blocker_code |
string |
dominant reason the study is open — vocabulary in config/contribute.yaml blocker_codes (controlled_access, no_linked_paper, paywalled_abstract_only, tables_unjoinable_need_key, pdf_only_supplement, no_supplement_found, archive_only_uncertain, unitless_age_needs_curator, partial_coverage); decision order blocker_order |
blocker_detail |
string ≤ 200 |
the deciding evidence (counts, access tier, sample-ID forms from RESCUE_REPORT_v2, human-review note) |
unlock_text |
string ≤ 200 |
imperative 'what would unlock this' sentence from the unlock_templates of the blocker (id form / missing fields substituted) |
contribution_type |
string |
primary ask: per_sample_table |
n_linked_papers |
int64 |
rows in study_paper_links for the study |
own_data_pmids |
string |
';'-joined PMIDs of the linked papers (empty when none) |
n_supp_tables_inventoried |
int64 |
supp_inventory members with member_type = table across the linked papers |
controlled_access |
bool |
study or its cohort is in controlled_access_registry.csv (non-open tier) or flagged controlled in extraction_worklist / universe_studies_all |
priority_score |
float64 |
Σ over missing fields of weight × (1 − coverage) × log10(n_catalog_scope + 1); weights age 3, delivery 2, feeding 2, preterm 1.5, antibiotics 1, probiotic 0.5 |
ena_url |
string |
ENA browser URL of the study |
ncbi_url |
string |
NCBI BioProject URL |
issue_url |
string |
prefilled GitHub Issue (form catalog-contribution.yml, label contribution; query keys study_accession, contribution_type, release_tag, title) |
release_added |
string |
release in which this row first became visible (R<YYYY>.<n> or a pre-numbered package semver 1.0.0–1.2.2); pre-1.3.0 values are reconstructed — see DATA_DICTIONARY 'Release columns' |
release_retired |
string |
release that replaced/removed the row; null (empty in CSV) = current row |
package_added |
string |
semver of the data package in which the row first appeared |
contribute_worklist_fields.csv (2,634 rows = 6 per worklist study)
| column |
dtype |
meaning |
study_accession |
string |
BioProject accession |
field |
string |
age |
coverage |
float64 |
fraction of in-scope samples with a value (same scope rule as the worklist) |
n_with_value |
int64 |
in-scope samples with a value |
n_catalog_scope |
int64 |
catalog_scope samples of the study |
best_tier |
string |
best recoverability tier R0–R4 for the study × field |
blocker_code |
string |
complete when coverage ≥ 0.5, else the study blocker (only the age field carries unitless_age_needs_curator; other fields then partial_coverage) |
evidence |
string ≤ 120 |
tier + first recoverability evidence quote/source + note |
release_added |
string |
release in which this row first became visible (R<YYYY>.<n> or a pre-numbered package semver 1.0.0–1.2.2); pre-1.3.0 values are reconstructed — see DATA_DICTIONARY 'Release columns' |
release_retired |
string |
release that replaced/removed the row; null (empty in CSV) = current row |
package_added |
string |
semver of the data package in which the row first appeared |
Blocker codes (one per study, decision order = listing order for included studies; uncertain studies always archive_only_uncertain):
controlled_access (study/cohort in the controlled-access registry) · no_linked_paper (0 rows in study_paper_links) · paywalled_abstract_only
(extraction_worklist access_tier C/D/E) · tables_unjoinable_need_key (R2 rescue: supplementary tables keyed by paper-internal names) ·
pdf_only_supplement (only PDF/DOCX supplements) · no_supplement_found (paper but no inventoried supplement) · unitless_age_needs_curator
(age column without unit) · partial_coverage (paper + tables processed, fields still missing). Field-level code complete = field at/above threshold.
Contribution types: per_sample_table, id_key, paper_pointer, age_schedule, verdict_evidence (dropdown of the GitHub Issue form
catalog-contribution.yml that issue_url opens prefilled). Rows get release_retired when the study becomes complete in a later release.
Registry tier (R2026.4, package 1.6.0)
The registry is the outer tier of the catalog (docs/EXPANSION.md): every ENA study with a human shotgun-metagenome signal, any body site,
any age, classified at STUDY level from ENA study/sample/run metadata (no paper reading). Enumeration slices: S1 library_source=METAGENOMIC ×
WGS|WXS; S2 misfiled GENOMIC on verified human-metagenome taxa; S3 OTHER|Targeted-Capture|WGA adjudication (per-slice completeness in
registry_universe_audit.csv). Classification stages: deterministic_prior (infant-universe verdict carried over), deterministic_rule,
sonnet_x2 (two rubric replicates agree), opus_adjudicated (replicates disagreed → adjudication), pending. Vocabularies: the pipeline's
config/vocab/{body_sites,life_stages,assay,population_flags}.yaml; scope rules: config/scope.yaml. The curated infant catalog is the scope
infant_gut inside this registry (in_infant_catalog mirrors universe_studies_all.triage_verdict). The run-level table registry_runs.parquet
(all runs of the universe, 46 ENA fields + found_by) is attached to the GitHub Release of the data repository as registry_runs_v<version>.parquet
(too large for this package). Bitemporal columns follow the package convention (release_added, release_retired, package_added).
registry_studies.parquet (54,410 rows)
| column |
dtype |
meaning |
study_accession |
string |
ENA/INSDC BioProject accession (PRJ…); primary key |
secondary_study_accession |
string |
ENA secondary study accession (ERP/SRP/DRP) |
study_title |
string |
ENA study title |
description_short |
string |
ENA study description truncated to 300 characters |
center_name |
string |
Submitting centre |
first_public_min |
string |
Earliest run first_public date (ISO) |
first_public_max |
string |
Latest run first_public date (ISO) |
n_runs |
int64 |
Runs in the registry universe for this study |
n_samples |
int64 |
Distinct sample_accession values |
n_biosamples |
int64 |
Distinct BioSample accessions |
library_strategies |
string |
JSON dict strategy → run count |
library_sources |
string |
';'-joined distinct library_source values |
instrument_platforms |
string |
';'-joined distinct instrument_platform values |
scientific_names_top |
string |
';'-joined top-5 scientific_name values with run counts, e.g. 'human gut metagenome (120)' |
host_tax_ids |
string |
';'-joined distinct host_tax_id values |
n_runs_host_9606 |
int64 |
Runs with host_tax_id 9606 |
n_runs_nonhuman_host |
int64 |
Runs with a non-9606 host_tax_id |
human_signal |
bool |
Frame-free sweep human-signal rule outcome (pre-filter) |
human_signal_rule |
string |
A |
ambiguous |
bool |
Human-signal rule tie flag |
host_human |
string |
Classified host |
host_evidence |
string |
JSON list of {source, quote} (quote ≤ 12 words; source from the curation-skill label list) |
assay |
string |
Assay class (config/vocab/assay.yaml) |
access |
string |
Access tier |
body_sites |
string |
';'-joined body-site codes (config/vocab/body_sites.yaml) |
body_site_primary |
string |
Primary body-site code (multi_site when ≥ 3 strong sites) |
body_site_evidence |
string |
JSON evidence list |
life_stages |
string |
';'-joined life-stage codes (config/vocab/life_stages.yaml) |
life_stage_primary |
string |
Primary life-stage code (mixed_ages when ≥ 3 strong stages) |
life_stage_evidence |
string |
JSON evidence list |
population_flags |
string |
';'-joined flags (config/vocab/population_flags.yaml) |
health_context |
string |
≤ 120 chars free text or null |
classification_stage |
string |
Cascade stage that produced the classification |
classification_confidence |
float64 |
0–1; minimum over components |
classification_model |
string |
'deterministic' or the resolved model id of the deciding stage |
in_infant_catalog |
string |
Infant-catalog verdict |
infant_reason_code |
string |
Infant triage reason_code (curation-skill vocabulary) or null |
scope_memberships |
string |
';'-joined scope ids from config/scope.yaml |
universe_slice |
string |
Enumeration slice that found the study |
release_added |
string |
Bitemporal: release id in which the row first appeared |
release_retired |
string |
Bitemporal: release id in which the row was retired; null = current |
package_added |
string |
Bitemporal: package semver of first appearance |
registry_universe_audit.csv
| column |
dtype |
meaning |
slice |
string |
Slice tag / ENA query label |
ena_query |
string |
ENA portal query string |
ena_count |
int64 |
Count returned by the ENA count endpoint |
rows_pulled |
int64 |
read_run rows actually streamed |
n_studies |
int64 |
Distinct studies in the slice |
completeness |
float64 |
rows_pulled / ena_count |
pulled_at |
string |
ISO timestamp of the pull |
registry_biosamples.parquet (611,601 rows) — one row per harvested BioSample of a registry study (S2: human_all studies outside the curated infant catalog) — added R2026.5
| column |
dtype |
meaning |
sample_accession |
string |
BioSample accession (SAMN/SAME/SAMD) as listed in registry_biosample_index; primary key |
study_accession |
string |
ENA study (BioProject) the sample belongs to |
n_attributes |
int64 |
Non-placeholder attribute rows harvested for the sample |
source |
string |
ena_xml |
body_site_code |
string |
config/vocab/body_sites.yaml code from the normalised body-site attribute; unknown_site when an attribute existed but mapped to no site; null when no body-site attribute |
body_site_raw_key |
string |
Normalised attribute key the code came from (e.g. host_body_site, isolation_source) |
body_site_raw_value |
string |
Raw attribute value the code came from |
life_stage |
string |
config/vocab/life_stages.yaml code from the age attribute (or from age_days); unknown_age when an age attribute existed but was not interpretable; null when none |
age_days |
float64 |
Age at collection in days when a numeric age with unit was given |
age_raw_key |
string |
Attribute key the age came from |
age_raw_value |
string |
Raw age value |
sex |
string |
female |
sex_raw_key |
string |
Attribute key the sex came from |
sex_raw_value |
string |
Raw sex/gender value |
country_iso2 |
string |
ISO-3166-1 alpha-2 from geo_loc_name / country attributes |
country_raw_key |
string |
Attribute key the country came from |
country_raw_value |
string |
Raw geographic value |
collection_date_raw |
string |
Raw collection date attribute |
collection_year |
Int64 |
Year extracted from collection_date_raw |
disease_raw |
string |
First non-placeholder disease/health/phenotype attribute value (≤200 chars; NOT normalised — no controlled vocabulary yet) |
release_added |
string |
Release id in which the row first appeared |
release_retired |
string |
Release id in which the row was retired (null = current) |
package_added |
string |
Package version that first carried the row |
registry_study_papers.parquet (6,398 rows) — one row per study × linked paper (accession mention in Europe PMC and/or publication declared in the NCBI BioProject record); 4,217 human_all studies outside the curated infant catalog — added R2026.5
| column |
dtype |
meaning |
study_accession |
str |
ENA study (BioProject) accession |
paper_id |
str |
Europe PMC id (MED: |
pmid |
str |
PubMed id of the linked paper |
pmcid |
str |
PubMed Central id |
doi |
str |
DOI |
title |
str |
Paper title |
journal |
str |
Journal |
year |
Int64 |
Publication year |
pub_type |
str |
Europe PMC publication types |
is_open_access |
boolean |
Europe PMC open-access flag |
in_epmc_fulltext |
object |
Full text available in Europe PMC |
source |
str |
europepmc_mention |
match_field |
str |
abstract_or_title |
match_accession |
str |
Accession matched (primary PRJ… or secondary ERP/SRP/DRP) |
bioproject_declared |
bool |
Paper is listed as a publication in the NCBI BioProject record |
n_registry_studies |
int64 |
How many processed registry studies this paper mentions |
relation |
str |
data_paper |
method |
str |
Rule that produced the relation (det_bioproject_declared 0.9, det_single_mention_abstract 0.75, det_single_mention_fulltext 0.6) |
confidence |
float64 |
Rule confidence (null for unsure) |
contested |
bool |
True when the paper mentions ≥ 2 processed studies |
contest_reason |
str |
multi_study |
epmc_rank |
float64 |
Rank of the paper in the Europe PMC hit list for the study |
epmc_hit_count |
float64 |
Europe PMC hitCount for the study query |
epmc_hits_capped |
object |
Hit list truncated at 300 (never true in R2026.5) |
body_site_primary |
str |
registry_studies.body_site_primary at harvest time (convenience) |
release_added |
string |
Release id in which the row first appeared |
release_retired |
string |
Release id in which the row was retired (null = current) |
package_added |
string |
Package version that first carried the row |
registry_bioproject_records.parquet (4,217 rows) — one row per processed registry study (NCBI BioProject XML) — added R2026.5
| column |
dtype |
meaning |
study_accession |
str |
ENA study (BioProject) accession |
secondary_study_accession |
str |
ENA secondary study accession |
found_in_ncbi |
bool |
BioProject record found via esearch |
bioproject_uid |
str |
NCBI BioProject UID |
archive |
str |
NCBI |
center_id |
str |
Submitting center id |
center_id_center |
str |
Center attribute of center_id |
title |
str |
Paper title |
name |
str |
BioProject name |
organisation |
str |
Submitting organisation (first) |
submitter_owner |
str |
Submitter/owner organisation |
organizations_json |
str |
JSON list of organisations (name, abbr, role) |
n_publications |
float64 |
Publications declared in the record |
publication_pmids |
str |
; -joined PMIDs declared |
publication_dois |
str |
; -joined DOIs declared |
publications_json |
str |
JSON list of declared publications |
grants_json |
str |
JSON list of grants |
external_links_json |
str |
JSON list of external links |
registration_date |
str |
ProjectReleaseDate when present (239 studies) |
submitted |
str |
Submission date |
last_update |
str |
Last update date |
submission_access |
str |
public |
data_types |
str |
Declared data types |
target_material |
str |
BioProject target material (eGenome, …) |
target_capture |
str |
Target capture (eWhole, …) |
target_sample_scope |
str |
Sample scope (eMultiisolate, eEnvironment, …) |
method_type |
str |
Method type (eSequencing, …) |
relevance_medical |
str |
Medical relevance flag |
body_site_primary |
str |
registry_studies.body_site_primary at harvest time (convenience) |
release_added |
string |
Release id in which the row first appeared |
release_retired |
string |
Release id in which the row was retired (null = current) |
package_added |
string |
Package version that first carried the row |
registry_authors.parquet (52,110 rows) — one row per study × paper × author (Europe PMC core records of ≤ 5 linked papers per study) — added R2026.5
| column |
dtype |
meaning |
study_accession |
str |
ENA study (BioProject) accession |
author_full_name |
str |
Author full name (Europe PMC) |
author_display |
str |
Surname + initials |
author_surname |
str |
Surname |
author_initials |
str |
Initials |
is_group |
bool |
Collective/group author |
source |
str |
europepmc_mention |
pmid |
str |
PubMed id of the linked paper |
pmcid |
str |
PubMed Central id |
doi |
str |
DOI |
paper_title |
str |
Paper title |
pub_year |
Int64 |
Publication year |
position |
int64 |
Author position (1 = first); part of the key |
n_authors |
int64 |
Authors on the paper |
is_first |
bool |
First author |
is_last |
bool |
Last author |
affiliation |
str |
Affiliation string (e-mail addresses removed, rule F7) |
orcid |
str |
ORCID iD when present |
paper_relation |
str |
relation of the study×paper link (registry_study_papers) |
link_method |
str |
method of the link |
author_source |
str |
europepmc_core |
author_key |
str |
lower-case surname + initials key for de-duplication |
release_added |
string |
Release id in which the row first appeared |
release_retired |
string |
Release id in which the row was retired (null = current) |
package_added |
string |
Package version that first carried the row |
gut_sample_determinations.parquet (1,659,128 rows) — one row per sample × field of the gut_all curated scope (current value; precedence infant catalog > R1 > R2 > R3 > R4) — added R2026.7
| column |
dtype |
meaning |
sample_key |
string |
BioSample accession (or run accession for run-unit samples); with field_name the key |
field_name |
string |
Field of config/packs/gut.yaml |
study_accession |
string |
ENA study |
field_value |
string |
Raw value as found in the source |
value_normalized |
string |
Normalised value (days for age, vocabulary codes, ISO-2 country, yes/no) |
confidence |
float64 |
Route/parser confidence tier (R1 0.85–0.9, R2 0.8–0.85, R3 ≤ 0.7, R4 ≤ 0.5) |
evidence_source |
string |
Labelled source: sample.attr. |
evidence_locator |
string |
biosample_attr |
evidence_quote |
string |
Verbatim quote ≤ 12 words |
evidence_limited_to_abstract |
float64 |
1 when the evidence is abstract/description only (R4) |
determined_by |
string |
Parser / stage id |
route |
string |
R1 |
scope |
string |
sample (rows expanded from study_all statements carry 'expanded from study_all' in parse_note) |
parse_note |
string |
Parser notes |
group_audit |
string |
Audit note for group statements (infant rows) |
src_track |
string |
infant_catalog (copied from the curated infant tables) |
release_added |
string |
Release id in which the row first appeared |
release_retired |
string |
Release id in which the row was retired (null = current) |
package_added |
string |
Package version that first carried the row |
| column |
dtype |
meaning |
sample_key |
string |
BioSample accession; primary key |
study_accession |
string |
ENA study |
biosample_accession |
string |
BioSample accession |
secondary_sample |
string |
ERS/SRS/DRS accession (infant rows) |
sample_unit |
string |
biosample |
body_site_code |
string |
Registry body-site code of the sample (from its attributes) or the infant catalog's class |
sample_life_stage |
string |
Registry life stage from the sample's age attribute |
curated_source |
string |
infant_catalog |
in_infant_catalog |
bool |
Study is an included infant-catalog study |
age_at_collection_days |
float64 |
Age at collection in days |
sex |
string |
female |
bmi |
float64 |
Body-mass index kg/m² |
country |
string |
ISO-3166-1 alpha-2 |
health_condition |
string |
config/vocab/health_conditions.yaml code |
health_condition_detail |
string |
Raw health / disease text |
antibiotic_exposure |
string |
yes |
subject_id |
string |
Subject / participant identifier as given by the source |
timepoint_label |
string |
Timepoint / visit label as given |
age_at_collection_days__confidence |
float64 |
Confidence of the committed age_at_collection_days value |
age_at_collection_days__route |
string |
Route of the committed age_at_collection_days value |
sex__confidence |
float64 |
Confidence of the committed sex value |
sex__route |
string |
Route of the committed sex value |
bmi__confidence |
float64 |
Confidence of the committed bmi value |
bmi__route |
string |
Route of the committed bmi value |
country__confidence |
float64 |
Confidence of the committed country value |
country__route |
string |
Route of the committed country value |
health_condition__confidence |
float64 |
Confidence of the committed health_condition value |
health_condition__route |
string |
Route of the committed health_condition value |
health_condition_detail__confidence |
float64 |
Confidence of the committed health_condition_detail value |
health_condition_detail__route |
string |
Route of the committed health_condition_detail value |
antibiotic_exposure__confidence |
float64 |
Confidence of the committed antibiotic_exposure value |
antibiotic_exposure__route |
string |
Route of the committed antibiotic_exposure value |
subject_id__confidence |
float64 |
Confidence of the committed subject_id value |
subject_id__route |
string |
Route of the committed subject_id value |
timepoint_label__confidence |
float64 |
Confidence of the committed timepoint_label value |
timepoint_label__route |
string |
Route of the committed timepoint_label value |
delivery_mode |
string |
Infant-catalog field (only on infant rows) |
feeding_mode |
string |
Infant-catalog field (only on infant rows) |
preterm_status |
string |
Infant-catalog field (only on infant rows) |
gestational_age_weeks |
string |
Infant-catalog field (only on infant rows) |
birth_weight_grams |
string |
Infant-catalog field (only on infant rows) |
maternal_antibiotics |
string |
Infant-catalog field (only on infant rows) |
probiotic_exposure |
string |
Infant-catalog field (only on infant rows) |
hmo_supplementation |
string |
Infant-catalog field (only on infant rows) |
nec_status |
string |
Infant-catalog field (only on infant rows) |
age_category |
string |
neonate |
age_category_basis |
string |
age_at_collection_days |
body_site_class |
string |
primary (gut/stool) |
body_site_basis |
string |
sample_attribute |
infant_scope |
bool |
== the infant catalog's catalog_scope rule (reproduces the infant catalog exactly) |
n_fields_with_value |
int64 |
Pack fields with a committed value |
release_added |
string |
Release id |
release_retired |
string |
Release id when retired (null = current) |
package_added |
string |
Package version |
gut_studies.parquet (2,837 rows) — one row per study of the gut_all curated scope — registry columns plus curation coverage — added R2026.7
| column |
dtype |
meaning |
study_accession |
string |
ENA study; primary key |
secondary_study_accession |
string |
registry_studies column (see registry_studies.parquet) |
study_title |
string |
registry_studies column (see registry_studies.parquet) |
description_short |
string |
registry_studies column (see registry_studies.parquet) |
center_name |
string |
registry_studies column (see registry_studies.parquet) |
first_public_min |
string |
registry_studies column (see registry_studies.parquet) |
first_public_max |
string |
registry_studies column (see registry_studies.parquet) |
n_runs |
int64 |
Runs |
n_samples |
int64 |
Samples |
n_biosamples |
int64 |
BioSamples |
n_runs_sandpiper |
int64 |
Runs with Sandpiper profiles |
…registry_studies columns… |
|
all registry_studies columns are carried (classification, evidence, scope memberships, sample roll-ups) |
cov_<field> |
float64 |
Share of the study's samples with a value for each pack field |
n_samples_curated |
int64 |
Samples in gut_sample_metadata_wide |
age_categories |
string |
JSON dict age_category → samples |
health_conditions |
string |
JSON dict health_condition → samples (top 6) |
curated_depth |
string |
Routes present among the study's committed values (e.g. R1;R2;R4) |
curated_source |
string |
infant_catalog |
release_added |
string |
Release id |
release_retired |
string |
Release id when retired |
package_added |
string |
Package version |
gut_runs.parquet (721,678 rows) — one row per sequencing run of a gut_all catalog study (registry_runs ∩ gut_studies) with the catalog sample_key — added R2026.12 / 1.12.0 — added R2026.12
| column |
dtype |
meaning |
run_accession |
string |
ENA/SRA run accession (SRR/ERR/DRR) |
study_accession |
string |
BioProject of the run (a gut_studies row) |
sample_accession |
string |
BioSample accession(s) of the run (';'-joined when the run pools several) |
secondary_sample_accession |
string |
SRS/ERS secondary sample accession(s) |
experiment_accession |
string |
SRX/ERX experiment accession |
library_name |
string |
Submitter library name |
library_strategy |
string |
ENA library_strategy (WGS / WXS / OTHER …) |
library_source |
string |
ENA library_source (METAGENOMIC …) |
library_layout |
string |
SINGLE |
instrument_platform |
string |
ENA instrument_platform |
instrument_model |
string |
ENA instrument_model |
read_count |
string |
ENA read_count (as delivered by the portal) |
base_count |
string |
ENA base_count (as delivered by the portal) |
first_public |
string |
ENA first_public date (YYYY-MM-DD); its year bounds collection_date (R1 parser) |
sandpiper_profiled |
bool |
Run present in the Sandpiper snapshot (registry_runs_sandpiper) |
sample_key |
string |
gut_sample_metadata_wide.sample_key of the run's sample (run accession for run-unit samples; null when the BioSample is not a catalog sample, e.g. pooled runs) |
gut_sandpiper_sample_summary.parquet (339,626 rows) — one row per catalog sample with >= 1 run in the Sandpiper 2.0.0 snapshot (339,626 samples / 2,084 studies) — added R2026.12 — added R2026.12
| column |
dtype |
meaning |
sample_key |
str |
catalog sample key (gut_sample_metadata_wide) |
study_accession |
str |
BioProject |
n_runs_profiled |
int64 |
runs of the sample with a Sandpiper profile |
n_runs_total |
int64 |
runs of the sample in gut_runs |
qc_partial |
bool |
1 = some runs of the sample are unprofiled |
root_coverage_sum |
float64 |
summed SingleM root coverage over the profiled runs (depth proxy) |
richness_genus |
int64 |
genera with relative abundance >= 0.001 |
shannon_genus |
float64 |
Shannon index over genus relative abundances (natural log) |
shannon_genus_assigned |
float64 |
Shannon over genus-assigned coverage only (unassigned remainder excluded) |
top_genus |
str |
most abundant GTDB genus |
top_genus_relabund |
float64 |
its relative abundance (0-1) |
unassigned_genus_relabund |
float64 |
share of root coverage not resolved to a genus |
unassigned_species_relabund |
float64 |
share of root coverage not resolved to a species |
spf |
float64 |
Sandpiper single-copy-marker profile fraction (per_acc_summary) |
known_species_fraction |
float64 |
fraction of coverage in known species (per_acc_summary) |
qc_flags |
str |
';'-joined QC flags (qc_low_depth, qc_low_complexity, qc_non_metagenome, qc_partial, ...) — flagged, never dropped |
qc_any_flag |
bool |
1 = at least one QC flag set |
qc_low_depth |
bool |
root coverage below the depth threshold |
qc_low_complexity |
bool |
Sandpiper low_complexity flag |
qc_readfraction_warning |
bool |
Sandpiper read-fraction warning |
qc_non_metagenome |
bool |
organism prediction not a metagenome (loose rule) |
qc_non_metagenome_strict |
bool |
organism prediction not a metagenome (strict rule) |
qc_synthetic |
bool |
Sandpiper synthetic-sample flag |
qc_rna |
bool |
RNA / non-DNA library flag |
qc_predicted_ecological |
bool |
Sandpiper host_or_not prediction = ecological |
qc_no_genus_assigned |
bool |
no coverage resolved to any genus |
organism_labels |
str |
';'-joined Sandpiper organism labels of the runs |
runs_profiled |
str |
';'-joined profiled run accessions |
sandpiper_url |
str |
Sandpiper page of the first profiled run |
age_category |
str |
catalog age category (copied from the wide table) |
body_site_class |
str |
catalog body-site class |
infant_scope |
bool |
infant-extension filter flag |
taxonomy_db |
str |
taxonomy database (GTDB) |
taxonomy_version |
str |
GTDB release (R232) |
sandpiper_version |
str |
Sandpiper version (2.0.0) |
zenodo_record |
str |
Zenodo record of the bulk snapshot (20419175) |
gut_sandpiper_pca_scores.parquet (335,956 rows) — one row per scored sample of the genus-level CLR-PCA (335,956 samples x 383 genera; root coverage >= 2) — added R2026.12 — added R2026.12
| column |
dtype |
meaning |
sample_key |
str |
catalog sample key |
pc1 |
float32 |
PCA score, component 1 (16.3 % variance) |
pc2 |
float32 |
component 2 (6.5 %) |
pc3 |
float32 |
component 3 (3.8 %) |
pc4 |
float32 |
component 4 (3.2 %) |
pc5 |
float32 |
component 5 (2.3 %) |
study_accession |
str |
BioProject |
root_coverage_sum |
float64 |
summed root coverage (depth proxy) |
taxonomy_db |
str |
taxonomy database (GTDB) |
taxonomy_version |
str |
GTDB release (R232) |
sandpiper_version |
str |
Sandpiper version (2.0.0) |
zenodo_record |
str |
Zenodo record of the bulk snapshot (20419175) |
pca_method |
str |
CLR on 383 genera (prevalence >= 1 %), multiplicative pseudocount, randomized SVD |
gut_sandpiper_pca_loadings.parquet (383 rows) — one row per genus x component loading of the CLR-PCA — added R2026.12 — added R2026.12
| column |
dtype |
meaning |
genus |
str |
GTDB R232 genus |
pc1 |
float64 |
loading |
pc2 |
float64 |
loading |
pc3 |
float64 |
loading |
pc4 |
float64 |
loading |
pc5 |
float64 |
loading |
prevalence_ge_0p1pct |
float64 |
share of samples where the genus is >= 0.1 % relative abundance |
mean_relabund |
float64 |
mean relative abundance over scored samples |
clr_mean |
float64 |
mean CLR value |
taxonomy_db |
str |
taxonomy database (GTDB) |
taxonomy_version |
str |
GTDB release (R232) |
sandpiper_version |
str |
Sandpiper version (2.0.0) |
gut_sandpiper_pca_variance.csv (5 rows) — one row per PCA component: explained variance ratio — added R2026.12 — added R2026.12
| column |
dtype |
meaning |
pc |
str |
component index |
explained_variance_ratio |
float64 |
share of CLR variance |
singular_value |
float64 |
singular value |
cumulative |
float64 |
cumulative explained variance ratio |
n_samples |
int64 |
samples in the PCA |
n_genera |
int64 |
genera in the PCA |
root_coverage_min |
int64 |
minimum root coverage for inclusion |
prevalence_min |
float64 |
minimum genus prevalence for inclusion |
prevalence_detection |
float64 |
relative-abundance threshold used for prevalence |
pseudocount |
float64 |
multiplicative pseudocount before CLR |
total_clr_variance |
float64 |
total variance of the CLR matrix |
gut_sandpiper_study_coverage.csv (2,837 rows) — one row per catalog study: Sandpiper join coverage — added R2026.12 — added R2026.12
| column |
dtype |
meaning |
study_accession |
str |
BioProject |
study_title |
str |
study title |
n_runs |
int64 |
runs in gut_runs |
n_runs_profiled |
int64 |
runs with a profile |
n_samples |
int64 |
samples |
n_infant_scope |
int64 |
infant-scope samples |
n_samples_profiled |
int64 |
samples with >= 1 profiled run |
n_samples_partial |
int64 |
samples with unprofiled runs |
n_low_depth |
int64 |
samples flagged low depth |
n_low_complexity |
int64 |
samples flagged low complexity |
n_any_flag |
int64 |
samples with any QC flag |
root_coverage_median |
float64 |
median root coverage |
richness_genus_median |
float64 |
median genus richness |
shannon_genus_median |
float64 |
median Shannon |
frac_runs_profiled |
float64 |
profiled / total runs |
frac_samples_profiled |
float64 |
profiled / total samples |
coverage_class |
str |
full |
top_genus_mode |
str |
most frequent top genus |
prefix |
str |
accession prefix (SRR/ERR/DRR) |
sandpiper_version |
str |
Sandpiper version (2.0.0) |
taxonomy_db |
str |
taxonomy database (GTDB) |
taxonomy_version |
str |
GTDB release (R232) |
zenodo_record |
int64 |
Zenodo record of the bulk snapshot (20419175) |
| column |
dtype |
meaning |
study_accession |
str |
catalog project |
group_kind |
str |
family |
group_type |
str |
family, or the shared setting type |
group_id |
str |
family_id / shared_setting_id as given in the source |
n_people |
int64 |
distinct people (person_key) |
n_samples |
int64 |
catalog samples |
roles |
str |
JSON {family_role: n_people} |
motif |
str |
family motif, e.g. mother + child×2 |
people |
str |
';'-joined person keys |
sample_keys |
str |
';'-joined sample keys |
gut_relations.parquet (1,015 rows) — one row per explicit pairwise relation stated by the authors — added R2026.23 / 1.19.0 — added R2026.23
| column |
dtype |
meaning |
study_accession |
str |
catalog project |
subject_a |
str |
person (subject id or label) |
subject_b |
str |
related person |
relation |
str |
donor_of |
evidence_source |
str |
where the relation is stated |
evidence_quote |
str |
verbatim quote |
confidence |
float64 |
0-1 |
sample_key_a |
str |
a sample of subject_a when known |
notes |
str |
free text |
gut_pass_coverage.csv (2,798 rows) — one row per catalog project: status of every annotation pass — added R2026.25 / 1.20.0 (release check scripts/check_pass_coverage.py) — added R2026.25
| column |
dtype |
meaning |
study_accession |
string |
catalog project |
has_pmcid |
bool |
project has an uncontested linked paper with a PMCID (full-text / supplementary passes apply) |
fulltext |
string |
full-text cohort statements (R3 + R3b): done |
abstract |
string |
abstract / ENA-description statements (R4 + R4b) |
interventions |
string |
study-level intervention classification |
deep |
string |
per-sample deep annotation (archive attributes, sample names, paper tables) |
supplementary |
string |
supplementary / body-table search (R2) |
subject |
string |
subject_id pass (applies when subject_id coverage < 95 %) |
design |
string |
relatedness + longitudinal study-design pass |
n_missing |
int |
passes that apply but were never attempted |
| column |
dtype |
meaning |
sample_key |
string |
catalog sample |
study_accession |
string |
project |
field_name |
string |
field whose value is withheld |
kind |
string |
sources_disagree |
value_a |
string |
value of the published-precedence source (or the sample's own value) |
route_a |
string |
route of value_a |
source_a |
string |
evidence source of value_a |
quote_a |
string |
evidence quote of value_a |
value_b |
string |
incompatible value from the other source |
route_b |
string |
route of value_b |
source_b |
string |
evidence source of value_b |
quote_b |
string |
evidence quote of value_b |
handling |
string |
what was published (normally: neither value) |
note |
string |
e.g. the sex split of the subject |
Sandpiper columns (added v1.2.0)
Source: SingleM community profiles from Sandpiper 2.0.0 (Woodcroft et al. 2025, Nat Biotechnol; Zenodo record 20419175, CC-BY), taxonomy GTDB R232. Profiles are keyed by run; for a catalog sample with several profiled runs the filled coverage per taxon is summed across runs and then normalised (never averaged). Every *_ra column is a fraction of prokaryotic (Bacteria + Archaea) coverage — approximately a cell proportion, not a read fraction; not comparable with MetaPhlAn or 16S numbers.
| column |
meaning |
sp_profiled |
True when at least one run of the sample has a Sandpiper profile |
sandpiper_url |
https://sandpiper.qut.edu.au/run/<run> — the RANDOM-selection profiled run with the highest root coverage (v1.2.1) |
sp_n_runs_total, sp_n_runs_profiled, sp_partial |
run counts; sp_partial = some runs unprofiled |
sp_spf |
prokaryotic read fraction (%), metagenome-size-weighted over runs |
sp_known_species_fraction |
% of prokaryotic coverage assigned to a named GTDB species |
sp_root_coverage |
summed root coverage (× genome equivalents); sp_low_depth = root < 2× (bars hidden) |
sp_top_genus, sp_top_genus_ra |
most abundant genus-level bin (may be unassigned_at_genus) |
sp_ra_g_Bifidobacterium |
GTDB g__Bifidobacterium (stable genus) |
sp_ra_f_Bacteroidaceae, sp_ra_g_Bacteroides, sp_ra_g_Phocaeicola |
GTDB moved B. vulgatus/dorei/plebeius/coprocola to Phocaeicola; the family ≈ NCBI-sense Bacteroides |
sp_ra_enterobacterales_core |
Σ of six GTDB genera incl. their alphabetic-suffix genera (^g__<Name>(_[A-Z]+)?$): Escherichia, Klebsiella, Enterobacter(+_B,_D), Citrobacter(+_A = amalonaticus/farmeri, _B = koseri, _C, _D), Salmonella, Serratia(+_B,_G) (GTDB f__Enterobacteriaceae is broader than NCBI's, so the family is not used) |
sp_ra_g_Escherichia, sp_ra_g_Klebsiella, sp_ra_f_Lachnospiraceae, sp_ra_f_Lactobacillaceae (GTDB splits Lactobacillus), sp_ra_g_Streptococcus, sp_ra_g_Staphylococcus, sp_ra_g_Enterococcus, sp_ra_g_Veillonella, sp_ra_g_Clostridioides (C. difficile) |
indicator taxa |
sp_ra_unassigned_genus |
coverage not resolved to a genus (novel fraction; never renormalised away) |
sp_shannon_genus, sp_n_genera_ge1pct |
Shannon (ln) over genus bins incl. the unassigned bin; named genera ≥ 1 % |
sp_flag_low_complexity |
Sandpiper low-complexity rule — expected for Bifidobacterium-/Enterobacterales-dominated neonatal stool; display only, never triage |
sp_nonmeta_class, sp_flag_non_metagenome, sp_flag_synthetic, sp_flag_rna, sp_flag_readfraction_warning |
see sandpiper_flag_table.csv (single source for field, site label, definition, level; sandpiper_flag_definitions.json is generated from it). sp_flag_non_metagenome = sp_nonmeta_class ∈ {named_nonhuman_host, named_microbe_or_other} over the sample's runs (v1.2.1) |
sp_run_concordance_bc, sp_runs_discordant |
max pairwise genus-level Bray–Curtis between the sample's runs; discordant = BC > 0.5 (human-review hint, not a verdict) |
taxonomy_db, taxonomy_version, sandpiper_version |
GTDB / R232 / 2.0.0 on every profiled row |
GTDB alphabetic-suffix genera (v1.2.1, R3-1)
Every genus indicator matches ^g__<Name>(_[A-Z]+)?$, i.e. the GTDB genus and its alphabetic-suffix split genera, so that the NCBI-sense genus is covered. gtdb_to_ncbi_note per indicator:
| indicator |
GTDB taxa summed |
gtdb_to_ncbi_note |
sp_ra_g_Bifidobacterium |
g__Bifidobacterium |
single GTDB genus; equals NCBI Bifidobacterium |
sp_ra_g_Bacteroides |
g__Bacteroides, g__Bacteroides_D, g__Bacteroides_E, g__Bacteroides_F |
Bacteroides_D/_E/_F are NCBI Bacteroides species split by GTDB (e.g. B. pectinophilus) |
sp_ra_g_Phocaeicola |
g__Phocaeicola, g__Phocaeicola_A |
Phocaeicola_A added; the family f__Bacteroidaceae ≈ NCBI-sense Bacteroides |
sp_ra_enterobacterales_core |
g__Citrobacter, g__Citrobacter_A, g__Citrobacter_B, g__Citrobacter_C, g__Citrobacter_D, g__Enterobacter, g__Enterobacter_B, g__Enterobacter_D, g__Escherichia, g__Klebsiella, g__Salmonella, g__Serratia, g__Serratia_B, g__Serratia_G |
includes Citrobacter_A (amalonaticus/farmeri), Citrobacter_B (koseri), Enterobacter_B/_D, Serratia_B/_G; Escherichia includes NCBI Shigella |
sp_ra_g_Escherichia |
g__Escherichia |
GTDB Escherichia includes NCBI Shigella |
sp_ra_g_Klebsiella |
g__Klebsiella |
single GTDB genus |
sp_ra_g_Streptococcus |
g__Streptococcus |
single GTDB genus in this dataset |
sp_ra_g_Staphylococcus |
g__Staphylococcus |
single GTDB genus in this dataset |
sp_ra_g_Enterococcus |
g__Enterococcus, g__Enterococcus_A, g__Enterococcus_B, g__Enterococcus_C, g__Enterococcus_D, g__Enterococcus_E, g__Enterococcus_F, g__Enterococcus_G, g__Enterococcus_H, g__Enterococcus_I, g__Enterococcus_J, g__Enterococcus_K, g__Enterococcus_L |
includes GTDB Enterococcus_A (avium/raffinosus/gilvus), _B (faecium/lactis/hirae/durans), _C (asini/dispar), _D (gallinarum/casseliflavus), _E (cecorum), _F … _L; plain g__Enterococcus = E. faecalis group |
sp_ra_g_Veillonella |
g__Veillonella, g__Veillonella_A |
includes Veillonella_A (seminalis/ratti and unnamed species) |
sp_ra_g_Clostridioides |
g__Clostridioides |
single GTDB genus (C. difficile) |
Placeholder genera: GTDB R232 contains alphanumeric placeholder genera without a Latin name, e.g. g__ECMA0423 (Enterobacteriaceae; one species, detected in ~34 % of profiled samples at ~0.25 % mean RA) and g__G047199095. They are real GTDB genera, appear in sandpiper_top_genera.parquet and in study panels under their placeholder name, and are not counted in any named indicator column. Bifidobacterium species shares (share_within_bifidobacterium, off-package table) are normalised over named species only; in ~20 % of samples > 10 % of genus coverage is unresolved at species rank, so shares overstate named species — use sp_ra_unassigned_species as the denominator caveat.
<field>__scope (16 coverage fields): scope of the winning determination — sample, subject, biosample (propagated from a parent BioSample) or group (R3/R4 statement applied to a defined group). Apply the README reading rule to group-scope values.
Study columns sp_*: sp_frac_samples_profiled = profiled rows / n_sample_rows (one denominator, v1.2.1); sp_median_* are computed over panel-scope rows (catalog_scope ∧ profiled ∧ NOT sp_low_depth) and are null with sp_panel_scope giving the fallback label when a study has none; sp_frac_runs_flagged counts runs whose organism label is a non-human host or a named microbe, or synthetic / RNA (the routine "Homo sapiens" host label is not counted). sp_auditor_attention/sp_auditor_reason: the Sandpiper track's hint that a study deserves a human look (never a verdict).
Author columns (added v1.2.0)
authors.parquet: one row per study × author × paper (author_display, author_surname, author_initials, is_group, source ∈ linked_paper / bioproject_publication / ena_study_xref, pmid, doi, position, n_authors, is_first, is_last, paper_relation, catalog_status). study_authors_summary.csv: per screened study first_author, last_author, n_authors, n_papers, organisations (ENA centre / broker and NCBI BioProject owner names, ;-joined). Names are string-matched from Europe PMC authorString; the same person may appear under several initial variants and no disambiguation was attempted.
sandpiper_run_qc.parquet (documented v1.2.1)
One row per run of the 389 included studies (174,022 rows). Keys: run_accession, study_accession, sample_accession (BioSample), catalog_sample_key (sample-table key), sample_unit (biosample / run — v1.2.0 wrote the retired value biosample_pooled for the 521 run-unit runs; renamed in v1.2.1 so a join on sample_unit = 'run' works).
| column |
meaning |
in_sandpiper |
True when the run has a profile in the Zenodo snapshot |
sp_miss_reason |
why not (precedence v1.2.1: strategy → platform → access → horizon → size → snapshot gap): profiled · non_wgs_strategy (library_strategy in {AMPLICON, Targeted-Capture, WXS} — the strategies with zero profiled runs in the snapshot; OTHER and WGA are profiled by Sandpiper and are not miss reasons) · non_illumina_platform · controlled_access_study · published_after_snapshot_horizon · unknown_size (ENA base_count ≤ 0, so size cannot be judged) · small_run_lt_100Mbp · ena_illumina_not_in_snapshot / sra_illumina_not_in_snapshot / ddbj_illumina_not_in_snapshot (eligible by every rule but absent from the snapshot) |
library_strategy, library_source, instrument_platform, base_count, first_public, organism |
ENA run/sample fields used by the rules |
sp_root_coverage, sp_species_coverage |
root / species-level coverage (genome equivalents) |
top1_order_fraction, top3_order_fraction |
share of coverage in the top 1 / top 3 orders (low-complexity inputs) |
sp_spf, sp_known_species_fraction |
prokaryotic read fraction (%), known-species fraction (%) |
bacterial_archaeal_bases, metagenome_size, average_bacterial_archaeal_genome_size |
Sandpiper size estimates (bases) |
sp_warning_present |
Sandpiper emitted a warning for the run |
sp_prediction, sp_host_or_not |
Sandpiper ecological prediction and host-associated call |
sp_nonmeta_class |
organism-label class: not_flagged · named_human_host · named_nonhuman_host · named_microbe_or_other (see sandpiper_flag_table.csv) |
sp_flag_*, sp_low_depth, sp_predicted_ecological, sp_low_known_species_high_depth |
run-level flags — every one is defined in sandpiper_flag_table.csv |
sandpiper_url, sandpiper_version, taxonomy_db, taxonomy_version, zenodo_record |
provenance (Sandpiper 2.0.0 outputs, Zenodo 20419175, GTDB R232; the live Sandpiper site may show a newer version) |
sandpiper_study_panels.parquet (v2, v1.2.1)
Mean relative abundance per study over panel-scope rows = catalog_scope ∧ sp_profiled ∧ NOT sp_low_depth (top-12 phyla, top-15 genera, plus the unassigned_at_* bins with rank_order = 0). Columns: study_accession, rank, taxon, mean_rel_abundance, n_samples_panel (rows averaged; asserted equal to the recomputation from the shipped sample table), rank_order, n_samples_study (rows of the study), n_catalog_scope, n_profiled, n_profiled_catalog_scope, n_profiled_age_infant / n_profiled_age_adult / n_profiled_age_unknown_or_other (age_scope breakdown of all profiled rows, for the caption), n_low_depth_excluded_from_panel, frac_samples_profiled, panel_scope, panel_definition, taxonomy_db, taxonomy_version. Studies without panel-scope rows have no rows here; their fallback label is in sandpiper_study_panel_status.csv and in study_metadata_wide.sp_panel_scope. The v1.2.0 merge artefacts n_samples_x/n_samples_y are gone.
sandpiper_flag_table.csv (v1.2.1)
Single source for every Sandpiper flag: field, level (run / sample / study), site_label, definition, used. sandpiper_flag_definitions.json is generated from it; the GlobDB domain-only flags are kept with used = false (the catalog uses GTDB profiles only).
organisations.parquet (v2, v1.2.1) and study_authors_summary.csv
One row per study × organisation token × source (bioproject_organization = NCBI BioProject Organization, submitter_center = ENA center_name, ena_broker). v1.2.1 adds not_org_reason (submission_id for ^SUB\d+( \| SUB\d+)*$, email_or_handle for tokens containing @, placeholder for n/a / None / '.', lowercase_username for single all-lowercase tokens such as hpsun), is_organisation (not_org_reason is null; such rows get org_type = not_an_organisation) and display_eligible (is_organisation AND, for PRJNA studies with an NCBI BioProject organisation, not an ENA center_name). organisations_index.json, study_authors_summary.organisations and study_metadata_wide.organisations are built from display_eligible rows only; a check asserts that no published organisation string matches SUB\d{6,} or contains @. Single lowercase tokens include some genuine company/institute acronyms (e.g. novogene, rivm) — they stay in the parquet for owner whitelisting but are not displayed.
authors.parquet (v2): author_key folds names with a transliteration map (ø→o, æ→ae, ß→ss, ł→l, đ→d, İ→i, Ð→d, Þ→th) before NFKD stripping, and folds initials too; the group regex includes office / production / editorial; name_needs_check flags no-initials multi-token person names for manual review.
Complete column reference (generated from the parquet schema; the build fails on an undocumented column)
| column |
dtype |
description |
sample_key |
str |
primary key: BioSample accession for biosample units, run accession for run units |
study_accession |
str |
BioProject accession |
secondary_sample |
str |
ENA secondary sample accession |
sample_title |
str |
submitter sample title |
body_site_class |
str |
body-site scope class — vocabulary: primary (infant gut/stool/meconium/rectal), unknown (no body-site evidence; kept in body-site scope), excluded (non-gut site: skin, oral, milk, vaginal, nasal…; or, since v1.2.1, non-human host / isolate genome — see exclusion_reason_code), linked (mother/other sample linked to an infant subject; out of body-site scope) |
collection_date |
str |
archive collection_date as given |
is_gold_heldout |
bool |
True if in the curatedMetagenomicData evaluation set |
probiotic_exposure |
str |
metadata field probiotic_exposure (see Field vocabularies) |
preterm_status |
str |
metadata field preterm_status (see Field vocabularies) |
gestational_age_weeks |
float64 |
metadata field gestational_age_weeks (see Field vocabularies) |
delivery_mode |
str |
metadata field delivery_mode (see Field vocabularies) |
feeding_mode |
str |
metadata field feeding_mode (see Field vocabularies) |
antibiotic_exposure |
str |
metadata field antibiotic_exposure (see Field vocabularies) |
age_at_collection_days |
float64 |
metadata field age_at_collection_days (see Field vocabularies) |
birth_weight_grams |
float64 |
metadata field birth_weight_grams (see Field vocabularies) |
country |
str |
metadata field country (see Field vocabularies) |
maternal_antibiotics |
str |
metadata field maternal_antibiotics (see Field vocabularies) |
hmo_supplementation |
str |
metadata field hmo_supplementation (see Field vocabularies) |
nec_status |
str |
metadata field nec_status (see Field vocabularies) |
health_condition |
str |
metadata field health_condition (see Field vocabularies) |
multiple_birth |
str |
metadata field multiple_birth (see Field vocabularies) |
sibling_in_study |
str |
metadata field sibling_in_study (see Field vocabularies) |
geo_subregion |
str |
metadata field geo_subregion (see Field vocabularies) |
sex |
str |
metadata field sex (see Field vocabularies) |
timepoint_label |
str |
metadata field timepoint_label (see Field vocabularies) |
subject_id |
str |
metadata field subject_id (see Field vocabularies) |
probiotic_exposure__confidence |
float64 |
confidence of probiotic_exposure (0–1) |
preterm_status__confidence |
float64 |
confidence of preterm_status (0–1) |
gestational_age_weeks__confidence |
float64 |
confidence of gestational_age_weeks (0–1) |
delivery_mode__confidence |
float64 |
confidence of delivery_mode (0–1) |
feeding_mode__confidence |
float64 |
confidence of feeding_mode (0–1) |
antibiotic_exposure__confidence |
float64 |
confidence of antibiotic_exposure (0–1) |
age_at_collection_days__confidence |
float64 |
confidence of age_at_collection_days (0–1) |
birth_weight_grams__confidence |
float64 |
confidence of birth_weight_grams (0–1) |
country__confidence |
float64 |
confidence of country (0–1) |
maternal_antibiotics__confidence |
float64 |
confidence of maternal_antibiotics (0–1) |
hmo_supplementation__confidence |
float64 |
confidence of hmo_supplementation (0–1) |
nec_status__confidence |
float64 |
confidence of nec_status (0–1) |
health_condition__confidence |
float64 |
confidence of health_condition (0–1) |
multiple_birth__confidence |
float64 |
confidence of multiple_birth (0–1) |
sibling_in_study__confidence |
float64 |
confidence of sibling_in_study (0–1) |
geo_subregion__confidence |
float64 |
confidence of geo_subregion (0–1) |
sex__confidence |
float64 |
confidence of sex (0–1) |
timepoint_label__confidence |
float64 |
confidence of timepoint_label (0–1) |
subject_id__confidence |
float64 |
confidence of subject_id (0–1) |
probiotic_exposure__route |
str |
route of probiotic_exposure (R1–R4, see Routes) |
preterm_status__route |
str |
route of preterm_status (R1–R4, see Routes) |
gestational_age_weeks__route |
str |
route of gestational_age_weeks (R1–R4, see Routes) |
delivery_mode__route |
str |
route of delivery_mode (R1–R4, see Routes) |
feeding_mode__route |
str |
route of feeding_mode (R1–R4, see Routes) |
antibiotic_exposure__route |
str |
route of antibiotic_exposure (R1–R4, see Routes) |
age_at_collection_days__route |
str |
route of age_at_collection_days (R1–R4, see Routes) |
birth_weight_grams__route |
str |
route of birth_weight_grams (R1–R4, see Routes) |
country__route |
str |
route of country (R1–R4, see Routes) |
maternal_antibiotics__route |
str |
route of maternal_antibiotics (R1–R4, see Routes) |
hmo_supplementation__route |
str |
route of hmo_supplementation (R1–R4, see Routes) |
nec_status__route |
str |
route of nec_status (R1–R4, see Routes) |
health_condition__route |
str |
route of health_condition (R1–R4, see Routes) |
multiple_birth__route |
str |
route of multiple_birth (R1–R4, see Routes) |
sibling_in_study__route |
str |
route of sibling_in_study (R1–R4, see Routes) |
geo_subregion__route |
str |
route of geo_subregion (R1–R4, see Routes) |
sex__route |
str |
route of sex (R1–R4, see Routes) |
timepoint_label__route |
str |
route of timepoint_label (R1–R4, see Routes) |
subject_id__route |
str |
route of subject_id (R1–R4, see Routes) |
subject_key |
str |
resolved subject id (study-scoped) |
role |
str |
infant · mother · other · unknown · adult · child (see Sample unit section) |
t_index |
float64 |
timepoint index within subject |
n_timepoints_subject |
float64 |
timepoints of the subject |
linked_infant_subject_key |
str |
infant subject a mother/other sample is linked to |
run_accessions |
str |
;-joined run accessions of the sample |
n_runs |
float64 |
number of runs |
instrument_model |
str |
instrument model (top) |
library_layout |
str |
PAIRED/SINGLE |
read_count_total |
float64 |
summed read_count over runs |
study_title |
str |
BioProject title |
cohort_id |
str |
cohort id (cohorts.csv) |
cohort_name |
str |
cohort name |
first_public_min |
str |
earliest first_public of the runs |
adult_age_flag |
bool |
True when a committed age is > 1,100 d (see age_scope = adult_flagged) |
n_fields_with_value |
int64 |
count of the 19 fields with a value |
ena_sample_url |
str |
ENA browser link |
ena_study_url |
str |
ENA study link |
sample_unit |
str |
biosample or run (see Sample unit section) |
parent_biosample |
str |
parent BioSample of a run unit |
biosample_accession |
str |
BioSample accession (always populated) |
run_accession |
str |
run accession for run units, else null |
age_scope |
str |
age-scope class (see Sample unit section). Footnote: adult_flagged means "over-age flagged" — any committed age > 1,100 d, which includes children aged 3–18 y (role = child), not only adults |
age_scope_basis |
str |
evidence behind age_scope |
role_source |
str |
evidence behind role |
sp_profiled |
bool |
True when at least one run has a Sandpiper profile |
sandpiper_url |
str |
link to the representative profiled run: RANDOM-selection run with the highest root coverage (v1.2.1; v1.2.0 used the alphabetically first run) |
sp_n_runs_total |
int64 |
runs of the sample (populated for every row since v1.2.1) |
sp_n_runs_profiled |
int64 |
profiled runs (0 when unprofiled) |
sp_partial |
bool |
True when 0 < profiled runs < total runs; False for unprofiled rows |
sp_spf |
float64 |
prokaryotic read fraction (%) |
sp_known_species_fraction |
float64 |
% of prokaryotic coverage assigned to a named GTDB species |
sp_root_coverage |
float64 |
summed root coverage (genome equivalents) |
sp_low_depth |
boolean |
root coverage < 2 (excluded from panels/medians) |
sp_top_genus |
str |
most abundant genus bin |
sp_top_genus_ra |
float64 |
its relative abundance |
sp_ra_g_Bifidobacterium |
float64 |
GTDB g__Bifidobacterium (no suffix genera in R232) |
sp_ra_f_Bacteroidaceae |
float64 |
GTDB f__Bacteroidaceae |
sp_ra_g_Bacteroides |
float64 |
GTDB g__Bacteroides + suffix genera Bacteroides_D/_E/_F |
sp_ra_g_Phocaeicola |
float64 |
GTDB g__Phocaeicola + Phocaeicola_A |
sp_ra_enterobacterales_core |
float64 |
Σ of GTDB Escherichia, Klebsiella, Enterobacter(+_B,_D), Citrobacter(+_A,_B,_C,_D), Salmonella, Serratia(+_B,_G) |
sp_ra_g_Escherichia |
float64 |
GTDB g__Escherichia (includes NCBI Shigella) |
sp_ra_g_Klebsiella |
float64 |
GTDB g__Klebsiella |
sp_ra_f_Lachnospiraceae |
float64 |
GTDB f__Lachnospiraceae |
sp_ra_f_Lactobacillaceae |
float64 |
GTDB f__Lactobacillaceae (GTDB splits NCBI Lactobacillus into many genera) |
sp_ra_g_Streptococcus |
float64 |
GTDB g__Streptococcus |
sp_ra_g_Staphylococcus |
float64 |
GTDB g__Staphylococcus |
sp_ra_g_Enterococcus |
float64 |
GTDB g__Enterococcus (= E. faecalis group) + Enterococcus_A (avium/raffinosus/gilvus) + _B (faecium/lactis/hirae/durans) + _C … _L |
sp_ra_g_Veillonella |
float64 |
GTDB g__Veillonella + Veillonella_A |
sp_ra_g_Clostridioides |
float64 |
GTDB g__Clostridioides (C. difficile) |
sp_ra_unassigned_genus |
float64 |
coverage not resolved to a genus |
sp_shannon_genus |
float64 |
Shannon (ln) over genus bins incl. unassigned |
sp_n_genera_ge1pct |
float64 |
named genera ≥ 1 % |
sp_flag_low_complexity |
boolean |
see sandpiper_flag_table.csv |
sp_flag_non_metagenome |
bool |
see sandpiper_flag_table.csv (derived from sp_nonmeta_class since v1.2.1) |
sp_flag_synthetic |
boolean |
see sandpiper_flag_table.csv |
sp_flag_rna |
boolean |
see sandpiper_flag_table.csv |
sp_flag_readfraction_warning |
boolean |
see sandpiper_flag_table.csv |
sp_run_concordance_bc |
float64 |
max pairwise genus Bray–Curtis between runs |
sp_runs_discordant |
boolean |
BC > 0.5 |
taxonomy_db |
str |
GTDB |
taxonomy_version |
str |
R232 |
sandpiper_version |
str |
2.0.0 (Zenodo snapshot 20419175; the live Sandpiper site may show a newer version) |
age_at_collection_days__scope |
string |
scope of the winning age_at_collection_days determination: sample / subject / biosample / group |
antibiotic_exposure__scope |
string |
scope of the winning antibiotic_exposure determination: sample / subject / biosample / group |
birth_weight_grams__scope |
string |
scope of the winning birth_weight_grams determination: sample / subject / biosample / group |
country__scope |
string |
scope of the winning country determination: sample / subject / biosample / group |
delivery_mode__scope |
string |
scope of the winning delivery_mode determination: sample / subject / biosample / group |
feeding_mode__scope |
string |
scope of the winning feeding_mode determination: sample / subject / biosample / group |
geo_subregion__scope |
string |
scope of the winning geo_subregion determination: sample / subject / biosample / group |
gestational_age_weeks__scope |
string |
scope of the winning gestational_age_weeks determination: sample / subject / biosample / group |
health_condition__scope |
string |
scope of the winning health_condition determination: sample / subject / biosample / group |
hmo_supplementation__scope |
string |
scope of the winning hmo_supplementation determination: sample / subject / biosample / group |
maternal_antibiotics__scope |
string |
scope of the winning maternal_antibiotics determination: sample / subject / biosample / group |
multiple_birth__scope |
string |
scope of the winning multiple_birth determination: sample / subject / biosample / group |
nec_status__scope |
string |
scope of the winning nec_status determination: sample / subject / biosample / group |
preterm_status__scope |
string |
scope of the winning preterm_status determination: sample / subject / biosample / group |
probiotic_exposure__scope |
string |
scope of the winning probiotic_exposure determination: sample / subject / biosample / group |
sibling_in_study__scope |
string |
scope of the winning sibling_in_study determination: sample / subject / biosample / group |
exclusion_reason_code |
object |
controlled reason code when a deterministic sample rule set body_site_class = excluded in v1.2.1: host_nonhuman (ENA scientific_name/tax_id is a non-human animal) or assay_isolate_genome (all runs GENOMIC with a named microbe organism); null otherwise. Rows are logged in value_history (change_stage auditor_review:R3-3) |
sp_nonmeta_class |
str |
any-run organism-label class over ALL runs of the sample (see sandpiper_flag_table.csv): not_flagged · named_human_host · named_nonhuman_host · named_microbe_or_other |
catalog_scope |
bool |
headline scope (v1.2.1) = age_scope ∈ {infant_evidenced, study_all_infant} AND body_site_class ∈ {primary, unknown}; the intersection used for headline counts (71,795 rows) and for Sandpiper study panels/medians |
panel_scope |
bool |
True when the row enters its study's Sandpiper panel/medians: catalog_scope AND sp_profiled AND NOT sp_low_depth |
| column |
dtype |
description |
study_accession |
str |
BioProject accession (key) |
triage_verdict |
str |
include/exclude/uncertain from the infant triage cascade. INFANT-CATALOG verdict (historical, 2026-09 infant screen) — NOT membership in the all-age catalog: a study can be excluded here (e.g. age_adult_only) and still be in gut_studies. Catalog membership = presence in gut_studies.parquet. |
outcome |
str |
contract outcome of the final verdict row |
confidence |
float64 |
confidence of the final verdict |
reason_code |
str |
controlled exclusion reason of the INFANT screen (null for included); age_* codes are infant-age reasons, not catalog exclusions |
evidence |
str |
JSON evidence list of the final verdict |
model |
str |
model/stage that produced the final verdict |
decision_stage |
str |
stage table of the final verdict |
note |
str |
free-text note of the final verdict |
n_infant_samples_est |
float64 |
triage estimate of infant samples |
body_site_call |
str |
triage body-site call for the study |
slot |
str |
verdict slot name |
validator_ok |
object |
validator result on the verdict row |
validator_msg |
str |
validator message |
study_title |
str |
BioProject title |
n_samples |
int64 |
from runs.parquet: distinct BioSamples with runs registered under this study (runs for run-unit studies). Sums to 154,268 over studies because 62 BioSamples carry runs from two BioProjects; use n_sample_rows for rows in the sample table |
n_runs |
int64 |
runs registered under the study |
first_public_min |
str |
earliest first_public |
sig_infant_hit |
bool |
enumeration infant signal hit |
sig_infant_title |
bool |
infant term in title |
screen_haiku |
str |
Haiku screen label (yes/no) |
linked_infant_paper |
bool |
a linked paper is infant-scoped |
universe_slice |
str |
enumeration channel |
catalog_status |
str |
included / excluded / human_review in the INFANT catalog. INFANT-CATALOG verdict (historical, 2026-09 infant screen) — NOT membership in the all-age catalog: a study can be excluded here (e.g. age_adult_only) and still be in gut_studies. Catalog membership = presence in gut_studies.parquet. |
assessed_downstream |
bool |
reached the extraction stage |
recov_age |
str |
recoverability tier for age (R0–R4) |
recov_antibiotics |
str |
recoverability tier for antibiotics (R0–R4) |
recov_delivery |
str |
recoverability tier for delivery (R0–R4) |
recov_feeding |
str |
recoverability tier for feeding (R0–R4) |
recov_preterm |
str |
recoverability tier for preterm (R0–R4) |
recov_probiotic |
str |
recoverability tier for probiotic (R0–R4) |
cohort_id |
str |
cohort id |
cohort_name |
str |
cohort name |
cohort_crosswalk_names |
str |
alternative cohort names |
n_biosample_infant_flagged |
int64 |
BioSamples flagged infant by archive attributes at triage |
n_linked_papers |
int64 |
linked papers |
linked_pmids |
str |
;-joined PMIDs |
median_gbp |
float64 |
median bases per run (Gbp) |
median_read_len |
float64 |
median nominal read length |
paired_share |
float64 |
fraction of PAIRED runs |
instrument_model_top |
str |
most frequent instrument model |
generation_top |
str |
sequencer generation of instrument_model_top |
timepoint_class |
str |
cross_sectional / longitudinal heuristic from sample titles |
country_top |
str |
most frequent country |
worklist_rank |
float64 |
curation priority rank |
expected_field_yield |
float64 |
predicted number of recoverable fields |
effort_class |
str |
curation effort class |
controlled_access |
object |
True when the study is controlled-access (dbGaP/EGA) |
n_biosamples |
int64 |
BioSample-unit rows of the study in the sample table (v1.2.1: parents of run units no longer counted here; see n_run_units, n_parent_biosamples) |
sample_unit |
str |
dominant sample unit of the study: biosample / run |
cov_probiotic_exposure |
float64 |
fraction of catalog-scope-eligible rows (n_infant_scope_samples denominator) with a probiotic_exposure value |
cov_preterm_status |
float64 |
fraction of catalog-scope-eligible rows (n_infant_scope_samples denominator) with a preterm_status value |
cov_gestational_age_weeks |
float64 |
fraction of catalog-scope-eligible rows (n_infant_scope_samples denominator) with a gestational_age_weeks value |
cov_delivery_mode |
float64 |
fraction of catalog-scope-eligible rows (n_infant_scope_samples denominator) with a delivery_mode value |
cov_feeding_mode |
float64 |
fraction of catalog-scope-eligible rows (n_infant_scope_samples denominator) with a feeding_mode value |
cov_antibiotic_exposure |
float64 |
fraction of catalog-scope-eligible rows (n_infant_scope_samples denominator) with a antibiotic_exposure value |
cov_age_at_collection_days |
float64 |
fraction of catalog-scope-eligible rows (n_infant_scope_samples denominator) with a age_at_collection_days value |
cov_birth_weight_grams |
float64 |
fraction of catalog-scope-eligible rows (n_infant_scope_samples denominator) with a birth_weight_grams value |
cov_country |
float64 |
fraction of catalog-scope-eligible rows (n_infant_scope_samples denominator) with a country value |
cov_maternal_antibiotics |
float64 |
fraction of catalog-scope-eligible rows (n_infant_scope_samples denominator) with a maternal_antibiotics value |
cov_hmo_supplementation |
float64 |
fraction of catalog-scope-eligible rows (n_infant_scope_samples denominator) with a hmo_supplementation value |
cov_nec_status |
float64 |
fraction of catalog-scope-eligible rows (n_infant_scope_samples denominator) with a nec_status value |
cov_health_condition |
float64 |
fraction of catalog-scope-eligible rows (n_infant_scope_samples denominator) with a health_condition value |
cov_multiple_birth |
float64 |
fraction of catalog-scope-eligible rows (n_infant_scope_samples denominator) with a multiple_birth value |
cov_sibling_in_study |
float64 |
fraction of catalog-scope-eligible rows (n_infant_scope_samples denominator) with a sibling_in_study value |
cov_geo_subregion |
float64 |
fraction of catalog-scope-eligible rows (n_infant_scope_samples denominator) with a geo_subregion value |
n_unique_infants_est |
float64 |
distinct infant subjects (see Sample unit section) |
max_timepoints |
float64 |
max timepoints per infant subject |
longitudinal |
bool |
True when max_timepoints > 1 |
n_mothers |
int64 |
mother-role subjects |
n_infant_scope_samples |
int64 |
body-site scope count: rows with body_site_class ∈ {primary, unknown} (name kept for compatibility; not age-evidenced) |
ena_url |
str |
ENA link |
ncbi_url |
str |
NCBI link |
n_age_scope_infant |
int64 |
rows with age_scope ∈ {infant_evidenced, study_all_infant} |
n_adult_flagged |
int64 |
rows with age_scope = adult_flagged (over-age, includes children) |
n_age_unknown_mixed_study |
int64 |
rows age_unknown_mixed_study |
n_age_unknown_no_study_estimate |
int64 |
rows age_unknown_no_study_estimate |
n_infant_evidenced |
int64 |
rows infant_evidenced |
n_non_infant_role |
int64 |
rows non_infant_role |
n_study_all_infant |
int64 |
rows study_all_infant |
mixed_age_deposit |
bool |
> 50 % of rows are age_unknown_mixed_study or adult_flagged |
n_infant_role_samples |
int64 |
rows with role = infant |
n_infant_samples_with_subject |
int64 |
infant rows with a resolved subject |
n_unique_infants_source |
str |
source class of the unique-infant estimate |
n_unique_infants_upper |
float64 |
upper bound |
n_unique_infants_display |
str |
string to render |
n_sample_rows |
int64 |
rows of the sample table keyed to this study |
n_biosamples_shared_with_other_study |
int64 |
BioSamples of this study also registered under another BioProject |
sp_n_samples_profiled |
int64 |
sample rows with a profile |
sp_frac_samples_profiled |
float64 |
sp_n_samples_profiled / n_sample_rows (single denominator since v1.2.1) |
sp_median_bifidobacterium_ra |
float64 |
median sp_ra_g_Bifidobacterium over panel-scope rows (catalog_scope ∧ profiled ∧ NOT low depth); null when the study has none |
sp_median_shannon_genus |
float64 |
median Shannon over panel-scope rows |
sp_n_runs_profiled |
int64 |
profiled runs registered under this study |
sp_frac_runs_profiled |
float64 |
sp_n_runs_profiled / n_runs |
sp_coverage_class |
str |
none (no profiled rows) · partial · full (every row profiled); defined on sample rows since v1.2.1 |
sp_frac_runs_flagged |
float64 |
see sandpiper_flag_table.csv |
sp_frac_low_complexity_profiled |
float64 |
see sandpiper_flag_table.csv |
sp_frac_low_depth_profiled |
float64 |
see sandpiper_flag_table.csv |
sp_median_spf |
float64 |
median prokaryotic read fraction over panel-scope rows |
sp_median_known_species_fraction |
float64 |
median known-species fraction over panel-scope rows |
sp_auditor_attention |
bool |
see sandpiper_flag_table.csv |
sp_auditor_reason |
str |
reason text for sp_auditor_attention |
first_author |
str |
first author of the primary linked paper |
last_author |
str |
last author |
n_authors |
int64 |
distinct author keys over linked papers |
n_author_papers |
int64 |
papers contributing authors |
organisations |
str |
;-joined organisation names (v1.2.1: submission ids, e-mail addresses, placeholders and single lowercase tokens removed; NCBI BioProject Organization preferred over ENA center_name for PRJNA studies) |
sp_median_scope |
str |
scope label of the medians (same vocabulary as sp_panel_scope) |
sp_n_samples_panel |
int64 |
rows in the panel scope |
sp_panel_scope |
str |
catalog_scope_adequate_depth (panel shown) · fallback:no_catalog_scope_samples · fallback:no_age_evidenced_profiled_samples · fallback:all_age_evidenced_profiled_samples_low_depth · no_profiled_samples — render the fallback text instead of a panel |
sp_coverage_note |
str |
set when rows are profiled only through runs registered under a sibling BioProject |
n_catalog_scope |
int64 |
rows with catalog_scope = True (age scope ∧ body-site scope) — the headline denominator |
n_excluded_host_or_isolate |
int64 |
rows set to body_site_class = excluded by the v1.2.1 host/isolate rule (exclusion_reason_code not null) |
n_body_site_excluded |
int64 |
rows with body_site_class = excluded |
n_run_units |
int64 |
run-unit rows (one BioSample per infant, one run per stool) |
n_parent_biosamples |
int64 |
parent BioSamples of the run units (listed in parent_biosamples.parquet, counted nowhere else) |
shared_biosample_note |
object |
human-readable note for the five studies sharing BioSamples (F6) |
release_added |
string |
release in which this row first became visible (R<YYYY>.<n> or a pre-numbered package semver 1.0.0–1.2.2); pre-1.3.0 values are reconstructed — see DATA_DICTIONARY 'Release columns' |
release_retired |
string |
release that replaced/removed the row; null (empty in CSV) = current row |
package_added |
string |
semver of the data package in which the row first appeared |