# `neuron_morphology.snap_polygons.cortex_surfaces`¶

This module contains utilities for processing cortical surface drawings. In general we take these as given (they even take precedence of e.g. the upper and lower surfaces of layers 1 and 6b for instance), but some drawings pose resolvable problems.

The main such problem occurs when cortical layer drawings extend far from the layer drawings. Extrapolating layer drawings into this space is dangerous and not very useful (only the drawings near the cell are useful downstream). The solution implemented here is to cut out a segment of each surface whose endpoints are sufficiently close to the layer drawings and discard the rest.

## Module Contents¶

### Functions¶

 `trim_to_close`(geometry: BaseGeometry, threshold: float, linestring: LineType, iterations: int = 10) → LineString Find the longest segment of a linestring whose endpoints are within a `find_transition`(unmet: Point, met: Point, condition: ConditionFn, iterations: int) → Point Given two points in space, one of which meets a condition, locate the `first_met`(coords: Sequence[Union[Point, Tuple]], condition: ConditionFn, iterations: int) → Tuple[int, Point] Locate the first point along a coordinate sequence at which a condition `remove_duplicates`(coords: Sequence[Point]) → Sequence[Point] Remove duplicate points from a coordinate sequence. `trim_coords`(coords: Sequence[Union[Point, Tuple]], condition: ConditionFn, iterations: int) Find the longest subinterval of a coordinate sequence whose endpoints
`neuron_morphology.snap_polygons.cortex_surfaces.``ConditionFn`
`neuron_morphology.snap_polygons.cortex_surfaces.``trim_to_close`(geometry: BaseGeometry, threshold: float, linestring: LineType, iterations: int = 10) → LineString

Find the longest segment of a linestring whose endpoints are within a specified distance of a geometry.

Parameters: geometry : Acceptable distances are defined as extending from this object. threshold : Acceptable distances are less than or equal to this value linestring : to be trimmed (not in place) iterations : Use this many iterations to refine the endpoints of the linestring a trimmed copy of the input linestring
`neuron_morphology.snap_polygons.cortex_surfaces.``find_transition`(unmet: Point, met: Point, condition: ConditionFn, iterations: int) → Point

Given two points in space, one of which meets a condition, locate the position along a line segment between these points where the condition becomes true.

Parameters: unmet : a point at which the condition is not met met : a point at which the condition is met condition : used to evaluate intermediate points iterations : refine this many times A point along the input segment at which the condition is met.

Notes

No such transition point is required to exist. In that case, this function will find an arbitrary condition-meeting point along the segment. For our use case, this misbehavior is tolerable because an exact transition point is not required.

`neuron_morphology.snap_polygons.cortex_surfaces.``first_met`(coords: Sequence[Union[Point, Tuple]], condition: ConditionFn, iterations: int) → Tuple[int, Point]

Locate the first point along a coordinate sequence at which a condition is met.

Parameters: coords : sequence to evaluate condition : used to evaluate points iterations : how many times to refine the transition point. The index and value of the transition point.
`neuron_morphology.snap_polygons.cortex_surfaces.``remove_duplicates`(coords: Sequence[Point]) → Sequence[Point]

Remove duplicate points from a coordinate sequence.

Parameters: coords : sequence with potential duplicates list of coordinates with duplicates removed
`neuron_morphology.snap_polygons.cortex_surfaces.``trim_coords`(coords: Sequence[Union[Point, Tuple]], condition: ConditionFn, iterations: int)

Find the longest subinterval of a coordinate sequence whose endpoints meet some condition.

Parameters: coords : sequence to trim condition : used to evaluate points iterations : how many times to refine the endpoints. Trimmed sequence