class ScanFolderConcatBatchReaderWithMask(ScanFolderConcatBatchReader): def __init__(self, mask_img_path, config, in_ori_folder, in_jac_folder, batch_size, file_list_txt=None): super().__init__(config, in_ori_folder, in_jac_folder, batch_size, file_list_txt) self._mask_img = ScanWrapper(mask_img_path) self._masked_ref_ori = ScanWrapperWithMask( self._in_data_folder.get_file_path(0), self._mask_img.get_path()) self._masked_ref_jac = ScanWrapperWithMask( self._in_jac_folder.get_file_path(0), self._mask_img.get_path()) def save_flat_data(self, data_array, idx, out_folder): out_path_ori = os.path.join(out_folder, f'pc_ori_{idx}.nii.gz') out_path_jac = os.path.join(out_folder, f'pc_jac_{idx}.nii.gz') ori_data_flat = data_array[:self._get_number_of_voxel_ori()] jac_data_flat = data_array[self._get_number_of_voxel_ori():] self._masked_ref_ori.save_scan_flat_img(ori_data_flat, out_path_ori) self._masked_ref_jac.save_scan_flat_img(jac_data_flat, out_path_jac) def _run_single_scan(self, idx): in_ori_data_obj = ScanWrapperWithMask( self._in_data_folder.get_file_path(idx), self._mask_img.get_path()) in_jac_data_obj = ScanWrapperWithMask( self._in_jac_folder.get_file_path(idx), self._mask_img.get_path()) self._data_matrix[self._cur_idx, :self._get_number_of_voxel_ori( )] = in_ori_data_obj.get_data_flat() self._data_matrix[self._cur_idx, self._get_number_of_voxel_ori( ):] = in_jac_data_obj.get_data_flat() self._cur_idx += 1 def _get_number_of_voxel_ori(self): return self._masked_ref_ori.get_data_flat().shape[0] def _get_number_of_voxel_jac(self): return self._masked_ref_jac.get_data_flat().shape[0]
class ScanFolderBatchWithMaskReader(ScanFolderBatchReader): def __init__(self, config, in_folder, mask_img, batch_size, file_list_txt): super().__init__(config, in_folder, None, batch_size, file_list_txt) self._mask_img = ScanWrapper(mask_img) self._masked_ref = ScanWrapperWithMask( self._in_data_folder.get_file_path(0), self._mask_img.get_path()) def save_flat_data(self, data_array, idx, out_folder): out_path = os.path.join(out_folder, f'pc_{idx}.nii.gz') self._masked_ref.save_scan_flat_img(data_array, out_path) def _run_single_scan(self, idx): in_data = ScanWrapperWithMask(self._in_data_folder.get_file_path(idx), self._mask_img.get_path()) self._data_matrix[self._cur_idx, :] = in_data.get_data_flat() self._cur_idx += 1 def _get_number_of_voxel(self): return self._masked_ref.get_data_flat().shape[0]
class CalcJacobian(AbstractParallelRoutine): def __init__(self, config, in_dat_folder, out_folder, ref_img, file_list_txt): super().__init__(config, in_dat_folder, file_list_txt) self._ref_img = ScanWrapper(ref_img) self._out_data_folder = DataFolder.get_data_folder_obj( config, out_folder, data_list_txt=file_list_txt) self._jacobian_tool = config['deedsBCV_jacobian'] def _run_single_scan(self, idx): in_dat_prefix = self._in_data_folder.get_file_path(idx) out_file_path = self._out_data_folder.get_file_path(idx) ref_img_path = self._ref_img.get_path() jacobian_cmd_str = f'{self._jacobian_tool} -M {ref_img_path} -O {in_dat_prefix} -J {out_file_path}' logger.info(jacobian_cmd_str) os.system(jacobian_cmd_str)