P4 validated on 2141 vendor GTCs; legacy AutoCall 1.6.2 preset
ci / test (3.12) (push) Failing after 8s
ci / test (3.13) (push) Failing after 9s

- vendor comparison (1000 Genomes Omni2.5, AutoCall 1.6.2.2): every
  computed field identical in 2138/2141 samples; the 3 others trace back
  to the single-locus raw-intensity rule (K-009); sex rule 1 matches all
- AutoCall 1.6.2.x leaves GC10/GC50/#calls/#no-calls at 0 in GTC v3:
  new `--preset autocall-1.6.2` (1.1.2 normalization, sex rule 1, GTC v3,
  legacy statistics); the sample summary keeps the real statistics
- NaN sign canonicalised to the x86 pattern (K-014); report P4.md

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01814GKVzZVL3FuF3DeiZXhv
This commit is contained in:
kemalandClaude Opus 5.5 committed 2026-09-28 01:21:49 +01:00
1 parent eb19ac7f91
commit 8b1e5d8dab
9 files changed
+792 -29

No files matched your search

+19 -5
View File
@@ -284,9 +284,18 @@ def genotype_cmd(
sheet: Annotated[Path | None, typer.Option("--sheet", help="Sample sheet (CSV).")] = None,
csv: Annotated[Path | None, typer.Option("--csv", help="CSV manifest, checked against the BPM.")] = None,
cutoff: Annotated[float, typer.Option("--cutoff", help="GenCall score below which a call is a no-call.")] = 0.15,
norm_version: Annotated[str, typer.Option("--norm-version", help="1.2.0 (current) or 1.1.2")] = "1.2.0",
sex_version: Annotated[int, typer.Option("--sex-version", min=1, max=2, help="Sex estimate rule (1 or 2).")] = 2,
gtc_version: Annotated[int, typer.Option("--gtc-version", help="GTC format version (3 or 5).")] = 5,
preset: Annotated[
str, typer.Option("--preset", help="current (default) or autocall-1.6.2 (legacy vendor behaviour)")
] = "current",
norm_version: Annotated[
str | None, typer.Option("--norm-version", help="1.2.0 or 1.1.2 (default: from --preset)")
] = None,
sex_version: Annotated[
int | None, typer.Option("--sex-version", min=1, max=2, help="Sex estimate rule 1 or 2 (default: preset)")
] = None,
gtc_version: Annotated[
int | None, typer.Option("--gtc-version", help="GTC format 3 or 5 (default: preset)")
] = None,
autocall_date: Annotated[
str | None, typer.Option("--autocall-date", help="Fixed value for GTC field 201 (reproducible output).")
] = None,
@@ -303,9 +312,13 @@ def genotype_cmd(
if layout not in ("nested", "flat"):
raise typer.BadParameter("--layout must be nested or flat")
if gtc_version not in (3, 5):
from simurg.genotype.sample import PRESETS
if preset not in PRESETS:
raise typer.BadParameter(f"--preset must be one of {sorted(PRESETS)}")
if gtc_version not in (None, 3, 5):
raise typer.BadParameter("--gtc-version must be 3 or 5")
if norm_version not in ("1.2.0", "1.1.2"):
if norm_version not in (None, "1.2.0", "1.1.2"):
raise typer.BadParameter("--norm-version must be 1.2.0 or 1.1.2")
rep = Reporter(
command="genotype",
@@ -327,6 +340,7 @@ def genotype_cmd(
layout=layout,
on_duplicate_idat=on_duplicate_idat,
cutoff=cutoff,
preset=preset,
norm_version=norm_version,
sex_version=sex_version,
gtc_version=gtc_version,