# neurom.morphmath¶

Mathematical and geometrical functions used to compute morphometrics.

Functions

 `angle_3points` Compute the angle in radians between three 3D points. `angle_between_vectors` Computes the angle in radians between vectors ‘p1’ and ‘p2’. `average_points_dist` Computes the average distance between a list of points and a given point p0. `dist_point_line` Compute the orthogonal distance between a line and a point. `interpolate_radius` Interpolate the radius between two values. `interval_lengths` Returns the list of distances between consecutive points. `linear_interpolate` Returns the point p satisfying: p1 + fraction * (p2 - p1). `path_distance` Compute the path distance from given set of points. `path_fraction_id_offset` Find segment by fractional offset. `path_fraction_point` Find coordinates by fractional offset. `pca` Estimate the principal components of the covariance on the given point cloud. `point_dist` Compute the euclidian distance between two 3D points. `point_dist2` Compute the square of the euclidian distance between two 3D points. `polygon_diameter` Compute the maximun euclidian distance between any two points in a list of points. `principal_direction_extent` Calculate the extent of a set of 3D points. `scalar_projection` Compute the scalar projection of v1 upon v2. `section_length` Compute the path distance from given set of points. `segment_area` Compute the surface area of a segment. `segment_length` Return the length of a segment. `segment_length2` Return the square of the length of a segment. `segment_radial_dist` Return the radial distance of a tree segment to a given point. `segment_radius` Return the mean radius of a segment. `segment_taper_rate` Compute the taper rate of a segment. `segment_volume` Compute the volume of a segment. `segment_x_coordinate` Return the mean x coordinate of a segment. `segment_y_coordinate` Return the mean y coordinate of a segment. `segment_z_coordinate` Return the mean z coordinate of a segment. `sphere_area` Compute the area of a sphere with radius r. `taper_rate` Compute the taper rate between points p0 and p1. `vector` Compute vector between two 3D points. `vector_projection` Compute the vector projection of v1 upon v2.
class `neurom.morphmath.``COLS`[source]

Bases: `object`

Column labels for internal data representation.

`neurom.morphmath.``angle_3points`(p0, p1, p2)[source]

Compute the angle in radians between three 3D points.

Calculated as the angle between p1-p0 and p2-p0.

Parameters
• p0 – indexable objects with

• p1 – indexable objects with

• p2 – indexable objects with

• 0 (indices) –

• 1

• corresponding to 3D cartesian coordinates. (2) –

Returns

Angle in radians between (p1-p0) and (p2-p0). 0.0 if p0==p1 or p0==p2.

`neurom.morphmath.``angle_between_vectors`(p1, p2)[source]

Computes the angle in radians between vectors ‘p1’ and ‘p2’.

Normalizes the input vectors and computes the relative angle between them.

```>>> angle_between((1, 0), (0, 1))
1.5707963267948966
>>> angle_between((1, 0), (1, 0))
0.0
>>> angle_between((1, 0), (-1, 0))
3.141592653589793
```
`neurom.morphmath.``average_points_dist`(p0, p_list)[source]

Computes the average distance between a list of points and a given point p0.

`neurom.morphmath.``dist_point_line`(p, l1, l2)[source]

Compute the orthogonal distance between a line and a point.

The line is that which passes through the points l1 and l2.

Parameters
• p – iterable indices 0, 1, 2 correspond to cartesian coordinates

• l1 – iterable indices 0, 1, 2 correspond to cartesian coordinates

• l2 – iterable indices 0, 1, 2 correspond to cartesian coordinates

`neurom.morphmath.``interpolate_radius`(r1, r2, fraction)[source]

Interpolate the radius between two values.

Calculate the radius that corresponds to a point P that lies at a fraction of the length of a cut cone P1P2 where P1, P2 are the centers of the circles that bound the shape with radii r1 and r2 respectively.

Parameters
• r1 – float Radius of the first node of the segment.

• r2 – float Radius of the second node of the segment

• fraction – float The fraction at which the interpolated radius is calculated.

Returns: float

Note: The fraction is assumed from point P1, not from point P2.

`neurom.morphmath.``interval_lengths`(points, prepend_zero=False)[source]

Returns the list of distances between consecutive points.

Parameters
• points – a list of np.array of 3D points

• prepend_zero (bool) – if True, the returned array will start with a zero

`neurom.morphmath.``linear_interpolate`(p1, p2, fraction)[source]

Returns the point p satisfying: p1 + fraction * (p2 - p1).

`neurom.morphmath.``path_distance`(points)[source]

Compute the path distance from given set of points.

`neurom.morphmath.``path_fraction_id_offset`(points, fraction, relative_offset=False)[source]

Find segment by fractional offset.

Find the segment which corresponds to the fraction of the path length along the piecewise linear curve which is constructed from the set of points.

Parameters
• points – an iterable of indexable objects with indices

• 0

• 1

• correspoding to 3D cartesian coordinates (2) –

• fraction – path length fraction (0.0 <= fraction <= 1.0)

• relative_offset – return absolute or relative segment distance

Returns

(segment ID, segment offset) pair.

`neurom.morphmath.``path_fraction_point`(points, fraction)[source]

Find coordinates by fractional offset.

Computes the point which corresponds to the fraction of the path length along the piecewise linear curve which is constructed from the set of points.

Parameters
• points – an iterable of indexable objects with indices

• 0

• 1

• correspoding to 3D cartesian coordinates (2) –

• fraction – path length fraction (0 <= fraction <= 1)

Returns

The 3D coordinates of the aforementioned point

`neurom.morphmath.``pca`(points)[source]

Estimate the principal components of the covariance on the given point cloud.

Input

A numpy array of points of the form ((x1,y1,z1), (x2, y2, z2)…)

Ouptut

Eigenvalues and respective eigenvectors

`neurom.morphmath.``point_dist`(p1, p2)[source]

Compute the euclidian distance between two 3D points.

Parameters
• p1 – indexable objects with

• p2 – indexable objects with

• 0 (indices) –

• 1

• corresponding to 3D cartesian coordinates. (2) –

Returns

The euclidian distance between the points.

`neurom.morphmath.``point_dist2`(p1, p2)[source]

Compute the square of the euclidian distance between two 3D points.

Parameters
• p1 – indexable objects with

• p2 – indexable objects with

• 0 (indices) –

• 1

• corresponding to 3D cartesian coordinates. (2) –

Returns

The square of the euclidian distance between the points.

`neurom.morphmath.``polygon_diameter`(points)[source]

Compute the maximun euclidian distance between any two points in a list of points.

`neurom.morphmath.``principal_direction_extent`(points)[source]

Calculate the extent of a set of 3D points.

The extent is defined as the maximum distance between the projections on the principal directions of the covariance matrix of the points.

Parameter:

points : a 2D numpy array of points

Returns

the extents for each of the eigenvectors of the cov matrix eigs : eigenvalues of the covariance matrix eigv : respective eigenvectors of the covariance matrix

Return type

extents

`neurom.morphmath.``scalar_projection`(v1, v2)[source]

Compute the scalar projection of v1 upon v2.

Parameters
• v1 – iterable

• v2 – iterable

• 0 (indices) –

• 1

• corresponding to cartesian coordinates (2) –

Returns

3-vector of the projection of point p onto the direction of v

`neurom.morphmath.``section_length`(points)

Compute the path distance from given set of points.

`neurom.morphmath.``segment_area`(seg)[source]

Compute the surface area of a segment.

Approximated as a conical frustum. Does not include the surface area of the bounding circles.

`neurom.morphmath.``segment_length`(seg)[source]

Return the length of a segment.

Returns: Euclidian distance between centres of points in seg

`neurom.morphmath.``segment_length2`(seg)[source]

Return the square of the length of a segment.

Returns: Square of Euclidian distance between centres of points in seg

`neurom.morphmath.``segment_radial_dist`(seg, pos)[source]

Return the radial distance of a tree segment to a given point.

The radial distance is the euclidian distance between the mid-point of the segment and the point in question.

Parameters
• seg – tree segment

• pos – origin to which distances are measured. It must have at lease 3

• The first 3 components are (components.) –

`neurom.morphmath.``segment_radius`(seg)[source]

Return the mean radius of a segment.

Returns: arithmetic mean of the radii of the points in seg

`neurom.morphmath.``segment_taper_rate`(seg)[source]

Compute the taper rate of a segment.

Returns

The taper rate, defined as the absolute value of the difference in the diameters of the segment’s two points divided by the euclidian distance between them.

`neurom.morphmath.``segment_volume`(seg)[source]

Compute the volume of a segment.

Approximated as a conical frustum.

`neurom.morphmath.``segment_x_coordinate`(seg)[source]

Return the mean x coordinate of a segment.

Returns: arithmetic mean of the x coordinates of the points in seg

`neurom.morphmath.``segment_y_coordinate`(seg)[source]

Return the mean y coordinate of a segment.

Returns: arithmetic mean of the y coordinates of the points in seg

`neurom.morphmath.``segment_z_coordinate`(seg)[source]

Return the mean z coordinate of a segment.

Returns: arithmetic mean of the z coordinates of the points in seg

`neurom.morphmath.``sphere_area`(r)[source]

Compute the area of a sphere with radius r.

`neurom.morphmath.``taper_rate`(p0, p1)[source]

Compute the taper rate between points p0 and p1.

Parameters
• p0 – iterables with first 4 components containing (x, y, z, r)

• p1 – iterables with first 4 components containing (x, y, z, r)

Returns

The taper rate, defined as the absolute value of the difference in the diameters of p0 and p1 divided by the euclidian distance between them.

`neurom.morphmath.``vector`(p1, p2)[source]

Compute vector between two 3D points.

Parameters
• p1 – indexable objects with

• p2 – indexable objects with

• 0 (indices) –

• 1

• corresponding to 3D cartesian coordinates. (2) –

Returns

3-vector from p1 - p2

`neurom.morphmath.``vector_projection`(v1, v2)[source]

Compute the vector projection of v1 upon v2.

Parameters
• v1 – iterable

• v2 – iterable

• 0 (indices) –

• 1

• corresponding to cartesian coordinates (2) –

Returns

3-vector of the projection of point p onto the direction of v