Source code for abm_initialization_collection.sample.get_sample_indices

from abm_initialization_collection.coordinate.make_grid_coordinates import (
    make_hex_grid_coordinates,
    make_rect_grid_coordinates,
)


[docs]def get_sample_indices( grid: str, bounds: tuple[int, int, int], resolution: float, scale_xy: float, scale_z: float, ) -> list: """ Get sample indices with given bounds for selected grid type. Parameters ---------- grid : {'rect', 'hex'} Type of grid. bounds Sampling bounds in the x, y, and z directions. resolution Distance between samples (um). scale_xy Resolution scaling in x/y (um/pixel). scale_z Resolution scaling in z (um/pixel). Returns ------- : List of sample indices. """ if grid == "rect": return get_rect_sample_indices(bounds, resolution, scale_xy, scale_z) if grid == "hex": return get_hex_sample_indices(bounds, resolution, scale_xy, scale_z) raise ValueError(f"invalid grid type {grid}")
[docs]def get_rect_sample_indices( bounds: tuple[int, int, int], resolution: float, scale_xy: float, scale_z: float, ) -> list: """ Get list of (x, y, z) sample indices for rect grid. Parameters ---------- bounds Sampling bounds in the x, y, and z directions. resolution Distance between samples (um). scale_xy Resolution scaling in x/y. scale_z Resolution scaling in z. Returns ------- : List of sample indices. """ increment_z = round(resolution / scale_z) increment_xy = round(resolution / scale_xy) sample_coordinates = make_rect_grid_coordinates(bounds, increment_xy, increment_z) sample_indices = [(round(x), round(y), z) for x, y, z in sample_coordinates] return sample_indices
[docs]def get_hex_sample_indices( bounds: tuple[int, int, int], resolution: float, scale_xy: float, scale_z: float, ) -> list: """ Get list of (x, y, z) sample indices for hex grid. Sample indices are offset in sets of three z slices to form a face-centered cubic (FCC) packing. Parameters ---------- bounds Sampling bounds in the x, y, and z directions. resolution Distance between samples (um). scale_xy Resolution scaling in x/y. scale_z Resolution scaling in z. Returns ------- : List of sample indices. """ increment_z = round(resolution / scale_z) increment_xy = round(resolution / scale_xy) sample_coordinates = make_hex_grid_coordinates(bounds, increment_xy, increment_z) sample_indices = [(round(x), round(y), z) for x, y, z in sample_coordinates] return sample_indices