Source code for abm_initialization_collection.sample.remove_edge_regions
import pandas as pd
[docs]def remove_edge_regions(
samples: pd.DataFrame, edge_threshold: int, edge_padding: float
) -> pd.DataFrame:
"""
Remove regions at edges.
Parameters
----------
samples
Sample cell ids and coordinates.
edge_threshold
Number of edge positions per axis needed to assign edge region.
edge_padding
Distance from axis limits to assign edge positions.
Returns
-------
:
Samples with edge cells removed.
"""
# Get ids of cell at edge.
x_edge_ids = find_edge_ids("x", samples, edge_threshold, edge_padding)
y_edge_ids = find_edge_ids("y", samples, edge_threshold, edge_padding)
# Filter samples for cells not at edge.
all_edge_ids = set(x_edge_ids + y_edge_ids)
samples_filtered = samples[~samples["id"].isin(all_edge_ids)]
return samples_filtered.reset_index(drop=True)
[docs]def find_edge_ids(axis: str, samples: pd.DataFrame, threshold: float, padding: float) -> list[int]:
"""
Find ids of cells with voxels touching edges of given axis.
Parameters
----------
axis : {'x', 'y', 'z'}
The name of axis to check.
samples
Sample cell ids and coordinates.
threshold
Number of edge positions per axis needed to assign edge region.
padding
Distance from axis limits to assign edge positions.
Returns
-------
:
List of edge cell ids.
"""
# Get min and max coordinate for given axis.
axis_min = samples[axis].min() + padding
axis_max = samples[axis].max() - padding
# Check for cell ids located at edges.
edges = samples.groupby("id").apply(
lambda g: len(g[(g[axis] <= axis_min) | (g[axis] >= axis_max)])
)
edge_ids = edges[edges > threshold]
return list(edge_ids.index)