Skip to content

Add dosage and batch scoring with auditable migration checks - #2

Merged
DylanCosto merged 8 commits into
mainfrom
feature/scoring-workflows
Sep 30, 2026
Merged

DylanCosto merged 8 commits into
mainfrom
feature/scoring-workflows

Conversation

@DylanCosto

Copy link
Copy Markdown
Owner

pgsum previously required hard genotype calls and separate setup for each sample. This adds explicit GT/DS/GP scoring, streaming BCF input, Catalog-driven runs, preflight checks, and resumable sample-sheet batches. Quantitative inputs retain exact decimal contributions through single-sample and cohort storage; legacy genotype and cohort files remain readable.

Missingness reports rank consequential excluded terms and provide exact contribution bounds where the model and call evidence justify them. Cohort scoring now evicts decoded frames and shares ordered quantitative passes. The new compare command checks native, PLINK and pgsc_calc sums, reports identity/policy differences, and reconciles paired per-term exports.

Validation:

  • 130 tests pass locally on stable Rust and Rust 1.88, with one external HG002 test ignored. Formatting and clippy pass; stable checks were repeated before upload.
  • The uploaded repository tree exactly matches tested local commit 43d17ea (tree 7c69dc5ae8873e16ea7b8d7c69b21fe2ac239aa2).
  • Synthetic GT/DS/GP checks preserve exact outputs across thread counts. In the measured two-score, 65-sample GP workload, one-thread scoring memory fell from 731.5 to 132.5 MiB with nearly unchanged runtime; four-thread memory fell from 912.1 to 456.5 MiB with a runtime tradeoff.
  • Public chr22 validation runs 32 samples and two chromosome-restricted models through the unmodified pgsc_calc v2.3.0 scoring workflow and PLINK. All 64 shared-term scores agree within output-rounding tolerance; 853,312 native contributions match an independent Decimal reconstruction exactly. Default policies differ in 62/64 sums, primarily because of overlapping-record exclusions, and every gap is reconciled.

The public check covers GT-only chr22 partial contributions, not complete PGS values, whole-genome gVCF performance, dosage concordance or ancestry calibration. GRCh37, PGEN/BGEN, multiallelic/non-diploid DS/GP, a total-process memory budget, packaging and PCA-based ancestry normalization remain future work. The decoded-frame cache target is not a total RAM cap. See docs/public-validation.md and docs/implementation-roadmap.md for evidence and limits. No release tag is included.

@DylanCosto
DylanCosto merged commit 74ecb0a into main Sep 30, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant