Source code for hazenlib.HazenTask

"""
HazenTask.py
"""
import os
import pathlib
from pydicom import dcmread

from hazenlib.logger import logger


[docs]class HazenTask: """Base class for performing tasks on image sets""" def __init__( self, input_data: list, report: bool = False, report_dir=None, **kwargs ): """Initialise a HazenTask instance Args: input_data (list): list of filepaths to DICOM images report (bool, optional): Whether to create measurement visualisation diagrams. Defaults to False. report_dir (string, optional): Path to output report images. Defaults to None. """ data_paths = sorted(input_data) self.dcm_list = [dcmread(dicom) for dicom in data_paths] self.report: bool = report if report_dir is not None: self.report_path = os.path.join(str(report_dir), type(self).__name__) else: self.report_path = os.path.join( os.getcwd(), "report_image", type(self).__name__ ) if report: pathlib.Path(self.report_path).mkdir(parents=True, exist_ok=True) else: pass self.report_files = []
[docs] def init_result_dict(self) -> dict: """Initialise the dictionary that holds measurement results and input description Returns: dict: holds measurement results and task input description """ result_dict = { "task": f"{type(self).__name__}", "file": None, "measurement": {}, } return result_dict
[docs] def img_desc(self, dcm, properties=None) -> str: """Obtain values from the DICOM header to identify input series Args: dcm (pydicom.Dataset): DICOM image object properties (list, optional): list of DICOM header field names supported by pydicom that shuld be used to generate sereis identifier. Defaults to None. Returns: str: contatenation of the specified DICOM header property values """ if properties is None: properties = ["SeriesDescription", "SeriesNumber", "InstanceNumber"] try: metadata = [str(dcm.get(field)) for field in properties] except KeyError: logger.warning( f"Could not find one or more of the following properties: {properties}" ) metadata = [ str(dcm.get(field)) for field in ["SeriesDescription", "SeriesNumber"] ] img_desc = "_".join(metadata).replace(" ", "_") return img_desc