diff --git a/_pages/plugins/snt/comp-tools.md b/_pages/plugins/snt/comp-tools.md
index 2eba1de1f..2c55d5ccc 100644
--- a/_pages/plugins/snt/comp-tools.md
+++ b/_pages/plugins/snt/comp-tools.md
@@ -21,6 +21,7 @@ update-site: Neuroanatomy
| Tool | Description |
|------|-------------|
+| [HortaCloud](https://hortacloud.org/) | Cloud-based, open-source platform for collaborative reconstruction of long-range projection neurons from whole-brain light microscopy data |
| [BICCN Tools](https://biccn.org/tools) | List of tools supporting NIH's Brain Research through Advancing Innovative Neurotechnologies (BRAIN) Initiative - Cell Census Network (BICCN) |
| [Blue Brain's Morphology Suite](https://github.com/BlueBrain/morphology-suite) | Blue brain's collection of tools (mostly Python) to build, analyze and visualize morphologies. Currently supported by the [Open Brain Institute](https://www.openbraininstitute.org/) |
| [Cajal](https://cajal.readthedocs.io/en/latest/index.html#) | A Python package for the analysis of single-cell morphological data using Gromov-Wasserstein (GW) distances |
diff --git a/_pages/plugins/snt/manual.md b/_pages/plugins/snt/manual.md
index cb137764e..cfd6713ad 100644
--- a/_pages/plugins/snt/manual.md
+++ b/_pages/plugins/snt/manual.md
@@ -264,9 +264,9 @@ If tracing on a multidimensional image (i.e., one with multiple channels and/or
- **Fast marching**: Provided by [Tubular Geodesics](/plugins/snt/tubular-geodesics), an external SNT add-on
- Independently of the algorithm used, the algorithm drop-down menu in this pane provides options to tweak the performance, accuracy and footprint of the computations involved in the search. These include:
+ Independently of the algorithm used, the algorithm drop-down menu in this pane provides options to tweak the performance, accuracy and efficieny of the computations involved in the search. These include:
- - **Data structure** Defines how data is stored internally: Either _Map_ (slightly slower, but lower footprint), or _Array_ (slightly faster, but higher footprint)
+ - **Data structure** Defines how data is stored internally: Either _Map_ (slightly slower, but lower computation footprint), or _Array_ (slightly faster, but higher footprint)
- **Cost Function** Auto-tracing algorithms aim to find a path to the destination node under the smallest _cost_ of deviating from the signal along a neurite. A successful search between two points is thus the _cheapest_ path with the least deviations. This is implemented through a _cost function_ in which voxels along a neurite are assigned lower costs, while voxels outside the neurite are assigned higher costs or penalties. SNT implements several _cost functions_, namely:
diff --git a/_pages/plugins/snt/metrics.md b/_pages/plugins/snt/metrics.md
index 213a831c8..3c5a672fd 100644
--- a/_pages/plugins/snt/metrics.md
+++ b/_pages/plugins/snt/metrics.md
@@ -26,8 +26,11 @@ Metrics ported from published literature include their associated publication in
A measure of _straightness_. The ratio between the Euclidean distance of a branch (i.e., Euclidean distance between the first and last node of the branch) and its path length. Range of values: ]0--1] (unitless). L-measure metric[^2]
See also: [Path contraction](#path-contraction)
+##### Branch extension angle
+The absolute (compass bearing) [extension angle](#extension-angle) of a branch
+
##### Branch extension angle XY
-The absolute [extension angle](#extension-angle) of a branch in the XY plane
+The absolute [extension angle](#extension-angle) of a branch in the XY plane, i.e., horizontal direction or [azimuth angle](#azimuth-elevation)
##### Branch extension angle XZ
The absolute [extension angle](#extension-angle) of a branch in the XZ plane
@@ -102,11 +105,37 @@ The depth of the bounding box embedding the structure being measured
##### Extension angle
-The _overall_ outgrowth direction of a branch or path with at least two nodes. It is obtained from the slope of a linear regression performed across all coordinates on either the XY, XZ, or ZY plane. Extension angles can be _absolute_ or _relative_ (_rel._):
+{% include img align="right" name="Compass/navigation convention" src="/media/plugins/snt/snt-angles.svg" caption="Compass/navigation convention" %}
+Extension angles report the _overall_ outgrowth direction of a path/branch, and are determined by computing an overall direction vector. This vector is computed in 3D using linear regression across the path/branch coordinates, and its angle retrieved from the slope of the regression. While different angles can be obtained via the [scripting API](./scripting), the most common type of extension angles fall into one of two categories: _absolute_ and _relative_ (_rel._):
+
+###### Absolute angles
+Absolute angles range between [0°—360°[ and are compass bearing angles defined under navigation convention: 0°: North; 90°: East; 180°: South; 270°: West. Absolute angles can be retrieved in 3D, or using projected planes (XY, XZ, or ZY). Note that there are key differences between compass convention and standard mathematical convention:
+
+|---------------|-----------------------------------------------|---------------------------------------------------------------------------------------|
+| | Compass Nomenclature | Mathematical Nomenclature |
+|---------------|-----------------------------------------------|---------------------------------------------------------------------------------------|
+| Reference | Angles are referenced from North (0° or 360°) | Angles are measured from the positive x-axis, which is 0° |
+| Direction[^3] | Measurements are always clockwise | Positive angles are measured counterclockwise. Negative angles are measured clockwise |
+| Units | Degrees (non-SI unit). Range: 0°—360° | Radians (SI unit). Range: 0—2π |
+|---------------|-----------------------------------------------|---------------------------------------------------------------------------------------|
+
+[^3]: Paths with only one node have no direction. Angles involving such paths default to _NaN_
+
+
+{% capture azimuth-elevation%}
+The 3D orientation of a path can be captured using two components:
+
+- **Horizontal direction (azimuth)**: The compass bearing in XY plane (0-360°) following navigation convention
-- _Absolute angles_ are measured with respect to a fixed reference and range from [0°-360°[ under a _West-clockwise_ convention (W: 0°; N: 90°; E: 180°; S: 270°)
+- **Vertical inclination (elevation)**: The vertical angle from the XY plane, ranging from -90° to +90°. E.g.: 0° → horizontal (parallel to XY plane); +90° → extending straight up (positive Z direction); -90° → extending straight down (negative Z direction)
+{% endcapture %}
+
+
+{% include notice icon="info" content=azimuth-elevation %}
+
+###### Relative (rel.) angles
+Relative angles range between [0°—180°[ and are computed as the acute angle between a path's 3D direction vector and its parent path's 3D direction vector. These are thus 3D branching angles. If a path has no parent, its relative angle defaults to _NaN_
-- _Relative (rel.) angles_ are measured as the acute intersection angle between the extension angle of a branch/path and the extension angle of its parent, and range between [0°-180°[. When no parent exists the relative extension angle is _NaN_
##### Height
@@ -123,8 +152,11 @@ The highest Horton-Strahler number of a tree, i.e., the Horton-Strahler number o
Defined as the branches of highest Strahler order. Typically, these correspond to the most 'internal' branches of an arbor, in direct sequence from the root. Note that _Primary branches_ are _inner branches_ starting at the tree's root
See also: [Primary branches](#primary-branches), [Terminal branches](#terminal-branches)
+###### Inner branches: Extension angle
+The absolute (compass bearing) [extension angle](#extension-angle) of [inner branches](#inner-branches)
+
###### Inner branches: Extension angle XY
-The absolute [extension angle](#extension-angle) of [inner branches](#inner-branches) in the XY plane
+The absolute [extension angle](#extension-angle) of [inner branches](#inner-branches) in the XY plane, i.e., horizontal direction or [azimuth angle](#azimuth-elevation)
###### Inner branches: Extension angle XZ
The absolute [extension angle](#extension-angle) of [inner branches](#inner-branches) in the XZ plane
@@ -145,8 +177,11 @@ The distance between nodes defining a branch or a Path. Can be retrieved as _squ
##### Longest shortest path
The longest graph geodesic. Considering a [graph-theory tree](https://en.wikipedia.org/wiki/Tree_(graph_theory)), the _longest shortest path_ corresponds to its [graph diameter](https://mathworld.wolfram.com/GraphDiameter.html) (also known as maximum geodesic, or longest graph geodesic). Can only be computed for structures that are valid mathematical trees.
+###### Longest shortest path: Extension angle
+The absolute (compass bearing) [Extension angle](#extension-angle) of [longest shortest path](#longest-shortest-path)
+
###### Longest shortest path: Extension angle XY
-Absolute [Extension angle](#extension-angle) of [longest shortest path](#longest-shortest-path) in the XY plane
+Absolute [Extension angle](#extension-angle) of [longest shortest path](#longest-shortest-path) in the XY plane, i.e., horizontal direction or [azimuth angle](#azimuth-elevation)
###### Longest shortest path: Extension angle XZ
Absolute [Extension angle](#extension-angle) of [longest shortest path](#longest-shortest-path) in the XZ plane
@@ -217,8 +252,14 @@ The color channel associated with a path (multidimensional images)
##### Path contraction
A measure of straightness of a path. See [Branch contraction](#branch-contraction) for definition
+##### Path extension angle
+The absolute (compass bearing) [Extension angle](#extension-angle) of a path
+
+##### Path extension angle (Rel.)
+The relative [Extension angle](#extension-angle) of a path, i.e., the angle formed between a path and its parent (branching angle). NaN if a path has no parent.
+
##### Path extension angle XY
-Absolute [Extension angle](#extension-angle) of a path in the XY plane
+Absolute [Extension angle](#extension-angle) of a path in the XY plane, i.e., horizontal direction or [azimuth angle](#azimuth-elevation)
##### Path extension angle XY (Rel.)
Relative [Extension angle](#extension-angle) of a path in the XY plane
@@ -268,7 +309,7 @@ Primary branches that have origin in a tree's root, extending to the closest bra
See also: [Inner branches](#inner-branches), [Terminal branches](#terminal-branches)
###### Primary branches: Extension angle XY
-Absolute [Extension angle](#extension-angle) of [primary branches](#primary-branches) in the XY plane
+Absolute [Extension angle](#extension-angle) of [primary branches](#primary-branches) in the XY plane, i.e., horizontal direction or [azimuth angle](#azimuth-elevation)
###### Primary branches: Extension angle XZ
Absolute [Extension angle](#extension-angle) of [primary branches](#primary-branches) in the XZ plane
@@ -342,7 +383,7 @@ Branches ending at terminal endpoints (tips)
See also: [Inner branches](#inner-branches), [Primary branches](#primary-branches)
###### Terminal branches: Extension angle XY
-Absolute [Extension angle](#extension-angle) of [terminal branches](#terminal-branches) in the XY plane
+Absolute [Extension angle](#extension-angle) of [terminal branches](#terminal-branches) in the XY plane, i.e., horizontal direction or [azimuth angle](#azimuth-elevation)
###### Terminal branches: Extension angle XZ
Absolute [Extension angle](#extension-angle) of [terminal branches](#terminal-branches) in the XZ plane
@@ -375,7 +416,7 @@ Cartesian coordinates in the three-dimensional space
- Some combinations of metrics/statistics may not be meaningful: e.g., when measuring a single cell, pairing [cable length](#cable-length) to _SD_ will not be useful, since only one cable length value can be computed. In such cases, the Measurements table appends '[Single metric]' to such data
-- Each of the 95+ metrics is represented by seven statistical properties: minimum, maximum, mean, standard deviation (SD), coefficient of variation (CV, the ratio of the standard deviation to the mean), sum, and _N_, resulting in a total of at least $$95\times 7$$ features. Note that there is an intrinsic redundancy between these features: E.g., for a given cell, retrieving [Branch length](#branch-length)'s _N_ is effectively the same as retrieving [No. of branches](#no-of-branches)
+- Each of the 100+ metrics is represented by seven statistical properties: minimum, maximum, mean, standard deviation (SD), coefficient of variation (CV, the ratio of the standard deviation to the mean), sum, and _N_, resulting in a total of $$100\times 7$$ features. Note that there is an intrinsic redundancy between these features: E.g., for a given cell, retrieving [Branch length](#branch-length)'s _N_ is effectively the same as retrieving [No. of branches](#no-of-branches)
- *NaN* values for a reported metric typically reflect undefined operations (e.g., division by zero), or the fact that the reconstruction being parsed is not a valid mathematical tree
diff --git a/media/plugins/snt/snt-angles.svg b/media/plugins/snt/snt-angles.svg
new file mode 100644
index 000000000..e6a922ae9
--- /dev/null
+++ b/media/plugins/snt/snt-angles.svg
@@ -0,0 +1,436 @@
+
+