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:
"""
Removes regions at edges.
Parameters
----------
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
-------
:
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]:
"""
Finds 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)