Skip to content
Snippets Groups Projects
writer.py 2.59 KiB
Newer Older
Simon Wittl's avatar
dev
Simon Wittl committed
import numpy as np
import json
from pathlib import Path
from ...common import PyProjectionGeometry, PyProjection, PyRegionOfIntrest


class BaseDataWriter():
Simon Wittl's avatar
Simon Wittl committed
    projection_name: str = 'projection'
    projection_geometry_name: str ='geometry'
    region_of_intrest_name: str = 'roi'

Simon Wittl's avatar
dev
Simon Wittl committed
    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
    
Simon Wittl's avatar
Simon Wittl committed
    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}'
Simon Wittl's avatar
dev
Simon Wittl committed
    
Simon Wittl's avatar
Simon Wittl committed
    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}'
Simon Wittl's avatar
dev
Simon Wittl committed
    
Simon Wittl's avatar
Simon Wittl committed
    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}'
Simon Wittl's avatar
dev
Simon Wittl committed
    
    def number_of_projection_geometries(self, folder: Path) -> int:
Simon Wittl's avatar
Simon Wittl committed
        return len(list(folder.glob(f'{self.projection_geometry_name}*{self.porjection_geometry_suffix}')))
Simon Wittl's avatar
dev
Simon Wittl committed
    
    def number_of_projections(self, folder: Path) -> int:
Simon Wittl's avatar
Simon Wittl committed
        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}')))