Spaces:
Sleeping
Sleeping
| """Print the Day-1 gate summary: the spec, control-vs-failure counts, and label distribution.""" | |
| from __future__ import annotations | |
| import json | |
| from pathlib import Path | |
| from seqcolyte.spec.loader import load_spec | |
| _REPO = Path(__file__).resolve().parents[1] | |
| def main() -> int: | |
| spec = load_spec(_REPO / "spec" / "10x_3p_v3.json") | |
| bar = "=" * 72 | |
| print(bar) | |
| print("SEQCOLYTE — Day 1 gate summary") | |
| print(bar) | |
| print(f"Spec: {spec.spec_id} ({spec.assay}, {spec.chemistry_version}, {spec.platform})") | |
| print(f" oligos: {len(spec.oligos)} source_html_sha256: {spec.data['build']['source_html_sha256'][:16]}…") | |
| for r in spec.reads: | |
| segs = ", ".join(f"{s['name']}({s.get('length', s.get('length_range'))})" for s in r["segments"]) | |
| chain = " -> readthrough_chain: " + "|".join(e["name"] for e in r.get("readthrough_chain", [])) \ | |
| if r.get("readthrough_chain") else "" | |
| print(f" {r['read']} [{r['cycles']} cyc]: {segs}{chain}") | |
| wl = spec.whitelist("cell_barcode_3M_feb2018") | |
| print(f" whitelist: {wl['name']} — {wl['count']:,} x {wl['length']} bp") | |
| sp = _REPO / "data" / "raw" / "sanity.json" | |
| if sp.exists(): | |
| s = json.loads(sp.read_text()) | |
| print(f"\nControl sanity: R1 len {s['r1']['min']}–{s['r1']['max']} (n={s['r1']['n']:,}), " | |
| f"whitelist hit-rate {s['whitelist_hit_rate']:.3f} -> {'PASS' if s['passed'] else 'FAIL'}") | |
| mp = _REPO / "data" / "sim" / "adapter_dimer_f30" / "run.json" | |
| if mp.exists(): | |
| m = json.loads(mp.read_text()) | |
| print(f"\nFailure sim: {m['name']} (seed={m['seed']}, mode={m['failure_mode']}, {m['n_pairs']:,} pairs)") | |
| for k in ("clean", "readthrough", "pure_dimer"): | |
| print(f" {k:12} {m['label_counts'].get(k, 0):8,} ({m['label_fractions'].get(k, 0):.1%})") | |
| print(f" R1 output byte-identical to control R1: {m['r1_byte_identical']}") | |
| print(bar) | |
| return 0 | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) | |