import numpy as np import json from pathlib import Path from ...common import PyProjectionGeometry, PyProjection, PyRegionOfIntrest class BaseDataWriter(): projection_name: str = 'projection' projection_geometry_name: str ='geometry' region_of_intrest_name: str = 'roi' def __init__(self, porjection_geometry_suffix: str, projection_suffix: str, region_of_intrest_suffix: str): self.porjection_geometry_suffix = porjection_geometry_suffix self.projection_suffix = projection_suffix self.region_of_intrest_suffix = region_of_intrest_suffix def write_projection_geometry(self, save_path: Path, projection_geometry: PyProjectionGeometry): raise NotImplementedError def write_projection(self, save_path: Path, projection: PyProjection): raise NotImplementedError def write_region_of_intrest(self, save_path: Path, region_of_intrest: PyRegionOfIntrest): raise NotImplementedError def get_next_projection_save_path(self, save_folder: Path) -> Path: return self.get_projection_save_path_i(save_folder, self.number_of_projections(save_folder) + 1) def get_projection_save_path_i(self, save_folder: Path, i) -> Path: return save_folder / f'{self.projection_name}_{i:05}{self.projection_suffix}' def get_next_projection_geometry_save_path(self, save_folder: Path) -> Path: return self.get_projection_geometry_save_path_i(save_folder, self.number_of_projection_geometries(save_folder) + 1) def get_projection_geometry_save_path_i(self, save_folder: Path, i) -> Path: return save_folder / f'{self.projection_geometry_name}_{i:05}{self.porjection_geometry_suffix}' def get_next_region_of_intrest_save_path(self, save_folder: Path) -> Path: return self.get_region_of_intrest_save_path_i(save_folder, self.number_of_region_of_intrests(save_folder) + 1) def get_region_of_intrest_save_path_i(self, save_folder: Path, i) -> Path: return save_folder / f'{self.region_of_intrest_name}_{i:05}{self.region_of_intrest_suffix}' def number_of_projection_geometries(self, folder: Path) -> int: return len(list(folder.glob(f'{self.projection_geometry_name}*{self.porjection_geometry_suffix}'))) def number_of_projections(self, folder: Path) -> int: return len(list(folder.glob(f'{self.projection_name}*{self.projection_suffix}'))) def number_of_region_of_intrests(self, folder: Path) -> int: return len(list(folder.glob(f'{self.region_of_intrest_name}*{self.region_of_intrest_suffix}')))