def make_tif(animal, tif_id, file_id, testing=False): fileLocationManager = FileLocationManager(animal) sqlController = SqlController(animal) INPUT = fileLocationManager.czi OUTPUT = fileLocationManager.tif start = time.time() tif = sqlController.get_tif(tif_id) slide = sqlController.get_slide(tif.slide_id) czi_file = os.path.join(INPUT, slide.file_name) section = sqlController.get_section(file_id) tif_file = os.path.join(OUTPUT, section.file_name) if not os.path.exists(czi_file) and not testing: return 0 if os.path.exists(tif_file): return 1 if testing: command = ['touch', tif_file] else: command = ['/usr/local/share/bftools/bfconvert', '-bigtiff', '-separate', '-series', str(tif.scene_index), '-channel', str(tif.channel-1), '-nooverwrite', czi_file, tif_file] run(command) end = time.time() if os.path.exists(tif_file): tif.file_size = os.path.getsize(tif_file) tif.processing_duration = end - start sqlController.update_row(tif) return 1
def fix_tifs(animal, channel): sqlController = SqlController(animal) fileLocationManager = FileLocationManager(animal) dir = fileLocationManager.tif db_files = sqlController.get_sections(animal, channel) source_files = [] source_keys = [] for tif in db_files: source_files.append(tif.file_name) source_keys.append(tif.id) files = os.listdir(dir) files = [file for file in files if 'C{}.tif'.format(channel) in file] missing_files = list(set(source_files) - set(files)) for i, missing in enumerate(missing_files): #pass file_id = source_keys[source_files.index(missing)] section = sqlController.get_section(file_id) print(i, missing, file_id, section.id, section.file_name) make_tif(animal, section.tif_id, file_id, testing=False)