@@ -109,7 +109,7 @@ public void applyTo(final PlausibilityMonitor monitor) {
109109 final PlausibilityCheck .RadiusContinuity chk = monitor .getLiveCheck (PlausibilityCheck .RadiusContinuity .class );
110110 if (chk != null ) chk .setMaxRatio (s .computedValue );
111111 }
112- case "Terminal branch length" -> {
112+ case "Terminal path length" -> {
113113 final PlausibilityCheck .TerminalBranchLength chk = monitor .getLiveCheck (PlausibilityCheck .TerminalBranchLength .class );
114114 if (chk != null ) chk .setMinLengthUm (s .computedValue );
115115 }
@@ -125,11 +125,11 @@ public void applyTo(final PlausibilityMonitor monitor) {
125125 final PlausibilityCheck .PathOverlap chk = monitor .getDeepCheck (PlausibilityCheck .PathOverlap .class );
126126 if (chk != null ) chk .setProximityUm (s .computedValue );
127127 }
128- case "Radius jumps" -> {
128+ case "Thickness jumps" -> {
129129 final PlausibilityCheck .RadiusJumps chk = monitor .getDeepCheck (PlausibilityCheck .RadiusJumps .class );
130130 if (chk != null ) chk .setMaxJumpRatio (s .computedValue );
131131 }
132- case "Radius monotonicity " -> {
132+ case "Thickness inversions " -> {
133133 final PlausibilityCheck .RadiusMonotonicity chk = monitor .getDeepCheck (PlausibilityCheck .RadiusMonotonicity .class );
134134 if (chk != null ) chk .setMinIncreasingRun ((int ) Math .round (s .computedValue ));
135135 }
@@ -313,7 +313,7 @@ private void calibrateTerminalBranchLength(final CalibrationResult result) {
313313 stats .addValue (path .getLength ());
314314 }
315315 }
316- addSummary (result , "Terminal branch length" , "Min. length" ,
316+ addSummary (result , "Terminal path length" , "Min. length" ,
317317 stats , lowerPercentile );
318318 }
319319
@@ -395,7 +395,7 @@ private void calibrateRadiusJumps(final CalibrationResult result) {
395395 }
396396 }
397397 }
398- addSummary (result , "Radius jumps" , "Max. jump ratio" ,
398+ addSummary (result , "Thickness jumps" , "Max. jump ratio" ,
399399 stats , upperPercentile );
400400 }
401401
@@ -418,7 +418,7 @@ private void calibrateRadiusMonotonicity(final CalibrationResult result) {
418418 if (runLength > 0 ) stats .addValue (runLength );
419419 }
420420 }
421- addSummary (result , "Radius monotonicity " , "Max. increasing run" ,
421+ addSummary (result , "Thickness inversions " , "Max. increasing run" ,
422422 stats , upperPercentile );
423423 }
424424
@@ -543,6 +543,11 @@ public static void save(final PlausibilityMonitor monitor, final File file,
543543 if (cr != null ) {
544544 entries .put ("constantRadii.enabled" , String .valueOf (cr .isEnabled ()));
545545 }
546+ final PlausibilityCheck .InterForkDistance ifd = monitor .getLiveCheck (PlausibilityCheck .InterForkDistance .class );
547+ if (ifd != null ) {
548+ entries .put ("interForkDistance.minDistance" , String .valueOf (ifd .getMinDistanceUm ()));
549+ entries .put ("interForkDistance.enabled" , String .valueOf (ifd .isEnabled ()));
550+ }
546551
547552 // Deep checks
548553 final PlausibilityCheck .PathOverlap po = monitor .getDeepCheck (PlausibilityCheck .PathOverlap .class );
@@ -565,6 +570,42 @@ public static void save(final PlausibilityMonitor monitor, final File file,
565570 entries .put ("signalQuality.minContrast" , String .valueOf (sq .getMinContrast ()));
566571 entries .put ("signalQuality.enabled" , String .valueOf (sq .isEnabled ()));
567572 }
573+ final PlausibilityCheck .UncertainTerminal ut = monitor .getDeepCheck (PlausibilityCheck .UncertainTerminal .class );
574+ if (ut != null ) {
575+ entries .put ("uncertainTerminal.minTipContrast" , String .valueOf (ut .getMinTipContrast ()));
576+ entries .put ("uncertainTerminal.tailNodes" , String .valueOf (ut .getTailNodes ()));
577+ entries .put ("uncertainTerminal.enabled" , String .valueOf (ut .isEnabled ()));
578+ }
579+ final PlausibilityCheck .IntensityValley iv = monitor .getDeepCheck (PlausibilityCheck .IntensityValley .class );
580+ if (iv != null ) {
581+ // Property key keeps the class-name root (intensityValley) for stability
582+ // even though the user-facing label was renamed to "Path signal quality dips".
583+ entries .put ("intensityValley.minProminence" , String .valueOf (iv .getMinProminence ()));
584+ entries .put ("intensityValley.enabled" , String .valueOf (iv .isEnabled ()));
585+ }
586+ final PlausibilityCheck .TerminalNearAncestor tna = monitor .getDeepCheck (PlausibilityCheck .TerminalNearAncestor .class );
587+ if (tna != null ) {
588+ entries .put ("terminalNearAncestor.maxProximity" , String .valueOf (tna .getMaxProximityUm ()));
589+ entries .put ("terminalNearAncestor.enabled" , String .valueOf (tna .isEnabled ()));
590+ }
591+ final PlausibilityCheck .BoundaryProximity bp = monitor .getDeepCheck (PlausibilityCheck .BoundaryProximity .class );
592+ if (bp != null ) {
593+ // Off by default and not exposed in the GUI; still serialized so scripts/presets can opt in.
594+ entries .put ("boundaryProximity.minVoxels" , String .valueOf (bp .getMinVoxelsFromBoundary ()));
595+ entries .put ("boundaryProximity.enabled" , String .valueOf (bp .isEnabled ()));
596+ }
597+ final PlausibilityCheck .ZExtentRatio ze = monitor .getDeepCheck (PlausibilityCheck .ZExtentRatio .class );
598+ if (ze != null ) {
599+ entries .put ("zExtentRatio.minRatio" , String .valueOf (ze .getMinRatio ()));
600+ entries .put ("zExtentRatio.enabled" , String .valueOf (ze .isEnabled ()));
601+ }
602+ final PlausibilityCheck .BundledPaths bd = monitor .getDeepCheck (PlausibilityCheck .BundledPaths .class );
603+ if (bd != null ) {
604+ entries .put ("bundledPaths.maxParallelAngle" , String .valueOf (bd .getMaxParallelAngleDeg ()));
605+ entries .put ("bundledPaths.minRunNodes" , String .valueOf (bd .getMinRunNodes ()));
606+ entries .put ("bundledPaths.proximity" , String .valueOf (bd .getProximityUm ()));
607+ entries .put ("bundledPaths.enabled" , String .valueOf (bd .isEnabled ()));
608+ }
568609
569610 // Monitor-level state
570611 entries .put ("monitor.enabled" , String .valueOf (monitor .isEnabled ()));
@@ -657,6 +698,11 @@ private static void applyProperties(final Properties props, final PlausibilityMo
657698 if (cr != null ) {
658699 setEnabled (props , "constantRadii.enabled" , cr ::setEnabled );
659700 }
701+ final PlausibilityCheck .InterForkDistance ifd = monitor .getLiveCheck (PlausibilityCheck .InterForkDistance .class );
702+ if (ifd != null ) {
703+ setDouble (props , "interForkDistance.minDistance" , ifd ::setMinDistanceUm );
704+ setEnabled (props , "interForkDistance.enabled" , ifd ::setEnabled );
705+ }
660706
661707 // Deep checks
662708 final PlausibilityCheck .PathOverlap po = monitor .getDeepCheck (PlausibilityCheck .PathOverlap .class );
@@ -679,6 +725,39 @@ private static void applyProperties(final Properties props, final PlausibilityMo
679725 setDouble (props , "signalQuality.minContrast" , sq ::setMinContrast );
680726 setEnabled (props , "signalQuality.enabled" , sq ::setEnabled );
681727 }
728+ final PlausibilityCheck .UncertainTerminal ut = monitor .getDeepCheck (PlausibilityCheck .UncertainTerminal .class );
729+ if (ut != null ) {
730+ setDouble (props , "uncertainTerminal.minTipContrast" , ut ::setMinTipContrast );
731+ setInt (props , "uncertainTerminal.tailNodes" , ut ::setTailNodes );
732+ setEnabled (props , "uncertainTerminal.enabled" , ut ::setEnabled );
733+ }
734+ final PlausibilityCheck .IntensityValley iv = monitor .getDeepCheck (PlausibilityCheck .IntensityValley .class );
735+ if (iv != null ) {
736+ setDouble (props , "intensityValley.minProminence" , iv ::setMinProminence );
737+ setEnabled (props , "intensityValley.enabled" , iv ::setEnabled );
738+ }
739+ final PlausibilityCheck .TerminalNearAncestor tna = monitor .getDeepCheck (PlausibilityCheck .TerminalNearAncestor .class );
740+ if (tna != null ) {
741+ setDouble (props , "terminalNearAncestor.maxProximity" , tna ::setMaxProximityUm );
742+ setEnabled (props , "terminalNearAncestor.enabled" , tna ::setEnabled );
743+ }
744+ final PlausibilityCheck .BoundaryProximity bp = monitor .getDeepCheck (PlausibilityCheck .BoundaryProximity .class );
745+ if (bp != null ) {
746+ setDouble (props , "boundaryProximity.minVoxels" , bp ::setMinVoxelsFromBoundary );
747+ setEnabled (props , "boundaryProximity.enabled" , bp ::setEnabled );
748+ }
749+ final PlausibilityCheck .ZExtentRatio ze = monitor .getDeepCheck (PlausibilityCheck .ZExtentRatio .class );
750+ if (ze != null ) {
751+ setDouble (props , "zExtentRatio.minRatio" , ze ::setMinRatio );
752+ setEnabled (props , "zExtentRatio.enabled" , ze ::setEnabled );
753+ }
754+ final PlausibilityCheck .BundledPaths bd = monitor .getDeepCheck (PlausibilityCheck .BundledPaths .class );
755+ if (bd != null ) {
756+ setDouble (props , "bundledPaths.maxParallelAngle" , bd ::setMaxParallelAngleDeg );
757+ setInt (props , "bundledPaths.minRunNodes" , bd ::setMinRunNodes );
758+ setDouble (props , "bundledPaths.proximity" , bd ::setProximityUm );
759+ setEnabled (props , "bundledPaths.enabled" , bd ::setEnabled );
760+ }
682761
683762 // Monitor-level state (only present in session files, not calibration presets)
684763 setEnabled (props , "monitor.enabled" , monitor ::setEnabled );
0 commit comments