Source code for portpy.photon.utils.sol_change_inf_matrix
from portpy.photon.influence_matrix import InfluenceMatrix
[docs]def sol_change_inf_matrix(sol: dict, inf_matrix: InfluenceMatrix) -> dict:
"""
Create a new solution by changing the basis of current solution.
It will create a solution with same number of beamlets and voxels as inf_matrix
:param sol: solution for which influence matrix is changed
:param inf_matrix: object of class Influence matrix
:return: new solution dictionary having same number of beamlets and voxels as inf_matrix
"""
new_sol = dict()
if sol['optimal_intensity'].shape[0] < inf_matrix.A.shape[1]:
optimal_intensity = sol['inf_matrix'].fluence_1d_to_2d(fluence_1d=sol['optimal_intensity'])
new_sol['optimal_intensity'] = inf_matrix.fluence_2d_to_1d(optimal_intensity)
elif sol['optimal_intensity'].shape[0] == inf_matrix.A.shape[1]:
new_sol['optimal_intensity'] = sol['optimal_intensity']
else:
raise ValueError("Beamlet resolution should be greater than or equal to beamlets for inf_matrix")
# new_sol['dose_1d'] = inf_matrix.A * new_sol['optimal_intensity']
# dose_3d = sol['inf_matrix'].dose_1d_to_3d(dose_1d=sol['dose_1d'])
# new_sol['dose_1d'] = inf_matrix.dose_3d_to_1d(dose_3d=dose_3d)
new_sol['inf_matrix'] = inf_matrix
return new_sol