from typing import Union, Sequence, Tuple, List
from .. import structures as struct
from ..core import header as hdr
__all__ = [
'get_channel', 'get_channels', 'get_pixel', 'get_pixels'
]
[docs]
def get_channel(cube : 'struct.Cube', z : Union[int, float],
unit = 'index') -> 'struct.Map' :
""" TODO """
return cube.get_channels([z], unit = unit)[0]
[docs]
def get_channels(cube : 'struct.Cube', z : Sequence[Union[int, float]],
unit = 'index') -> List['struct.Map'] :
""" TODO """
unit = unit.lower()
if unit == 'index' :
k_ = z
elif unit == 'velocity' :
k_ = [hdr.velocity_to_index(cube.header, v) for v in z]
elif unit == 'frequency' :
k_ = [hdr.frequency_to_index(cube.header, f) for f in z]
else :
raise ValueError(f"unit must be 'index', 'velocity' or 'frequency', not '{unit}'")
new_header = hdr.remove_header_axis(cube.header, 'spectral')
out = []
for k in k_ :
new_data = cube.data[k]
out.append(struct.Map(new_data, new_header))
return out
[docs]
def get_pixel(cube : 'struct.Cube', xy : Tuple[Union[int, float]],
unit = 'index') -> 'struct.Profile' :
""" TODO """
return cube.get_pixels([xy], unit = unit)[0]
[docs]
def get_pixels(cube : 'struct.Cube', xy : Sequence[Tuple[Union[int, float]]],
unit = 'index') -> List['struct.Profile'] :
""" TODO """
unit = unit.lower()
if unit == 'index' :
ij_ = xy
elif unit == 'angle' :
ij_ = [hdr.coordinates_to_indices(cube.header, x, y) for (x,y) in xy ]
else :
raise ValueError(f"unit must be 'index' or 'angle', not '{unit}'")
new_header = hdr.remove_header_axis(cube.header, 'spatial')
out = []
for (i,j) in ij_ :
new_data = cube.data[:, j, i]
out.append(struct.Profile(new_data, new_header))
return out