def batch(recon_root, proc_recon_root, csv_path): """ Script to automatically generate crops, scled images and compressed files :param recon_list: :param mount: :return: """ with open(csv_path, 'r') as fh: recon_list = [row[0] for row in csv.reader(fh)] app = AppData() auto = Autofill(None) update = FakeUpdate() for recon_id in recon_list: stage = get_stage(recon_id) proc_recon_path = join(proc_recon_root, recon_id) cropped_dir = join(proc_recon_path, 'cropped') if not isdir(cropped_dir): mkdir(cropped_dir) scaled_dir = join(proc_recon_path, 'scaled_stacks') metadata_dir = join(proc_recon_path, 'Metadata') recon_id = get_input_id(join(metadata_dir, 'config4user.log')) recon_path = join(recon_root, recon_id) # Performing cropping if directory does not exist or is empty if len(listdir(cropped_dir)) == 0: fake_config = lambda: None fake_config.meta_path = metadata_dir fake_config.value = 0 cropper = Crop(recon_path, cropped_dir, update.emit, fake_config, fake_config, app, def_crop=None, repeat_crop=None) img_list = cropper.run(auto=True) else: img_list = app.getfilelist(cropped_dir) # Get recon log and pixel size log_paths = [f for f in listdir(cropped_dir) if f.endswith("_rec.log")] if len(log_paths) < 1: print('Cannot find log in cropped directory') continue log = join(cropped_dir, log_paths[0]) with open(log, 'rb') as log_file: original_pixel_size = float(auto.get_pixel(stage, log_file)) # Scaling if not isdir(scaled_dir): mkdir(scaled_dir) for scale in SCALING[stage]: scale_by_int = False if type(scale) is int: sf = scale new_pixel_size = original_pixel_size * float(scale) scale_by_int = True else: sf = float(scale) / float(original_pixel_size) new_pixel_size = sf * original_pixel_size out_name = join( scaled_dir, '{}_scaled_{:.4f}_pixel_{:.2f}.{}'.format( recon_id, sf, new_pixel_size, ext)) if scaled_stack_exists(scaled_dir, sf, new_pixel_size): continue resample(img_list, sf, out_name, scale_by_int, update) # Compression bz2_file = join(proc_recon_path, 'IMPC_cropped_{}.nrrd'.format(recon_id)) if not isfile(bz2_file + '.bz2'): print "Generating missing bz2 file for '{}'".format(recon_id) try: bz2_nnrd(img_list, bz2_file, 'Compressing cropped recon', update) except IOError as e: print( 'Failed to write the compressed bzp2 file. Network issues?\n{}' .format(e))