Coverage for src/abm_initialization_collection/coordinate/filter_coordinate_bounds.py: 100%
12 statements
« prev ^ index » next coverage.py v7.1.0, created at 2024-09-25 19:25 +0000
« prev ^ index » next coverage.py v7.1.0, created at 2024-09-25 19:25 +0000
1import numpy as np
2import pandas as pd
5def filter_coordinate_bounds(coordinates: list, radius: float, *, center: bool) -> pd.DataFrame:
6 """
7 Filter list for coordinates with given radius.
9 Parameters
10 ----------
11 coordinates
12 List of (x, y, z) coordinates.
13 radius
14 Maximum valid radius of coordinate.
15 center
16 True if coordinates should be centered, False otherwise.
18 Returns
19 -------
20 :
21 Filtered list of coordinates.
22 """
24 filtered_coordinates = []
25 x_center, y_center, _ = np.array(coordinates).mean(axis=0)
27 for x, y, z in coordinates:
28 coordinate_radius = (x - x_center) ** 2 + (y - y_center) ** 2
29 if coordinate_radius <= radius**2:
30 if center:
31 filtered_coordinates.append((x - x_center, y - y_center, z))
32 else:
33 filtered_coordinates.append((x, y, z))
35 return pd.DataFrame(filtered_coordinates, columns=["x", "y", "z"])