beta r 0.99998 vs sesame 1.28.1 (max |dbeta| 0.011), detection calls 99.1% identical, noob within 0.5% median; replicate r 0.997; all 21 control metrics pass. Spec deviations recorded (5-field control lines, pOOBAH formula, minfi sheet keys). User guide section.
3.4 KiB
Changelog
Unreleased (v2)
Methylation control QC (simurg methyl qc, simurg methyl convert-manifest; MET-001 … MET-018): methylation
CSV manifests, the 21 control metrics, pOOBAH detection p-values, noob, linear/nonlinear dye bias, β and M-values,
summary tsv/xlsx/html with a β PCA, per-sample tables; methylation folders load in simurg qc report;
qc controls --array-type methylation. Checked against sesame (docs/validation/V2_methylation.md, K-026).
1.1.0 — 2026-09-28 (P9, P10)
Packaging (P10). scripts/build_dist.sh (sdist, pure wheel, manylinux_2_28 kernel wheels for x86_64 and
aarch64), Dockerfile, conda recipes (packaging/conda/). Verified on fresh x86_64 and aarch64 VMs: pip, Docker
and conda installs give identical outputs (docs/validation/P10.md). A closed stdout pipe now exits 141 silently
instead of reporting an internal error.
Performance (P9).
Optional compiled kernels rust/simurg-core (PyO3): fused GenCall calling and BAF/LRR, libm maps with CPython
semantics, normalization nearest-neighbour searches, BPM parser. Byte-identical outputs to the pure-Python paths
(SIMURG_PURE_PYTHON=1); 78–80 GSA samples/min per Graviton3 core (pure Python 30), manifest loading 4× faster.
Address coverage memoised per IDAT layout; worker state pickled once. bench/profile_genotype.py,
bench/scaling.py. Details and scaling limits: docs/validation/P9.md.
1.0.0 — 2026-09-28
First release: the v1.0 goals of the master plan (§1.1), built and validated phase by phase (P0–P8).
Formats (P1–P2). Readers for IDAT (plain or gzipped; encrypted v1 refused), BPM, CSV manifest, EGT, GTC v3–v5
and sample sheets; simurg inspect; raw X/Y assembly into a canonical Parquet model (simurg ingest, resumable).
Signal and calling (P3–P4). Per-bin affine normalization 1.2.0 and 1.1.2; GenCall-equivalent calling from an
EGT with GenCall score; θ/R, BAF, LRR, LogR deviation, GC10/GC50, intensity percentiles, sex (rules 1 and 2);
GTC v5/v3 writer (simurg genotype). Presets current and autocall-1.6.2.
QC (P5). Control-probe metrics, threshold profiles and YAML, two-axis sample status and flags,
BAF-regression contamination, KING-robust relatedness and Mendel errors, locus summary, threshold suggestion, a
self-contained HTML QC report with xlsx/csv table (simurg qc …).
Outputs (P6). Plus-strand harmonisation with an audit trail; per-sample VCF.gz + tabix or cohort BCF + CSI
(GT:GS:BAF:LRR, optional INFO and intensity fields, merged multi-probe sites, indels from SourceSeq, SNV+indel
merging, auxiliary MNV loci); PLINK 1 .bed and PLINK 2 .pgen; BAF/LRR bedGraph; final report and genotype matrix.
Testing (P7). simurg compare (EXACT/NEAR/DISCREPANCY/UNKNOWN per field and locus class, HTML dashboard) and a
nightly differential run against gtc2vcf, GTCtoVCF and vendor GTCs.
Validation (P8). 360 GSA arrays of 120 1000 Genomes individuals vs NYGC 30x WGS (concordance 0.9934) and GIAB HG001 (0.9985, non-ref F1 0.997); replicate concordance 0.9966. Vendor-equivalence: 2138/2141 Omni2.5 GTCs byte-identical, zero unexplained VCF/PLINK differences vs gtc2vcf, GTCtoVCF and plink2.
Documentation: docs/user_guide.md, examples/, docs/validation/P1.md … P8.md, docs/known_unknowns.md,
docs/messages.md.
Known limitations: needs an existing cluster file (training is v2); no CN/LOH/PGx yet; largest tested cohort 2141 samples; pure NumPy speed.