def test_mudensity_agreement(loaded_dicom_dataset, logfile_delivery_data): dicom_delivery_data = Delivery.from_dicom(loaded_dicom_dataset, FRACTION_GROUP) dicom_mu_density = dicom_delivery_data.mudensity(grid_resolution=5) logfile_mu_density = logfile_delivery_data.mudensity(grid_resolution=5) diff = logfile_mu_density - dicom_mu_density max_diff = np.max(np.abs(diff)) std_diff = np.std(diff) try: assert max_diff < 4.1 assert std_diff < 0.4 except AssertionError: max_val = np.max([np.max(logfile_mu_density), np.max(dicom_mu_density)]) plt.figure() plt.pcolormesh(dicom_mu_density, vmin=0, vmax=max_val) plt.colorbar() plt.figure() plt.pcolormesh(logfile_mu_density, vmin=0, vmax=max_val) plt.colorbar() plt.figure() plt.pcolormesh( logfile_mu_density - dicom_mu_density, vmin=-max_diff, vmax=max_diff, cmap="bwr", ) plt.colorbar() plt.show() raise
def test_round_trip_dcm2dd2dcm(loaded_dicom_dataset): original = loaded_dicom_dataset delivery_data = Delivery.from_dicom(original, FRACTION_GROUP) processed = delivery_data.to_dicom(original) single_fraction_group = convert_to_one_fraction_group( original, FRACTION_GROUP) original_gantry_angles = get_gantry_angles_from_dicom( single_fraction_group) assert num_of_control_points( single_fraction_group) == num_of_control_points(processed) assert maintain_order_unique( delivery_data.gantry) == original_gantry_angles processed_gantry_angles = get_gantry_angles_from_dicom(processed) assert original_gantry_angles == processed_gantry_angles assert source_to_surface_distances( single_fraction_group) == source_to_surface_distances(processed) assert first_mlc_positions(single_fraction_group) == first_mlc_positions( processed) assert str(single_fraction_group) == str(processed)
def test_round_trip_dd2dcm2dd(loaded_dicom_dataset, logfile_delivery_data: Delivery): original = logfile_delivery_data._filter_cps() template = loaded_dicom_dataset dicom = original.to_dicom(template) processed = Delivery.from_dicom(dicom, FRACTION_GROUP) assert np.all( np.around(original.monitor_units, 2) == np.around(processed.monitor_units, 2) ) assert np.all(np.around(original.gantry, 2) == np.around(processed.gantry, 2)) assert np.all(np.around(original.mlc, 2) == np.around(processed.mlc, 2)) assert np.all(np.around(original.jaw, 2) == np.around(processed.jaw, 2)) # Collimator not currently handled appropriately assert np.all( np.around(original.collimator, 2) == np.around(processed.collimator, 2) )