test(gldzm): vet 18 grey-level-distance-zone features vs IBSI -> gldzm 35/36 - #386
Open
darkclad wants to merge 4 commits into
Open
test(gldzm): vet 18 grey-level-distance-zone features vs IBSI -> gldzm 35/36#386darkclad wants to merge 4 commits into
darkclad wants to merge 4 commits into
Conversation
added 3 commits
July 22, 2026 11:03
…m 35/36
17 3D features (3GLDZM_{SDE,LDE,LGLZE,HGLZE,SDLGLE,SDHGLE,LDLGLE,LDHGLE,GLNU,GLNUN,
ZDNU,ZDNUN,ZP,GLM,GLV,ZDV,ZDE}) plus 2D GLDZM_ZDV were regression, but their IBSI
oracle tests already existed and were wired (test_3d_gldzm_ibsi.h at 10% on the 3D
compat phantom; test_gldzm_ibsi.h for the 2D) and pass. Reconcile to vetted (ibsi).
3GLDZM_ZDM NOT promoted -- it is the only gldzm feature with no wired oracle test,
and adding one shows the reference table value (222) is very likely WRONG rather than
Nyxus: 3GLDZM_ZDV, the variance of the SAME zone-distance distribution, is 79.7 and
passes => std ~= 8.9, so a mean zone distance of 222 is impossible (distances are
bounded by ROI size), while Nyxus' mean 15.31 with variance 79.7 is self-consistent.
Deliberately not pinning Nyxus' own output as the oracle; flagged
suspected-bad-reference with candidate oracle MIRP, pending an independent GLDZM run
on the 3D compat phantom.
gldzm 17->35 of 36 vetted. Registry + regenerated coverage_report.md only; no test or
source change.
Self-correction to the previous commit on this branch. The 17 3D GLDZM features were promoted to vetted(ibsi) on the strength of the wired, passing tests in test_3d_gldzm_ibsi.h. That was wrong: those tests are a drift guard, not an oracle. Evidence: - The reference table `d3gldzm_GT` carries NO provenance (no tool/version/config), contrary to SPEC 6.4, and is not named like the genuine IBSI tables. - It is evaluated on the Nyxus coverage phantom ut_inten.nii, NOT the IBSI digital phantom, so IBSI consensus values cannot apply to it. - An independent MIRP GLDZM run (IBSI implementation; pyradiomics has no GLDZM) on the same phantom at the same discretisation (fbn n=64) disagrees on EVERY feature: LDE 11.23 vs 314, SDE 0.382 vs 0.0224, ZDV 3.25 vs 79.7, ZP 0.270 vs 0.47. So the 17 3D rows go back to regression with flag=unproven-reference and candidate oracle MIRP. Harness added offline: morph_oracle/mirp_gldzm_3d.py. Retained: 2D GLDZM_ZDV stays vetted(ibsi) -- test_gldzm_ibsi.h genuinely runs on the IBSI digital phantom (ibsi_phantom_z1..z4) with documented consensus values. 3GLDZM_ZDM: now established to have NO external oracle at all -- IBSI's GLDZM set has no zone-distance MEAN and MIRP emits only dzm_zd_var / dzm_zd_entr. Its 222 reference is unusable (no provenance; internally inconsistent with the same distribution's variance 79.7 => std ~8.9). Flagged no-external-oracle. gldzm: 17 -> 18 of 36 vetted (net +1, the 2D ZDV only). NOTE: test_3d_ngldm_ibsi.h has the SAME defect (`d3ngldm_GT`, no provenance, same phantom, MIRP disagrees on every feature) -- the 18 ngldm 3D promotions on branch main-ngldm need the same retraction.
Follow-up to the retraction in a9f79ad. Despite the "_ibsi" filename, the d3gldzm_GT table in test_3d_gldzm_ibsi.h has no recorded tool/version/config (SPEC 6.4 requires provenance for oracle goldens) and is evaluated on the Nyxus coverage phantom ut_inten.nii, NOT the IBSI digital phantom -- so IBSI consensus values cannot apply. Add a header documenting that, with the side-by-side MIRP comparison that disproves the oracle claim (LDE 314 vs 11.235, SDE 0.0224 vs 0.382, ZDV 79.7 vs 3.246, ZP 0.47 vs 0.270, ZDE 10.23 vs 7.505; MIRP GLDZM, fbn n=64, same phantom -- pyradiomics has no GLDZM). States explicitly that these tests are regression/drift guards and that features must NOT be promoted to vetted on the strength of them passing. Also records that 3GLDZM_ZDM has no counterpart anywhere: IBSI's GLDZM set defines no zone-distance mean and MIRP emits only dzm_zd_var / dzm_zd_entr. Comment-only; gldzm suite still 54/54.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
17 3D features (3GLDZM_{SDE,LDE,LGLZE,HGLZE,SDLGLE,SDHGLE,LDLGLE,LDHGLE,GLNU,GLNUN, ZDNU,ZDNUN,ZP,GLM,GLV,ZDV,ZDE}) plus 2D GLDZM_ZDV were regression, but their IBSI oracle tests already existed and were wired (test_3d_gldzm_ibsi.h at 10% on the 3D compat phantom; test_gldzm_ibsi.h for the 2D) and pass. Reconcile to vetted (ibsi).
3GLDZM_ZDM NOT promoted -- it is the only gldzm feature with no wired oracle test, and adding one shows the reference table value (222) is very likely WRONG rather than Nyxus: 3GLDZM_ZDV, the variance of the SAME zone-distance distribution, is 79.7 and passes => std ~= 8.9, so a mean zone distance of 222 is impossible (distances are bounded by ROI size), while Nyxus' mean 15.31 with variance 79.7 is self-consistent. Deliberately not pinning Nyxus' own output as the oracle; flagged suspected-bad-reference with candidate oracle MIRP, pending an independent GLDZM run on the 3D compat phantom.
gldzm 17->35 of 36 vetted. Registry + regenerated coverage_report.md only; no test or source change.