Source code for allensdk.internal.mouse_connectivity.interval_unionize.run_tissuecyte_unionize_classic
import logging
from allensdk.core.simple_tree import SimpleTree
from allensdk.internal.mouse_connectivity.interval_unionize.tissuecyte_unionizer import TissuecyteUnionizer
import allensdk.internal.mouse_connectivity.interval_unionize.data_utilities as du
[docs]def get_ancestor_id_map(structures):
tree = SimpleTree( structures,
lambda st: int(st['id']),
lambda st: st['parent_structure_id'])
ancestor_id_map = tree.value_map( lambda st: st['id'],
lambda st: tree.ancestor_ids([st['id']])[0] )
for k in list(ancestor_id_map):
ancestor_id_map[-k] = map(lambda x: -x, ancestor_id_map[k])
return ancestor_id_map
[docs]def get_volume_scale(image_resolution, voxel_depth):
return image_resolution ** 2 * 10 ** -9 * voxel_depth
[docs]def run(input_data):
logging.info('making ancestor id map')
ancestor_id_map = get_ancestor_id_map(input_data['structures'])
logging.info('computing volume scale factor')
volume_scale = get_volume_scale(input_data['image_resolution'], input_data['reference_spacing'])
logging.info('volume scale factor : {0}'.format(volume_scale))
logging.info('reference shape : {0}'.format(input_data['reference_shape']))
logging.info('reference spacing : {0}'.format(input_data['reference_spacing']))
logging.info('image_series_id : {0}'.format(input_data['image_series_id']))
annotation = du.load_annotation(input_data['annotation_path'], input_data['grid_paths']['data_mask'])
unionizer = TissuecyteUnionizer()
unionizer.setup_interval_map(annotation)
del annotation
signal_arrays = du.get_injection_data(input_data['grid_paths']['injection_fraction'],
input_data['grid_paths']['injection_density'],
input_data['grid_paths']['injection_energy'])
signal_arrays.update(du.get_projection_data(input_data['grid_paths']['projection_density'],
input_data['grid_paths']['projection_energy'],
input_data['grid_paths']['aav_exclusion_fraction']))
signal_arrays.update(du.get_sum_pixels(input_data['grid_paths']['sum_pixels']))
signal_arrays.update(du.get_sum_pixel_intensities(input_data['grid_paths']['sum_pixel_intensities'],
input_data['grid_paths']['injection_sum_pixel_intensities']))
for k, v in signal_arrays.items():
logging.info('sorting {0} array'.format(k))
signal_arrays[k] = v.flat[unionizer.sort]
logging.info('computing unionizes from directly annotated voxels')
raw_unionizes = unionizer.direct_unionize(signal_arrays, pre_sorted=True)
logging.info('propagating data to ancestor structures')
raw_unionizes = TissuecyteUnionizer.propagate_unionizes(raw_unionizes,
ancestor_id_map)
logging.info('propagating data to bilateral unionizes')
bilateral = TissuecyteUnionizer.propagate_to_bilateral(raw_unionizes)
cooked_unionizes = list(unionizer.postprocess_unionizes(
raw_unionizes,
image_series_id=input_data['image_series_id'],
output_spacing_iso=input_data['reference_spacing'],
volume_scale=volume_scale,
target_shape=input_data['reference_shape'],
sort=unionizer.sort
))
cooked_bilateral = list(unionizer.postprocess_unionizes(
bilateral,
image_series_id=input_data['image_series_id'],
output_spacing_iso=input_data['reference_spacing'],
volume_scale=volume_scale,
target_shape=input_data['reference_shape'],
sort=unionizer.sort
))
for item in cooked_bilateral:
item['hemisphere_id'] = 3
cooked_unionizes.append(item)
logging.info('computed {0} unionize records'.format(len(cooked_unionizes)))
return cooked_unionizes