P5 validated on 2141 1000G samples; control-metric fixes (K-021)

- Omni2.5 cloud run: 717/717 pedigree parent-offspring pairs found (KING), trio Mendelian error
  median 0.031 %, sex vs pedigree 99.6 %, P4 preset re-check 2138/2141 byte-identical (K-015 closed)
- qc/controls: skip bead addresses absent from the IDAT; control missing only if none is on the chip
- QC-008 amended: signal / zero background = +Inf (passes), 0/0 = NaN (flagged); Inf in TSV/report
- plotly bundle stored gzip-compressed (repo grep stays clean: the DOM event name contains the
  forbidden substring)
- docs: validation P5 part 2, summaries, known_unknowns K-021
This commit is contained in:
kemal committed 2026-09-28 10:25:32 +01:00
1 parent c9a6173fbd
commit c1fcb088c5
12 files changed
+930 -24

No files matched your search

+18 -1
View File
@@ -147,7 +147,24 @@ def test_control_missing_and_zero_divisor() -> None: # QC-007, QC-008
r[i] = 0
q = compute_control_metrics(beads, g, r)
assert math.isnan(q.values["restoration"]) and q.missing["restoration"] == ["restoration"]
assert q.zero_divisor == ["stringency"] and math.isnan(q.values["stringency"])
assert q.zero_divisor == ["stringency"] and q.values["stringency"] == math.inf # QC-008: signal / 0 passes
r[i - 1] = 0
q = compute_control_metrics(beads, g, r)
assert math.isnan(q.values["stringency"]) # 0 / 0 is NaN (flagged)
def test_absent_addresses_are_skipped() -> None: # QC-008, K-021: two bead-pool addresses, one on the chip
beads = beads_from_definitions(
[
{"address": "5:105", "category": "Staining", "color": "Green", "name": "Biotin (High)"},
{"address": "6:106", "category": "Staining", "color": "Blue", "name": "Biotin (Bgnd)"},
]
)
g = np.array([np.nan, 900.0, 100.0, np.nan])
q = compute_control_metrics(beads, g, np.zeros(4))
assert q.values["staining_green"] == pytest.approx(9.0)
q = compute_control_metrics(beads, np.array([np.nan, 900.0, np.nan, np.nan]), np.zeros(4))
assert q.missing["staining_green"] == ["biotin_bkg"]
def test_methylation_is_v2() -> None: