Class RootDetector

java.lang.Object
sc.fiji.snt.tracing.auto.RootDetector

public class RootDetector extends Object
Detects candidate locations where several unconnected primary paths - e.g. tracings whose own soma wasn't imaged, or simply not yet joined to one - may converge on a shared, unimaged origin, and reports them as ranked SeedPoints.

Mirrors TuftDetector, but at the opposite topological end: instead of clustering a tree's own terminal structure (tips converging on a tuft), it clusters the root node of every unconnected, non-soma primary Path pooled across the scanned Trees.

Unlike tuft candidates - which already belong to the same tree, so proximity only corroborates something already topologically true - root candidates come from independent fragments with no prior relationship: proximity is the only evidence tying them together. So, unlike TuftDetector, a root with no other root nearby is not reported: on its own it's most likely just an ordinary, complete reconstruction, not a genuine unimaged-soma candidate.

Author:
Tiago Ferreira
See Also:
  • Constructor Details

    • RootDetector

      public RootDetector(double radius)
      Creates a detector with the given convergence radius.
      Parameters:
      radius - neighborhood radius (physical units) within which two unconnected roots are considered candidates for the same unimaged origin
  • Method Details

    • setRadius

      public void setRadius(double radius)
      Sets the convergence radius (physical units).
    • setWeightByThickness

      public void setWeightByThickness(boolean weightByThickness)
      Sets whether each root's recorded thickness (PointInImage.radius) is added to its neighbor count when scoring: a thicker root stub is more plausibly soma-adjacent than a thin one. Default: true
    • setPercentileClip

      public void setPercentileClip(double percentileClip)
      Sets the robustness margin (0-45) for confidence normalization; see SeedConfidence.percentileClipNormalize(double[], double). Default: 10
    • detect

      public List<SeedPoint> detect(Collection<Tree> trees)
      Detects root-convergence candidates pooled across every Tree in trees - deliberately not per-tree, since the whole point is catching fragments that live in structurally unrelated Trees (or unconnected primary paths within one).
      Parameters:
      trees - the trees to scan
      Returns:
      one SeedPoint per detected convergence, sorted by descending confidence. Empty if fewer than two unconnected, non-soma primary paths converge anywhere across trees