Example #1
0
    def setup_planing_item(self):

        if self.dcm_files is not None and self.case is not None:
            if self.dvh_calculator is not None:
                # TODO refactor this into abstractions
                plan_dcm = PyDicomParser(filename=self.dcm_files['rtplan'])
                dose_dcm = PyDicomParser(filename=self.dcm_files['rtdose'])
                plan_dict = plan_dcm.GetPlan()
                dose_3d = dose_dcm.get_dose_3d()
                self._planning_item = PyPlanningItem(plan_dict, self.case,
                                                     dose_3d,
                                                     self.dvh_calculator)
Example #2
0
def test_gk_dvh():
    # Given
    slicer_dvh_file = r'C:\Users\Victor\Dropbox\Plan_Competition_Project\tests\tests_data\gk_plan\SLICER_RT_DVH.csv'
    plan_folder = r'C:\Users\Victor\Dropbox\Plan_Competition_Project\tests\tests_data\gk_plan'

    slicer_dvh = read_slicer_dvh(slicer_dvh_file)

    # strip columns names
    slicer_dvh.columns = [
        'Skull Value', 'CerebelarDir', 'FrontalEsq ', 'Tumor', 'Tumor 2',
        'Tumor 3', 'Tumor 4', 'Tumor 5'
    ]

    dcm_files, flag = get_participant_folder_data(plan_folder)
    plan_dict = PyDicomParser(filename=dcm_files['rtplan']).GetPlan()
    structures = PyDicomParser(filename=dcm_files['rtss']).GetStructures()
    rd_dcm = PyDicomParser(filename=dcm_files['rtdose'])
    dose = rd_dcm.get_dose_3d()
    structures_py = [
        PyStructure(s, end_cap=s['thickness'] / 2)
        for k, s in structures.items()
    ]

    grid = (0.1, 0.1, 0.1)
    dvh_pyplan = {}
    for s in structures_py[:-1]:
        dvh_calci = DVHCalculation(s, dose, calc_grid=grid)
        dvh_l = dvh_calci.calculate(verbose=True)
        dvh_pyplan[dvh_l['name']] = dvh_l
        # plot_dvh(dvh_l, dvh_l['name'])

    for target_name, dvh_calc in dvh_pyplan.items():
        dose_t5 = slicer_dvh.index
        t5 = slicer_dvh.loc[:, target_name].values
        x_calc = np.arange(len(dvh_calc['data'])) * float(dvh_calc['scaling'])
        py_t5 = dvh_calc['data']

        plt.plot(dose_t5, t5, label='Slicer-RT')
        plt.plot(x_calc, py_t5, label='PyPlanScoring')
        plt.title(target_name)
        plt.legend()
        plt.show()
Example #3
0
def test_dvh_comparisson(setup_calculation_options):
    # Given plan DVH
    folder = os.path.join(DATA_DIR, 'lungSBRT')

    # parse DICOM folder
    # plan_folder = r'C:\Users\Victor\Dropbox\Plan_Competition_Project\tests\tests_data\pinnacle\plan1'
    plan_folder = r'C:\Users\Victor\Dropbox\Plan_Competition_Project\tests\tests_data\pinnacle\plan2'
    dcm_files, flag = get_participant_folder_data(plan_folder)

    rs_dvh = os.path.join(folder, 'RS.dcm')

    plan_dict = PyDicomParser(filename=dcm_files['rtplan']).GetPlan()
    # structures = PyDicomParser(filename=dcm_files['rtss']).GetStructures()
    structures = PyDicomParser(filename=rs_dvh).GetStructures()
    rd_dcm = PyDicomParser(filename=dcm_files['rtdose'])
    dose = rd_dcm.get_dose_3d()

    # criteria file
    file_path = os.path.join(folder, 'Scoring_criteria.xlsx')
    criteria = pd.read_excel(file_path, sheet_name='BiLateralLungSBRTCase')

    # setup RT case
    rt_case_tmp = RTCase("SBRT", 123, structures, criteria)
    dvh_calc = DVHCalculator(rt_case_tmp, setup_calculation_options)

    # when calculate DVH using pyplanScoring
    planning_obj = PyPlanningItem(plan_dict, rt_case_tmp, dose, dvh_calc)
    planning_obj.calculate_dvh()

    # for k, v in planning_obj.dvh_data.items():
    #     plot_dvh(v, v['name'])
    #     plt.show()

    # # Calculating the score
    plan_eval = PlanEvaluation()
    plan_eval.criteria = criteria
    df = plan_eval.eval_plan(planning_obj)

    raw_score = df['Raw score'].sum()
    pass
Example #4
0
    # planIQ dvh
    dvh_ref_path = '/home/victor/Dropbox/Plan_Competition_Project/tests/tests_data/ptv_based_SRS/PTV Based - PlanIQ DVH - Eclipse VMAT - Body included - Ahmad March 24.txt'
    plan_iq_dvh = read_planiq_dvh(dvh_ref_path)

    # compare against SLICER DV
    plan_folder = r'/home/victor/Dropbox/Plan_Competition_Project/tests/tests_data/ptv_based_SRS'

    # dcm_files, flag = get_participant_folder_data(plan_folder)
    rtss = r'/home/victor/Dropbox/Plan_Competition_Project/tests/tests_data/ptv_based_SRS/RS.1.2.246.352.205.5644208623194161296.369175407993399980.dcm'
    rt_dose = '/home/victor/Dropbox/Plan_Competition_Project/tests/tests_data/ptv_based_SRS/RD.1.2.246.352.71.7.584747638204.1898898.20180324182516.dcm'
    ini_file = '/home/victor/Dropbox/Plan_Competition_Project/gui/cases/BrainMetSRSCase/PyPlanScoring.ini'
    setup_calculation_options = get_calculation_options(ini_file)

    structures = PyDicomParser(filename=rtss).GetStructures()
    rd_dcm = PyDicomParser(filename=rt_dose)
    dose = rd_dcm.get_dose_3d()
    plan_dict = {}

    # criteria file
    file_path = '/home/victor/Dropbox/Plan_Competition_Project/tests/tests_data/ptv_based_SRS/Scoring_criteria.xlsx'
    criteria = pd.read_excel(file_path, sheet_name='BrainSRS')

    # setup RT case
    rt_case_tmp = RTCase("SRS", 123, structures, criteria)
    dvh_calc = DVHCalculator(rt_case_tmp, setup_calculation_options)

    # when calculate DVH using pyplanScoring
    planning_obj = PyPlanningItem(plan_dict, rt_case_tmp, dose, dvh_calc)
    planning_obj.calculate_dvh()

    # # Calculating the score