P1 validated on 1000 Genomes Omni2.5 (2141 vendor GTCs + IDATs)
All 2141 vendor-written GTC v3 files match BeadArrayFiles field by field and re-encode byte-identically; all IDAT pairs parse; the 2.45M-locus BPM, dbv-7 EGT and CSV manifest agree with BeadArrayFiles and each other. Run on a self-destructing AWS spot instance (42 min, ~$0.20).
This commit is contained in:
1 parent
b012f74016
commit
fb1ff51b76
3 files changed
+73
-6
No files matched your search
+17
-4
@@ -37,6 +37,22 @@ Commands: `pytest tests/unit` (every CI run), `pytest tests/oracle -m "not slow"
|
||||
| Sample-sheet matrix EDGE-007 (27 cases) incl. 10 000 rows < 2 s (PERF-007) | synthetic | **pass** |
|
||||
| Locale independence of `inspect --json` (C, tr_TR, de_DE) | synthetic | **pass** |
|
||||
|
||||
## Large-scale run: 1000 Genomes Omni2.5 (AWS, 2026-09-27)
|
||||
|
||||
Self-destructing spot instance (`scripts/cloud/trial.sh`, m7g.4xlarge, 16 vCPU), run `run-20260927T183712Z`,
|
||||
summary in `P1_omni2141_summary.json`. 107 GB archive streamed from `s3://1000genomes` (extracted 170 GB) in
|
||||
22 min; validation 18 min; instance lifetime 42 min; cost ≈ $0.20.
|
||||
|
||||
| Criterion | Result |
|
||||
|---|---|
|
||||
| 2141 **vendor-written** GTCs (v3, AutoCall 1.6.2.2): every field equal to BeadArrayFiles | **2141/2141 EXACT** |
|
||||
| Same GTCs: read → write byte-identical | **2141/2141** |
|
||||
| 2141 IDAT pairs (BeadChip 4x10) parse and pair; MidBlock int32 | **2141/2141** |
|
||||
| BPM HumanOmni2.5-4v1-Multi_B (2 450 000 loci, 51 normalization bins) vs BeadArrayFiles | **EXACT** |
|
||||
| EGT (data block v7, 2 450 000 records) vs BeadArrayFiles: all θ/R means and SDs, N | **0 mismatches** |
|
||||
| BPM ↔ CSV consistency | **0 differences** |
|
||||
| GTC transforms per sample = BPM bins (51) | **pass** |
|
||||
|
||||
## Performance on the Pi (single thread, pure Python/NumPy)
|
||||
|
||||
| Operation | Time | Peak RSS |
|
||||
@@ -51,8 +67,5 @@ BPM/CSV parsing is the only slow step; it is a one-off per run and moves to Rust
|
||||
|
||||
## Not yet covered (needs the larger machine / later phases)
|
||||
|
||||
- GEO sweep of 254 genotyping IDAT series and the 1000 Genomes Omni2.5 set (plan §18 P1 wording) — P1 is
|
||||
validated on P0 data only; rerun `tests/oracle` after `scripts/fetch_data.sh p1`.
|
||||
- GTCs written by vendor software (only gtc2vcf-written GTCs are available locally); the 1000 Genomes Broad set
|
||||
contains vendor GTCs.
|
||||
- GEO sweep of 254 genotyping IDAT series (other chip generations, IDAT variants) — still open.
|
||||
- IN-027 (IDAT ↔ manifest coverage gate) is P2; the coverage computation is already exercised by a test.
|
||||
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"root": "/work/omni/data",
|
||||
"started": "2026-09-27T19:00:42Z",
|
||||
"n_gtc": 2141,
|
||||
"n_idat_pairs": 2141,
|
||||
"unpaired_idats": 0,
|
||||
"gtc_ok": 2141,
|
||||
"gtc_roundtrip_identical": 2141,
|
||||
"gtc_versions": [
|
||||
3
|
||||
],
|
||||
"gtc_autocall_versions": [
|
||||
"1.6.2.2"
|
||||
],
|
||||
"gtc_failures": [],
|
||||
"gtc_roundtrip_failures": [],
|
||||
"idat_ok": 2141,
|
||||
"idat_failures": [],
|
||||
"idat_midblock_itemsizes": [
|
||||
4
|
||||
],
|
||||
"idat_chip_types": [
|
||||
"BeadChip 4x10"
|
||||
],
|
||||
"bpm": {
|
||||
"num_loci": 2450000,
|
||||
"names": true,
|
||||
"snps": true,
|
||||
"chroms": true,
|
||||
"map_infos": true,
|
||||
"address_a": true,
|
||||
"assay_types": true,
|
||||
"normalization_lookups": true,
|
||||
"n_bins": 51
|
||||
},
|
||||
"egt": {
|
||||
"num_records": 2450000,
|
||||
"dbv": 7,
|
||||
"extra_floats": 15,
|
||||
"record_mismatches": 0
|
||||
},
|
||||
"bpm_csv_problems": [],
|
||||
"gtc_vs_bpm_num_snps": [
|
||||
2450000,
|
||||
2450000
|
||||
],
|
||||
"gtc_transforms_vs_bins": [
|
||||
51,
|
||||
51
|
||||
],
|
||||
"seconds": 1098.7,
|
||||
"passed": true
|
||||
}
|
||||
Reference in new issue
Block a user