Source code for phenotypic.schema._orientation_zones

"""Public header schema for MeasureOrientationZones (category ``OrientZones``).

Existing absolute-orientation headers use
``OrientZones_<Metric>-<Variant>-<Zone>``. Radial-relative headers use the
detected-structure selector explicitly:
``OrientZones_<Metric>-Mask-<Region>``. Region is usually one of
{Overall, Dense, Sparse}; longer-range rotation also includes the paired
DenseToSparse transition.
"""

from __future__ import annotations

from ._measurement_info import Entry
from ._tiers import DescriptiveTrait, QualityInfo


[docs] class ORIENTATION_ZONE_PRIMARY(DescriptiveTrait): """Primary full-length outward-rotation traits by radial zone."""
[docs] @classmethod def category(cls) -> str: return "OrientZones"
OUTWARD_ROTATION_SUSTAINED_PEAK_OVERALL = Entry( "OutwardRotationSustainedPeak-Mask-Overall", "Largest rolling-median absolute cumulative rotation across consecutive " "supported literal skeleton-ring crossings from the inferred inoculum " "boundary through the full detected object extent. Reported in degrees, " "nonnegative with no fixed upper bound. The default three-ring window " "rejects a one-ring spike; NaN means no complete supported window.", ) OUTWARD_ROTATION_SUSTAINED_PEAK_DENSE = Entry( "OutwardRotationSustainedPeak-Mask-Dense", "Largest rolling-median absolute cumulative rotation across consecutive " "supported literal skeleton-ring crossings from the inferred inoculum " "boundary to dense_end. Reported in degrees, nonnegative with no fixed " "upper bound. The default three-ring window rejects a one-ring spike; " "NaN means no complete supported window.", ) OUTWARD_ROTATION_SUSTAINED_PEAK_SPARSE = Entry( "OutwardRotationSustainedPeak-Mask-Sparse", "Largest rolling-median absolute cumulative rotation across consecutive " "supported literal skeleton-ring crossings from dense_end through the " "full detected object extent. Reported in degrees, nonnegative with no " "fixed upper bound. The default three-ring window rejects a one-ring " "spike; NaN means no complete supported window. Cumulative rotation is " "not rebased at dense_end, so this Sparse magnitude may include rotation " "accumulated while the profile was in Dense.", ) OUTWARD_ROTATION_NET_OVERALL = Entry( "OutwardRotationNet-Mask-Overall", "Outer endpoint median minus inner endpoint median of cumulative literal " "skeleton-ring rotation along the longest supported run from the inferred " "inoculum boundary through the full detected object extent. Reported in " "signed degrees with no fixed bounds; positive is clockwise and negative " "is counterclockwise while moving outward in image coordinates. NaN means " "the run is shorter than the configured minimum.", ) OUTWARD_ROTATION_NET_DENSE = Entry( "OutwardRotationNet-Mask-Dense", "Outer endpoint median minus inner endpoint median of cumulative literal " "skeleton-ring rotation along the longest supported run from the inferred " "inoculum boundary to dense_end. Reported in signed degrees with no fixed " "bounds; positive is clockwise and negative is counterclockwise while " "moving outward in image coordinates. NaN means the run is shorter than " "the configured minimum.", ) OUTWARD_ROTATION_NET_SPARSE = Entry( "OutwardRotationNet-Mask-Sparse", "Outer endpoint median minus inner endpoint median of cumulative literal " "skeleton-ring rotation along the longest supported run from dense_end " "through the full detected object extent. Reported in signed degrees with " "no fixed bounds; positive is clockwise and negative is counterclockwise " "while moving outward in image coordinates. NaN means the run is shorter " "than the configured minimum. Because this is a difference, cumulative " "rotation carried into Sparse cancels from the result.", ) OUTWARD_ROTATION_RATE_OVERALL = Entry( "OutwardRotationRate-Mask-Overall", "Median of all pairwise cumulative-rotation slopes along the longest " "supported literal skeleton-ring run from the inferred inoculum boundary " "through the full detected object extent. Reported in signed degrees per " "pixel; positive is clockwise and negative is counterclockwise while " "moving outward in image coordinates. NaN means the run is shorter than " "the configured minimum.", ) OUTWARD_ROTATION_RATE_DENSE = Entry( "OutwardRotationRate-Mask-Dense", "Median of all pairwise cumulative-rotation slopes along the longest " "supported literal skeleton-ring run from the inferred inoculum boundary " "to dense_end. Reported in signed degrees per pixel; positive is clockwise " "and negative is counterclockwise while moving outward in image " "coordinates. NaN means the run is shorter than the configured minimum.", ) OUTWARD_ROTATION_RATE_SPARSE = Entry( "OutwardRotationRate-Mask-Sparse", "Median of all pairwise cumulative-rotation slopes along the longest " "supported literal skeleton-ring run from dense_end through the full " "detected object extent. Reported in signed degrees per pixel; positive " "is clockwise and negative is counterclockwise while moving outward in " "image coordinates. NaN means the run is shorter than the configured " "minimum. The slope is unchanged by cumulative rotation carried into " "Sparse.", ) OUTWARD_ROTATION_CONSISTENCY_OVERALL = Entry( "OutwardRotationConsistency-Mask-Overall", "Absolute Kendall tau-b association between radius and cumulative literal " "skeleton-ring rotation along the longest supported run from the inferred " "inoculum boundary through the full detected object extent. Dimensionless " "in [0, 1]; 1 is fully monotonic and values near 0 indicate reversals, " "plateaus, or no ordered trend. Direction is carried by the rotation " "rate. NaN means the run is shorter than the configured minimum.", ) OUTWARD_ROTATION_CONSISTENCY_DENSE = Entry( "OutwardRotationConsistency-Mask-Dense", "Absolute Kendall tau-b association between radius and cumulative literal " "skeleton-ring rotation along the longest supported run from the inferred " "inoculum boundary to dense_end. Dimensionless in [0, 1]; 1 is fully " "monotonic and values near 0 indicate reversals, plateaus, or no ordered " "trend. Direction is carried by the rotation rate. NaN means the run is " "shorter than the configured minimum.", ) OUTWARD_ROTATION_CONSISTENCY_SPARSE = Entry( "OutwardRotationConsistency-Mask-Sparse", "Absolute Kendall tau-b association between radius and cumulative literal " "skeleton-ring rotation along the longest supported run from dense_end " "through the full detected object extent. Dimensionless in [0, 1]; 1 is " "fully monotonic and values near 0 indicate reversals, plateaus, or no " "ordered trend. Direction is carried by the rotation rate, and the rank " "association is unchanged by rotation carried into Sparse. NaN means the " "run is shorter than the configured minimum.", )
[docs] class ORIENTATION_ZONE_DIAGNOSTIC(QualityInfo): """Opt-in validation, comparator, and legacy orientation-zone columns. The literal skeleton-ring diagnostics use the detected-object mask from the inferred inoculum boundary through the full object extent. The retained legacy field diagnostics use the structure-tensor field in symmetric-radius zones and include ``Radial`` (all tile pixels) and ``Mask`` variants. See :class:`MeasureOrientationZones` for parameters and method. """
[docs] @classmethod def category(cls) -> str: return "OrientZones"
OUTWARD_ROTATION_RAW_PEAK_OVERALL = Entry( "OutwardRotationRawPeak-Mask-Overall", "Largest absolute cumulative literal skeleton-ring rotation from the " "inferred inoculum boundary through the full detected object extent. " "Reported in degrees, nonnegative with no fixed upper bound. This raw " "maximum is outlier-sensitive and should be compared with the primary " "sustained peak.", ) OUTWARD_ROTATION_RAW_PEAK_DENSE = Entry( "OutwardRotationRawPeak-Mask-Dense", "Largest absolute cumulative literal skeleton-ring rotation from the " "inferred inoculum boundary to dense_end. Reported in degrees, " "nonnegative with no fixed upper bound. This raw maximum is " "outlier-sensitive and should be compared with the primary sustained " "peak.", ) OUTWARD_ROTATION_RAW_PEAK_SPARSE = Entry( "OutwardRotationRawPeak-Mask-Sparse", "Largest absolute cumulative literal skeleton-ring rotation from " "dense_end through the full detected object extent. Reported in degrees, " "nonnegative with no fixed upper bound. This raw maximum is " "outlier-sensitive. Cumulative rotation is not rebased at dense_end, so " "this Sparse magnitude may include rotation accumulated while the profile " "was in Dense.", ) OUTWARD_ROTATION_P90_OVERALL = Entry( "OutwardRotationP90-Mask-Overall", "90th percentile of absolute cumulative literal skeleton-ring rotation " "over supported rings from the inferred inoculum boundary through the " "full detected object extent. Reported in degrees, nonnegative with no " "fixed upper bound. This validation comparator ignores radial order.", ) OUTWARD_ROTATION_P90_DENSE = Entry( "OutwardRotationP90-Mask-Dense", "90th percentile of absolute cumulative literal skeleton-ring rotation " "over supported rings from the inferred inoculum boundary to dense_end. " "Reported in degrees, nonnegative with no fixed upper bound. This " "validation comparator ignores radial order.", ) OUTWARD_ROTATION_P90_SPARSE = Entry( "OutwardRotationP90-Mask-Sparse", "90th percentile of absolute cumulative literal skeleton-ring rotation " "over supported rings from dense_end through the full detected object " "extent. Reported in degrees, nonnegative with no fixed upper bound. This " "comparator ignores radial order. Cumulative rotation is not rebased at " "dense_end, so this Sparse magnitude may include rotation accumulated " "while the profile was in Dense.", ) OUTWARD_ROTATION_P95_OVERALL = Entry( "OutwardRotationP95-Mask-Overall", "95th percentile of absolute cumulative literal skeleton-ring rotation " "over supported rings from the inferred inoculum boundary through the " "full detected object extent. Reported in degrees, nonnegative with no " "fixed upper bound. With few supported rings it remains close to the raw " "maximum and is not the primary robust metric.", ) OUTWARD_ROTATION_P95_DENSE = Entry( "OutwardRotationP95-Mask-Dense", "95th percentile of absolute cumulative literal skeleton-ring rotation " "over supported rings from the inferred inoculum boundary to dense_end. " "Reported in degrees, nonnegative with no fixed upper bound. With few " "supported rings it remains close to the raw maximum.", ) OUTWARD_ROTATION_P95_SPARSE = Entry( "OutwardRotationP95-Mask-Sparse", "95th percentile of absolute cumulative literal skeleton-ring rotation " "over supported rings from dense_end through the full detected object " "extent. Reported in degrees, nonnegative with no fixed upper bound. " "Cumulative rotation is not rebased at dense_end, so this Sparse " "magnitude may include rotation accumulated while the profile was in " "Dense.", ) OUTWARD_ROTATION_MEDIAN_MAGNITUDE_OVERALL = Entry( "OutwardRotationMedianMagnitude-Mask-Overall", "Median absolute cumulative literal skeleton-ring rotation over supported " "rings from the inferred inoculum boundary through the full detected " "object extent. Reported in degrees, nonnegative with no fixed upper " "bound. This validation comparator describes typical magnitude but " "ignores radial order and localized outer turns.", ) OUTWARD_ROTATION_MEDIAN_MAGNITUDE_DENSE = Entry( "OutwardRotationMedianMagnitude-Mask-Dense", "Median absolute cumulative literal skeleton-ring rotation over supported " "rings from the inferred inoculum boundary to dense_end. Reported in " "degrees, nonnegative with no fixed upper bound. This validation " "comparator describes typical magnitude but ignores radial order.", ) OUTWARD_ROTATION_MEDIAN_MAGNITUDE_SPARSE = Entry( "OutwardRotationMedianMagnitude-Mask-Sparse", "Median absolute cumulative literal skeleton-ring rotation over supported " "rings from dense_end through the full detected object extent. Reported " "in degrees, nonnegative with no fixed upper bound. Cumulative rotation " "is not rebased at dense_end, so this Sparse magnitude may include " "rotation accumulated while the profile was in Dense.", ) OUTWARD_ROTATION_ABSOLUTE_AREA_OVERALL = Entry( "OutwardRotationAbsoluteArea-Mask-Overall", "Trapezoidal area under absolute cumulative rotation within supported " "runs from the inferred inoculum boundary through the full detected " "object extent, divided by their total supported radial span. Reported " "in degrees, nonnegative with no fixed upper bound. It describes " "radially persistent rotation but can remain high after one early step.", ) OUTWARD_ROTATION_ABSOLUTE_AREA_DENSE = Entry( "OutwardRotationAbsoluteArea-Mask-Dense", "Trapezoidal area under absolute cumulative rotation within supported " "runs from the inferred inoculum boundary to dense_end, divided by their " "total supported radial span. Reported in degrees, nonnegative with no " "fixed upper bound. It describes radially persistent rotation but can " "remain high after one early step.", ) OUTWARD_ROTATION_ABSOLUTE_AREA_SPARSE = Entry( "OutwardRotationAbsoluteArea-Mask-Sparse", "Trapezoidal area under absolute cumulative rotation within supported " "runs from dense_end through the full detected object extent, divided by " "their total supported radial span. Reported in degrees, nonnegative with " "no fixed upper bound. Cumulative rotation is not rebased at dense_end, " "so this Sparse magnitude may include rotation accumulated while the " "profile was in Dense.", ) OUTWARD_ROTATION_TOTAL_VARIATION_OVERALL = Entry( "OutwardRotationTotalVariation-Mask-Overall", "Sum of absolute adjacent cumulative-rotation changes within supported " "runs from the inferred inoculum boundary through the full detected " "object extent, without bridging gaps. Reported in degrees, nonnegative " "with no fixed upper bound. It is sensitive to oscillation, profile " "length, and noise and is diagnostic only.", ) OUTWARD_ROTATION_TOTAL_VARIATION_DENSE = Entry( "OutwardRotationTotalVariation-Mask-Dense", "Sum of absolute adjacent cumulative-rotation changes within supported " "runs from the inferred inoculum boundary to dense_end, without bridging " "gaps. Reported in degrees, nonnegative with no fixed upper bound. It is " "sensitive to oscillation, profile length, and noise and is diagnostic " "only.", ) OUTWARD_ROTATION_TOTAL_VARIATION_SPARSE = Entry( "OutwardRotationTotalVariation-Mask-Sparse", "Sum of absolute adjacent cumulative-rotation changes within supported " "runs from dense_end through the full detected object extent, without " "bridging gaps. Reported in degrees, nonnegative with no fixed upper " "bound. It is sensitive to oscillation, profile length, and noise and is " "diagnostic only.", ) OUTWARD_ROTATION_RATE_GRADIENT_OVERALL = Entry( "OutwardRotationRateGradient-Mask-Overall", "Outer-half robust rotation rate minus inner-half robust rotation rate, " "divided by the separation of their median radii, along the longest " "supported run from the inferred inoculum boundary through the full " "detected object extent. Reported in signed degrees per pixel squared. " "This is a spatial rate gradient, not temporal acceleration, and is NaN " "unless the run meets both the configured minimum and eight rings.", ) OUTWARD_ROTATION_RATE_GRADIENT_DENSE = Entry( "OutwardRotationRateGradient-Mask-Dense", "Outer-half robust rotation rate minus inner-half robust rotation rate, " "divided by the separation of their median radii, along the longest " "supported run from the inferred inoculum boundary to dense_end. Reported " "in signed degrees per pixel squared. This is a spatial rate gradient, " "not temporal acceleration, and is NaN unless the run meets both the " "configured minimum and eight rings.", ) OUTWARD_ROTATION_RATE_GRADIENT_SPARSE = Entry( "OutwardRotationRateGradient-Mask-Sparse", "Outer-half robust rotation rate minus inner-half robust rotation rate, " "divided by the separation of their median radii, along the longest " "supported run from dense_end through the full detected object extent. " "Reported in signed degrees per pixel squared. This is a spatial rate " "gradient, not temporal acceleration, and is NaN for runs shorter than " "the larger of eight rings and the configured minimum.", ) OUTWARD_ROTATION_RING_SUPPORT_OVERALL = Entry( "OutwardRotationRingSupport-Mask-Overall", "Fraction of candidate literal sampling rings from the inferred inoculum " "boundary through the full detected object extent with a finite " "cumulative-rotation state. Dimensionless in [0, 1]. This is a " "density-sensitive quality diagnostic, not an orientation phenotype.", ) OUTWARD_ROTATION_RING_SUPPORT_DENSE = Entry( "OutwardRotationRingSupport-Mask-Dense", "Fraction of candidate literal sampling rings from the inferred inoculum " "boundary to dense_end with a finite cumulative-rotation state. " "Dimensionless in [0, 1]. This is a density-sensitive quality diagnostic, " "not an orientation phenotype.", ) OUTWARD_ROTATION_RING_SUPPORT_SPARSE = Entry( "OutwardRotationRingSupport-Mask-Sparse", "Fraction of candidate literal sampling rings from dense_end through the " "full detected object extent with a finite cumulative-rotation state. " "Dimensionless in [0, 1]. This is a density-sensitive quality diagnostic, " "not an orientation phenotype.", ) OUTWARD_ROTATION_RUN_SPAN_SUPPORT_OVERALL = Entry( "OutwardRotationRunSpanSupport-Mask-Overall", "Radial span of the longest contiguous supported literal-crossing run " "divided by the full candidate span from the inferred inoculum boundary " "through the full detected object extent. Dimensionless in [0, 1]. This " "reports continuity of usable evidence, not orientation.", ) OUTWARD_ROTATION_RUN_SPAN_SUPPORT_DENSE = Entry( "OutwardRotationRunSpanSupport-Mask-Dense", "Radial span of the longest contiguous supported literal-crossing run " "divided by the full candidate span from the inferred inoculum boundary " "to dense_end. Dimensionless in [0, 1]. This reports continuity of usable " "evidence, not orientation.", ) OUTWARD_ROTATION_RUN_SPAN_SUPPORT_SPARSE = Entry( "OutwardRotationRunSpanSupport-Mask-Sparse", "Radial span of the longest contiguous supported literal-crossing run " "divided by the full candidate span from dense_end through the full " "detected object extent. Dimensionless in [0, 1]. This reports continuity " "of usable evidence, not orientation.", ) OUTWARD_ROTATION_MEDIAN_RESULTANT_OVERALL = Entry( "OutwardRotationMedianResultant-Mask-Overall", "Median doubled-angle resultant of crossing orientations among eligible " "literal rings from the inferred inoculum boundary through the full " "detected object extent. Dimensionless in [0, 1]; larger values mean " "stronger within-ring axial agreement. This is an orientation-reliability " "diagnostic, not a rotation phenotype.", ) OUTWARD_ROTATION_MEDIAN_RESULTANT_DENSE = Entry( "OutwardRotationMedianResultant-Mask-Dense", "Median doubled-angle resultant of crossing orientations among eligible " "literal rings from the inferred inoculum boundary to dense_end. " "Dimensionless in [0, 1]; larger values mean stronger within-ring axial " "agreement. This is an orientation-reliability diagnostic, not a rotation " "phenotype.", ) OUTWARD_ROTATION_MEDIAN_RESULTANT_SPARSE = Entry( "OutwardRotationMedianResultant-Mask-Sparse", "Median doubled-angle resultant of crossing orientations among eligible " "literal rings from dense_end through the full detected object extent. " "Dimensionless in [0, 1]; larger values mean stronger within-ring axial " "agreement. This is an orientation-reliability diagnostic, not a rotation " "phenotype.", ) CONCENTRATION_RADIAL_OVERALL = Entry( "Concentration-Radial-Overall", "Coherence-weighted resultant length R of the doubled-angle orientation field " "over all tile pixels in the full symmetric disk (0 .. symmetric_radius) " "region. Dimensionless in [0, 1]; 1 = perfectly aligned hyphae, 0 = " "isotropic. NaN when the summed coherence over the selector is ~0 or the zone " "has zero width.", ) CONCENTRATION_RADIAL_DENSE = Entry( "Concentration-Radial-Dense", "Coherence-weighted resultant length R of the doubled-angle orientation field " "over all tile pixels in the dense ring (core_end .. dense_end radii) region. " "Dimensionless in [0, 1]; 1 = perfectly aligned hyphae, 0 = isotropic. NaN " "when the summed coherence over the selector is ~0 or the zone has zero " "width.", ) CONCENTRATION_RADIAL_SPARSE = Entry( "Concentration-Radial-Sparse", "Coherence-weighted resultant length R of the doubled-angle orientation field " "over all tile pixels in the sparse ring (dense_end .. sparse_end radii) " "region. Dimensionless in [0, 1]; 1 = perfectly aligned hyphae, 0 = " "isotropic. NaN when the summed coherence over the selector is ~0 or the zone " "has zero width.", ) CONCENTRATION_MASK_OVERALL = Entry( "Concentration-Mask-Overall", "Coherence-weighted resultant length R of the doubled-angle orientation field " "over detected-object pixels in the full symmetric disk (0 .. " "symmetric_radius) region. Dimensionless in [0, 1]; 1 = perfectly aligned " "hyphae, 0 = isotropic. NaN when the summed coherence over the selector is ~0 " "or the zone has zero width.", ) CONCENTRATION_MASK_DENSE = Entry( "Concentration-Mask-Dense", "Coherence-weighted resultant length R of the doubled-angle orientation field " "over detected-object pixels in the dense ring (core_end .. dense_end radii) " "region. Dimensionless in [0, 1]; 1 = perfectly aligned hyphae, 0 = " "isotropic. NaN when the summed coherence over the selector is ~0 or the zone " "has zero width.", ) CONCENTRATION_MASK_SPARSE = Entry( "Concentration-Mask-Sparse", "Coherence-weighted resultant length R of the doubled-angle orientation field " "over detected-object pixels in the sparse ring (dense_end .. sparse_end " "radii) region. Dimensionless in [0, 1]; 1 = perfectly aligned hyphae, 0 = " "isotropic. NaN when the summed coherence over the selector is ~0 or the zone " "has zero width.", ) TURNING_RADIAL_OVERALL = Entry( "Turning-Radial-Overall", "Coherence-weighted mean orientation-gradient magnitude <|grad phi|> over all " "tile pixels in the full symmetric disk (0 .. symmetric_radius) region, in " "degrees per pixel. Higher values indicate curving/fanning hyphae; ~0 " "indicates straight parallel growth.", ) TURNING_RADIAL_DENSE = Entry( "Turning-Radial-Dense", "Coherence-weighted mean orientation-gradient magnitude <|grad phi|> over all " "tile pixels in the dense ring (core_end .. dense_end radii) region, in " "degrees per pixel. Higher values indicate curving/fanning hyphae; ~0 " "indicates straight parallel growth.", ) TURNING_RADIAL_SPARSE = Entry( "Turning-Radial-Sparse", "Coherence-weighted mean orientation-gradient magnitude <|grad phi|> over all " "tile pixels in the sparse ring (dense_end .. sparse_end radii) region, in " "degrees per pixel. Higher values indicate curving/fanning hyphae; ~0 " "indicates straight parallel growth.", ) TURNING_MASK_OVERALL = Entry( "Turning-Mask-Overall", "Coherence-weighted mean orientation-gradient magnitude <|grad phi|> over " "detected-object pixels in the full symmetric disk (0 .. symmetric_radius) " "region, in degrees per pixel. Higher values indicate curving/fanning hyphae; " "~0 indicates straight parallel growth.", ) TURNING_MASK_DENSE = Entry( "Turning-Mask-Dense", "Coherence-weighted mean orientation-gradient magnitude <|grad phi|> over " "detected-object pixels in the dense ring (core_end .. dense_end radii) " "region, in degrees per pixel. Higher values indicate curving/fanning hyphae; " "~0 indicates straight parallel growth.", ) TURNING_MASK_SPARSE = Entry( "Turning-Mask-Sparse", "Coherence-weighted mean orientation-gradient magnitude <|grad phi|> over " "detected-object pixels in the sparse ring (dense_end .. sparse_end radii) " "region, in degrees per pixel. Higher values indicate curving/fanning hyphae; " "~0 indicates straight parallel growth.", ) COHERENCE_RADIAL_OVERALL = Entry( "Coherence-Radial-Overall", "Mean structure-tensor coherence C over all tile pixels in the full symmetric " "disk (0 .. symmetric_radius) region. Dimensionless in [0, 1]; a " "confidence/QC readout for how well orientation is defined there (low where " "texture is isotropic).", ) COHERENCE_RADIAL_DENSE = Entry( "Coherence-Radial-Dense", "Mean structure-tensor coherence C over all tile pixels in the dense ring " "(core_end .. dense_end radii) region. Dimensionless in [0, 1]; a " "confidence/QC readout for how well orientation is defined there (low where " "texture is isotropic).", ) COHERENCE_RADIAL_SPARSE = Entry( "Coherence-Radial-Sparse", "Mean structure-tensor coherence C over all tile pixels in the sparse ring " "(dense_end .. sparse_end radii) region. Dimensionless in [0, 1]; a " "confidence/QC readout for how well orientation is defined there (low where " "texture is isotropic).", ) COHERENCE_MASK_OVERALL = Entry( "Coherence-Mask-Overall", "Mean structure-tensor coherence C over detected-object pixels in the full " "symmetric disk (0 .. symmetric_radius) region. Dimensionless in [0, 1]; a " "confidence/QC readout for how well orientation is defined there (low where " "texture is isotropic).", ) COHERENCE_MASK_DENSE = Entry( "Coherence-Mask-Dense", "Mean structure-tensor coherence C over detected-object pixels in the dense " "ring (core_end .. dense_end radii) region. Dimensionless in [0, 1]; a " "confidence/QC readout for how well orientation is defined there (low where " "texture is isotropic).", ) COHERENCE_MASK_SPARSE = Entry( "Coherence-Mask-Sparse", "Mean structure-tensor coherence C over detected-object pixels in the sparse " "ring (dense_end .. sparse_end radii) region. Dimensionless in [0, 1]; a " "confidence/QC readout for how well orientation is defined there (low where " "texture is isotropic).", ) RADIAL_TILT_MASK_OVERALL = Entry( "RadialTilt-Mask-Overall", "Equal-angular-sector mean of the coherence-weighted absolute axial " "difference between the local fiber axis and the outward radial spoke at the " "same pixel, over detected-object pixels in the full symmetric disk (0 .. " "symmetric_radius) region. Reported in degrees in [0, 90]; 0 = locally radial " "and 90 = locally tangential. Each occupied 10-degree angular sector " "contributes equally. For a fixed set of reliable sectors, multiplying branch " "evidence without changing within-sector tilt distributions leaves the result " "unchanged. A support-threshold crossing can add a newly reliable sector and " "change the estimate; mixed orientations within one sector remain " "pixel-weighted.", ) RADIAL_TILT_MASK_DENSE = Entry( "RadialTilt-Mask-Dense", "Equal-angular-sector mean of the coherence-weighted absolute axial " "difference between the local fiber axis and the outward radial spoke at the " "same pixel, over detected-object pixels in the dense ring (core_end .. " "dense_end radii) region. Reported in degrees in [0, 90]; 0 = locally radial " "and 90 = locally tangential. Each occupied 10-degree angular sector " "contributes equally. For a fixed set of reliable sectors, multiplying branch " "evidence without changing within-sector tilt distributions leaves the result " "unchanged. A support-threshold crossing can add a newly reliable sector and " "change the estimate; mixed orientations within one sector remain " "pixel-weighted.", ) RADIAL_TILT_MASK_SPARSE = Entry( "RadialTilt-Mask-Sparse", "Equal-angular-sector mean of the coherence-weighted absolute axial " "difference between the local fiber axis and the outward radial spoke at the " "same pixel, over detected-object pixels in the sparse ring (dense_end .. " "sparse_end radii) region. Reported in degrees in [0, 90]; 0 = locally radial " "and 90 = locally tangential. Each occupied 10-degree angular sector " "contributes equally. For a fixed set of reliable sectors, multiplying branch " "evidence without changing within-sector tilt distributions leaves the result " "unchanged. A support-threshold crossing can add a newly reliable sector and " "change the estimate; mixed orientations within one sector remain " "pixel-weighted.", ) OUTWARD_TURNING_MASK_OVERALL = Entry( "OutwardTurning-Mask-Overall", "Equal-angular-sector mean radial derivative magnitude of the radial-relative " "fiber tilt, over detected-object pixels in the full symmetric disk (0 .. " "symmetric_radius) region. Reported in degrees per pixel. 0 means the tilt " "stays constant while moving outward; larger values mean the local fiber " "field rotates relative to its radial spoke. The aggregation gives each " "occupied 10-degree angular sector equal weight. This is a field-level " "curvature measure, not parent-to-daughter branch tracking.", ) OUTWARD_TURNING_MASK_DENSE = Entry( "OutwardTurning-Mask-Dense", "Equal-angular-sector mean radial derivative magnitude of the radial-relative " "fiber tilt, over detected-object pixels in the dense ring (core_end .. " "dense_end radii) region. Reported in degrees per pixel. 0 means the tilt " "stays constant while moving outward; larger values mean the local fiber " "field rotates relative to its radial spoke. The aggregation gives each " "occupied 10-degree angular sector equal weight. This is a field-level " "curvature measure, not parent-to-daughter branch tracking.", ) OUTWARD_TURNING_MASK_SPARSE = Entry( "OutwardTurning-Mask-Sparse", "Equal-angular-sector mean radial derivative magnitude of the radial-relative " "fiber tilt, over detected-object pixels in the sparse ring (dense_end .. " "sparse_end radii) region. Reported in degrees per pixel. 0 means the tilt " "stays constant while moving outward; larger values mean the local fiber " "field rotates relative to its radial spoke. The aggregation gives each " "occupied 10-degree angular sector equal weight. This is a field-level " "curvature measure, not parent-to-daughter branch tracking.", ) RADIAL_SECTOR_SUPPORT_MASK_OVERALL = Entry( "RadialSectorSupport-Mask-Overall", "Fraction of the 36 fixed 10-degree sectors in the full symmetric disk (0 .. " "symmetric_radius) region that contain at least three detected-structure " "pixels with structure-tensor coherence C >= 0.15. Dimensionless in [0, 1]. " "This is a density-sensitive quality diagnostic for interpreting radial tilt " "and outward turning, not an orientation phenotype.", ) RADIAL_SECTOR_SUPPORT_MASK_DENSE = Entry( "RadialSectorSupport-Mask-Dense", "Fraction of the 36 fixed 10-degree sectors in the dense ring (core_end .. " "dense_end radii) region that contain at least three detected-structure " "pixels with structure-tensor coherence C >= 0.15. Dimensionless in [0, 1]. " "This is a density-sensitive quality diagnostic for interpreting radial tilt " "and outward turning, not an orientation phenotype.", ) RADIAL_SECTOR_SUPPORT_MASK_SPARSE = Entry( "RadialSectorSupport-Mask-Sparse", "Fraction of the 36 fixed 10-degree sectors in the sparse ring (dense_end .. " "sparse_end radii) region that contain at least three detected-structure " "pixels with structure-tensor coherence C >= 0.15. Dimensionless in [0, 1]. " "This is a density-sensitive quality diagnostic for interpreting radial tilt " "and outward turning, not an orientation phenotype.", ) LONG_RANGE_ROTATION_MASK_OVERALL = Entry( "LongRangeRotation-Mask-Overall", "Equal-cell mean absolute seam-safe axial change between matching 10-degree " "sectors in configured-width Sholl-style annular bands (8 pixels by default) " "whose centres are separated by the configured long-range lag (16 pixels by " "default). Ring pairs are assigned to the core-excluded symmetric region " "(core_end .. min(sparse_end, symmetric_radius)) region by their midpoint. " "Reported in degrees in [0, 90]. Annular bands begin outside the inferred " "inoculum core. Each reliable ring-sector comparison contributes equally, so " "multiplying same-orientation branch evidence within an already reliable cell " "does not change its contribution.", ) LONG_RANGE_ROTATION_MASK_DENSE = Entry( "LongRangeRotation-Mask-Dense", "Equal-cell mean absolute seam-safe axial change between matching 10-degree " "sectors in configured-width Sholl-style annular bands (8 pixels by default) " "whose centres are separated by the configured long-range lag (16 pixels by " "default). Ring pairs are assigned to the dense ring (core_end .. dense_end " "radii) region by their midpoint. Reported in degrees in [0, 90]. Annular " "bands begin outside the inferred inoculum core. Each reliable ring-sector " "comparison contributes equally, so multiplying same-orientation branch " "evidence within an already reliable cell does not change its contribution.", ) LONG_RANGE_ROTATION_MASK_SPARSE = Entry( "LongRangeRotation-Mask-Sparse", "Equal-cell mean absolute seam-safe axial change between matching 10-degree " "sectors in configured-width Sholl-style annular bands (8 pixels by default) " "whose centres are separated by the configured long-range lag (16 pixels by " "default). Ring pairs are assigned to the sparse ring (dense_end .. " "sparse_end radii) region by their midpoint. Reported in degrees in [0, 90]. " "Annular bands begin outside the inferred inoculum core. Each reliable " "ring-sector comparison contributes equally, so multiplying same-orientation " "branch evidence within an already reliable cell does not change its " "contribution.", ) SIGNED_LONG_RANGE_ROTATION_MASK_OVERALL = Entry( "SignedLongRangeRotation-Mask-Overall", "Signed counterpart of LongRangeRotation over the core-excluded symmetric " "region (core_end .. min(sparse_end, symmetric_radius)) region, in degrees in " "[-90, 90]. Positive means the radial-relative fiber axis rotates clockwise " "and negative means counterclockwise while moving outward in image " "coordinates. Opposing reliable ring-sector changes cancel in this " "directional summary; inspect the absolute metric and support alongside it.", ) SIGNED_LONG_RANGE_ROTATION_MASK_DENSE = Entry( "SignedLongRangeRotation-Mask-Dense", "Signed counterpart of LongRangeRotation over the dense ring (core_end .. " "dense_end radii) region, in degrees in [-90, 90]. Positive means the " "radial-relative fiber axis rotates clockwise and negative means " "counterclockwise while moving outward in image coordinates. Opposing " "reliable ring-sector changes cancel in this directional summary; inspect the " "absolute metric and support alongside it.", ) SIGNED_LONG_RANGE_ROTATION_MASK_SPARSE = Entry( "SignedLongRangeRotation-Mask-Sparse", "Signed counterpart of LongRangeRotation over the sparse ring (dense_end .. " "sparse_end radii) region, in degrees in [-90, 90]. Positive means the " "radial-relative fiber axis rotates clockwise and negative means " "counterclockwise while moving outward in image coordinates. Opposing " "reliable ring-sector changes cancel in this directional summary; inspect the " "absolute metric and support alongside it.", ) LONG_RANGE_ROTATION_SUPPORT_MASK_OVERALL = Entry( "LongRangeRotationSupport-Mask-Overall", "Fraction of fixed-lag ring-sector comparison cells assigned to the " "core-excluded symmetric region (core_end .. min(sparse_end, " "symmetric_radius)) region that have reliable orientation estimates at both " "radii. Dimensionless in [0, 1]. This is a density-sensitive quality " "diagnostic, not an orientation phenotype.", ) LONG_RANGE_ROTATION_SUPPORT_MASK_DENSE = Entry( "LongRangeRotationSupport-Mask-Dense", "Fraction of fixed-lag ring-sector comparison cells assigned to the dense " "ring (core_end .. dense_end radii) region that have reliable orientation " "estimates at both radii. Dimensionless in [0, 1]. This is a " "density-sensitive quality diagnostic, not an orientation phenotype.", ) LONG_RANGE_ROTATION_SUPPORT_MASK_SPARSE = Entry( "LongRangeRotationSupport-Mask-Sparse", "Fraction of fixed-lag ring-sector comparison cells assigned to the sparse " "ring (dense_end .. sparse_end radii) region that have reliable orientation " "estimates at both radii. Dimensionless in [0, 1]. This is a " "density-sensitive quality diagnostic, not an orientation phenotype.", ) LONG_RANGE_ROTATION_MASK_DENSE_TO_SPARSE = Entry( "LongRangeRotation-Mask-DenseToSparse", "Equal-sector mean absolute seam-safe axial difference between the broad " "Dense-zone and Sparse-zone radial-relative fiber means. Reported in degrees " "in [0, 90]. Only 10-degree sectors reliable in both zones contribute, and " "each paired sector receives equal weight. This measures accumulated " "zone-to-zone rotation without detecting individual branches.", ) SIGNED_LONG_RANGE_ROTATION_MASK_DENSE_TO_SPARSE = Entry( "SignedLongRangeRotation-Mask-DenseToSparse", "Signed mean Dense-to-Sparse axial change over paired reliable 10-degree " "sectors, in degrees in [-90, 90]. Positive means clockwise and negative " "means counterclockwise radial-relative rotation while moving outward in " "image coordinates. Opposing sector rotations cancel.", ) LONG_RANGE_ROTATION_SUPPORT_MASK_DENSE_TO_SPARSE = Entry( "LongRangeRotationSupport-Mask-DenseToSparse", "Fraction of the 36 fixed 10-degree sectors with reliable radial-relative " "orientation estimates in both the Dense and Sparse zones. Dimensionless in " "[0, 1]. This is a density-sensitive quality diagnostic, not an orientation " "phenotype.", )
# Preserve member-level access for callers that imported the former legacy enum. # The diagnostic class contains every former member plus the new opt-in fields. # New code should use the explicit primary/diagnostic names above. ORIENTATION_ZONES = ORIENTATION_ZONE_DIAGNOSTIC