Source code for portpy.photon.clinical_criteria

from typing import List


[docs]class ClinicalCriteria: """ A class representing clinical criteria. - **Attributes** :: :param clinical_criteria_dict: dictionary containing metadata about clinical criteria :Example dict = {"disease_site": "Lung", "protocol_name": "Lung_Default_2Gy_30Fr", "pres_per_fraction_gy": 2, "num_of_fractions": 30, "criteria": [ { "name": "max_dose", "parameters": { "struct": "GTV" }} - **Methods** :: :add_criterion(criterion:str, parameters:dict, constraints:dict) :modify_criterion(criterion:str, parameters:dict, constraints:dict) """ def __init__(self, clinical_criteria): """ :param clinical_criteria: dictionary containing information about clinical criteria """ self.clinical_criteria_dict = clinical_criteria
[docs] def add_criterion(self, criterion: str, parameters: dict, constraints: dict) -> None: """ Add criterion to the clinical criteria dictionary :param criterion: criterion name. e.g. max_dose :param parameters: parameters dictionary e.g. parameters = {'struct':'PTV'} :param constraints: constraints dictionary e.g. constraints = {'limit_dose_gy':66, 'goal_dose_gy':60} :return: add the criteria to clinical criteria dictionary """ self.clinical_criteria_dict['criteria'].append({'name': criterion}) self.clinical_criteria_dict['criteria'][-1]['parameters'] = parameters self.clinical_criteria_dict['criteria'][-1]['constraints'] = constraints
[docs] def modify_criterion(self, criterion: str, parameters: dict, constraints: dict) -> None: """ Modify the criterion in clinical criteria dictionary :param criterion: criterion name. e.g. max_dose :param parameters: parameters dictionary e.g. parameters = {'struct':'PTV'} :param constraints: constraints dictionary e.g. constraints = {'limit_dose_gy':66, 'goal_dose_gy':60} :return: add the criteria to clinical criteria dictionary """ criteria = self.clinical_criteria_dict['criteria'] ind = [criteria[i]['name'] for i in range(len(criteria)) if criteria[i]['name'] == criterion and criteria[i]['parameters'] == parameters] if len(ind) > 0: criteria[ind[0]]['constraints'] = constraints else: raise Exception('No criteria for name {} and parameters {}'.format(criterion, parameters))
[docs] @staticmethod def create_criterion(criterion: str, parameters: dict, constraints: dict): """ Create criterion and return list :param criterion: criterion name. e.g. max_dose :param parameters: parameters dictionary e.g. parameters = {'struct':'PTV'} :param constraints: constraints dictionary e.g. constraints = {'limit_dose_gy':66, 'goal_dose_gy':60} :return: add the criteria to clinical criteria dictionary """ criterion = [{'name': criterion, 'parameters': parameters, 'constraints': constraints}] return criterion
[docs] def get_criteria(self, name: str = None) -> List[dict]: """ Returns all the clinical criteria :return: """ all_criteria = [] if name is None: all_criteria = self.clinical_criteria_dict['criteria'] elif name == 'max_dose': criteria = self.clinical_criteria_dict['criteria'] ind = [i for i in range(len(criteria)) if criteria[i]['name'] == name] if len(ind) > 0: all_criteria = [criteria[i] for i in ind] elif name == 'mean_dose': criteria = self.clinical_criteria_dict['criteria'] ind = [i for i in range(len(criteria)) if criteria[i]['name'] == name] if len(ind) > 0: all_criteria = [criteria[i] for i in ind] if isinstance(all_criteria, dict): all_criteria = [all_criteria] return all_criteria