def test_median_otsu_flow(): with TemporaryDirectory() as out_dir: data_path, _, _ = get_data('small_25') volume = nib.load(data_path).get_data() save_masked = True median_radius = 3 numpass = 3 autocrop = False vol_idx = [0] dilate = 0 mo_flow = MedianOtsuFlow() mo_flow.run(data_path, out_dir=out_dir, save_masked=save_masked, median_radius=median_radius, numpass=numpass, autocrop=autocrop, vol_idx=vol_idx, dilate=dilate) mask_name = mo_flow.last_generated_outputs['out_mask'] masked_name = mo_flow.last_generated_outputs['out_masked'] masked, mask = median_otsu(volume, median_radius, numpass, autocrop, vol_idx, dilate) result_mask_data = nib.load(join(out_dir, mask_name)).get_data() npt.assert_array_equal(result_mask_data, mask) result_masked_data = nib.load(join(out_dir, masked_name)).get_data() npt.assert_array_equal(result_masked_data, masked)
def test_force_overwrite(): with TemporaryDirectory() as out_dir: data_path, _, _ = get_data('small_25') mo_flow = MedianOtsuFlow(output_strategy='absolute') # Generate the first results mo_flow.run(data_path, out_dir=out_dir) mask_file = mo_flow.last_generated_outputs['out_mask'] first_time = os.path.getmtime(mask_file) # re-run with no force overwrite, modified time should not change mo_flow.run(data_path, out_dir=out_dir) mask_file = mo_flow.last_generated_outputs['out_mask'] second_time = os.path.getmtime(mask_file) assert first_time == second_time # re-run with force overwrite, modified time should change mo_flow = MedianOtsuFlow(output_strategy='absolute', force=True) # Make sure that at least one second elapsed, so that time-stamp is # different (sometimes measured in whole seconds) time.sleep(1) mo_flow.run(data_path, out_dir=out_dir) mask_file = mo_flow.last_generated_outputs['out_mask'] third_time = os.path.getmtime(mask_file) assert third_time != second_time
def run(self, input_files, out_dir='', out_file='processed.nii.gz'): """ Parameters ---------- input_files : string Path to the input files. This path may contain wildcards to process multiple inputs at once. out_dir : string, optional Where the resulting file will be saved. (default '') out_file : string, optional Name of the result file to be saved. (default 'processed.nii.gz') """ """ Just like a normal workflow, it is mandatory to have out_dir as a parameter. It is also mandatory to put 'out_' in front of every parameter that is going to be an output. Lastly, all out_ params needs to be at the end of the params list. The class docstring part is very important, you need to document every parameter as they will be used with inspection to build the command line argument parser. """ io_it = self.get_io_iterator() for in_file, out_file in io_it: nl_flow = NLMeansFlow() self.run_sub_flow(nl_flow, in_file, out_dir=out_dir) denoised = nl_flow.last_generated_outputs['out_denoised'] me_flow = MedianOtsuFlow() self.run_sub_flow(me_flow, denoised, out_dir=out_dir)
def test_median_otsu_flow(): with TemporaryDirectory() as out_dir: data_path, _, _ = get_fnames('small_25') volume = load_nifti_data(data_path) save_masked = True median_radius = 3 numpass = 3 autocrop = False vol_idx = [0] dilate = 0 mo_flow = MedianOtsuFlow() mo_flow.run(data_path, out_dir=out_dir, save_masked=save_masked, median_radius=median_radius, numpass=numpass, autocrop=autocrop, vol_idx=vol_idx, dilate=dilate) mask_name = mo_flow.last_generated_outputs['out_mask'] masked_name = mo_flow.last_generated_outputs['out_masked'] masked, mask = median_otsu(volume, vol_idx=vol_idx, median_radius=median_radius, numpass=numpass, autocrop=autocrop, dilate=dilate) result_mask_data = load_nifti_data(join(out_dir, mask_name)) npt.assert_array_equal(result_mask_data.astype(np.uint8), mask) result_masked = nib.load(join(out_dir, masked_name)) result_masked_data = np.asanyarray(result_masked.dataobj) npt.assert_array_equal(np.round(result_masked_data), masked)