@@ -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