Skip to content

Commit d5eae1c

Browse files
authored
Add generate_zstack function
1 parent 8612f6f commit d5eae1c

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

src/xenium_analysis_tools/alignment/generate_images.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,3 +351,46 @@ def get_alignment_shapes_tables(sdata,
351351
transcripts = PointsModel.parse(transcripts)
352352

353353
return table, transcripts, shapes
354+
355+
def generate_zstack(zstack_path, zstack_masks_path, zstack_size=None, zstack_ind=None, zstack_channels=None, alignment_folder=None):
356+
# Make the dictionary for the available z-stacks
357+
zstacks_dict = get_zstacks_dict(zstack_path)
358+
zstacks_masks_dict = get_zstacks_dict(zstack_masks_path)
359+
print(f'Number of z-stacks found: {len(zstacks_dict)}\n')
360+
for stack_ind, stack_info in zstacks_dict.items():
361+
print(f"Stack {stack_ind}: {stack_info['zstack_name']}")
362+
zstack_width = stack_info['zstack_size']['width']
363+
zstack_height = stack_info['zstack_size']['height']
364+
zstack_depth = stack_info['zstack_size']['depth']
365+
print(f" Size: {zstack_width} W x {zstack_height} H x {zstack_depth} D")
366+
print(f" Channels: {stack_info['zstack_channels']}\n")
367+
368+
# Select the zstack that matches the criteria
369+
if len(zstacks_dict) == 1:
370+
zstack_ind = 0
371+
zstack_size = None
372+
zstack_channels = None
373+
zstack_info = get_zstack(zstacks_dict, zstack_ind=zstack_ind, zstack_size=zstack_size, zstack_channels=zstack_channels)
374+
zstack_size = zstack_info['zstack_size']
375+
zstack_save_name = f"zstack_{zstack_size['width']}x{zstack_size['height']}x{zstack_size['depth']}.zarr"
376+
377+
if alignment_folder:
378+
zstack_save_path = alignment_folder / zstack_save_name
379+
if zstack_save_path.exists():
380+
print(f"Zstack already generated at: {zstack_save_path}")
381+
return zstack_save_path
382+
else:
383+
alignment_folder.mkdir(parents=True, exist_ok=True)
384+
zstack_masks = get_zstack(zstacks_masks_dict, zstack_size=zstack_size)
385+
zstack_sdata = get_zstack_sdata(zstack_info, zstack_masks=zstack_masks)
386+
for table_name, table in zstack_sdata.tables.items():
387+
table.uns = {'zstack_name': zstack_info['zstack_name']}
388+
zstack_sdata.write(zstack_save_path)
389+
print(f"Zstack saved at: {zstack_save_path}")
390+
return zstack_save_path
391+
else:
392+
zstack_masks = get_zstack(zstacks_masks_dict, zstack_size=zstack_size)
393+
zstack_sdata = get_zstack_sdata(zstack_info, zstack_masks=zstack_masks)
394+
for table_name, table in zstack_sdata.tables.items():
395+
table.uns = {'zstack_name': zstack_info['zstack_name']}
396+
return zstack_sdata

0 commit comments

Comments
 (0)