Source code for oursin.volumes

"""Volumetric datasets (x*y*z matrix)"""

from . import client
import numpy as np

[docs]def create(volume_name): """Create an empty volume data matrix in the renderer. Note: you must call create_volume and set_volume_colormap before setting data. Parameters ---------- volume_name : string volume name Examples -------- >>> urn.create('histology') """ client.sio.emit('CreateVolume', volume_name)
[docs]def delete(volume_name): """Delete a volume data matrix. Parameters ---------- volume_name : string volume name Examples -------- >>> urn.delete('histology') """ client.sio.emit('DeleteVolume', volume_name)
[docs]def set_colormap(volume_name, colormap): """Set the colormap for a volume, maximum of 254 values Note: index 255 is reserved by the renderer for transparency. Parameters ---------- volumeName : string volume name volumeData : list of string list of hex colors, values can be RGB or RGBA Examples -------- >>> urn.set_colormap('histology',['#800000','#FF0000']) """ data_packet = colormap.copy() data_packet.insert(0,volume_name) client.sio.emit('SetVolumeColormap', data_packet)
[docs]def set_visibility(volume_name, volume_visibility): """Change the visibility of a volume Parameters ---------- volumeName : string Volume name volumeVisibility : bool New visibility setting Examples -------- >>> urn.set_visibility('histology', True) """ client.sio.emit('SetVolumeVisibility', [volume_name, volume_visibility])
[docs]def set_data(volume_name, volumeData): """Set the data for a volume using uint8 values from 0->254 (255 is reserved for transparent). Sending your data as any type other than np.uint8 is potentially unsafe. Data will be remapped in the renderer according to the active colormap. nan values will be set to transparent. Note: this function slices the data by depth and sends data slice-by-slice, it may take a long time to run. Parameters ---------- volumeData : [string, numpy matrix] Name of the volume and the volume itself. Volume should be [528, 320, 456] with +x = posterior, +y = ventral, +z = right """ localData = volumeData.copy() localData[np.isnan(localData)] = 255 localData = localData.astype(np.uint8) ndepth = localData.shape[2] for di in np.arange(0,ndepth): if di == (ndepth-1): set_slice_data(volume_name, int(ndepth-1-di), localData[:,:,di].flatten('F').tobytes(), True) else: set_slice_data(volume_name, int(ndepth-1-di), localData[:,:,di].flatten('F').tobytes())
[docs]def set_slice_data(volume_name, slice, volume_bytes, override_gpu_apply = False): """Set a single slice of data in a volume Parameters ---------- volumeName : string name of volume slice : int depth slice in volume (on lr dimension) volume_bytes : bytes flattened bytes array from slice override_gpu_apply : bool, optional immediately set the GPU texture data after this slice is sent, by default False """ client.sio.emit('SetVolumeDataMeta', [volume_name, slice, override_gpu_apply]) client.sio.emit('SetVolumeData', volume_bytes)
###################### # VOLUMES: Allen CCF # ###################### # special case of the regular volume visibility function
[docs]def set_visibility_allen(allenVisibility): """Set the visibility of the Allen CCF annotation volume Parameters ---------- allenData : bool visibility of Allen CCF volume """ set_visibility('allen',allenVisibility)