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)
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()
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
# 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