82 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| import yaml
 | |
| from typing import List
 | |
| from collections import deque
 | |
| from pathlib import Path
 | |
| import numpy as np
 | |
| import SimpleITK as sitk
 | |
| 
 | |
| def print_p(text, end="\n"):
 | |
|     """ Print function for on Peregrine. It needs a flush before printing. """
 | |
|     print(text, flush=True, end=end)
 | |
| 
 | |
| def list_from_file(path: str) -> List:
 | |
|     """ Returns a list of all items on each line of the text file referenced in
 | |
|         the given path
 | |
|     
 | |
|     Parameters:
 | |
|     `path (str)`: path to the text file
 | |
|     """
 | |
|     print_p(path)
 | |
|     return [line.strip() for line in open(path, "r")]
 | |
| 
 | |
| 
 | |
| def dump_dict_to_yaml(
 | |
|     data: dict,
 | |
|     target_dir: str,
 | |
|     filename: str = "settings",
 | |
|     verbose: bool = True) -> None:
 | |
|     """ Writes the given dictionary as a yaml to the target directory.
 | |
|     
 | |
|     Parameters:
 | |
|     `data (dict)`: dictionary of data.
 | |
|     `target_dir (str)`: directory where the yaml will be saved.
 | |
|     `` filename (str)`: name of the file without extension
 | |
|     """
 | |
|     if verbose:
 | |
|         print("\nParameters")
 | |
|         for pair in data.items():
 | |
|             print(f"\t{pair}")
 | |
|         print()
 | |
| 
 | |
|     path = f"{target_dir}/{filename}.yml"
 | |
|     print_p(f"Wrote yaml to: {path}")
 | |
|     with open(path, 'w') as outfile:
 | |
|         yaml.dump(data, outfile, default_flow_style=False)
 | |
| 
 | |
| 
 | |
| def read_yaml_to_dict(path: str) -> dict:
 | |
|     with open(path, 'r') as stream:
 | |
|         try:
 | |
|             parsed_yaml=yaml.safe_load(stream)
 | |
|             # print(parsed_yaml)
 | |
|             return parsed_yaml
 | |
|         except yaml.YAMLError as exc:
 | |
|             print(exc)
 | |
| 
 | |
| 
 | |
| def create_dirs_if_not_exists(dirs: List[str]) -> None:
 | |
|     """ Creates the list of supplied directories if they don't exist yet.
 | |
|     
 | |
|     Parameters:
 | |
|     `dirs (List[str]) or str`: list of strings representing the directories that
 | |
|     need to be created
 | |
|     """
 | |
|     
 | |
|     if isinstance(dirs, str):
 | |
|         dirs = [dirs]
 | |
| 
 | |
|     for folder in dirs:
 | |
|         Path(folder).mkdir(parents=True, exist_ok=True)
 | |
|         print_p(f"Created directory {folder} or it already existed.")
 | |
| 
 | |
| 
 | |
| def save_np_to_nifti(data_np: np.ndarray,
 | |
|                     target_dir: str,
 | |
|                     fname: str,
 | |
|                     target_space: List[float] = [0.5, 0.5, 3.0]):
 | |
| 
 | |
|     img_s = sitk.GetImageFromArray(data_np.T)
 | |
|     img_s.SetSpacing(target_space)
 | |
|     path = f"{target_dir}/{fname}.nii.gz"
 | |
|     sitk.WriteImage(img_s, path)
 | |
|     print_p(f"Saved numpy array to nifti: {path}") |