This is a script file.
0001 classdef matRad_SquaredUnderdosing < DoseObjectives.matRad_DoseObjective
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 properties (Constant)
0022 name = 'Squared Underdosing';
0023 parameterNames = {'d^{min}'};
0024 parameterTypes = {'dose'};
0025 end
0026
0027 properties
0028 parameters = {60};
0029 penalty = 1;
0030 end
0031
0032 methods
0033 function obj = matRad_SquaredUnderdosing(penalty,dMin)
0034
0035 if nargin == 1 && isstruct(penalty)
0036 inputStruct = penalty;
0037 initFromStruct = true;
0038 else
0039 initFromStruct = false;
0040 inputStruct = [];
0041 end
0042
0043
0044 obj@DoseObjectives.matRad_DoseObjective(inputStruct);
0045
0046
0047 if ~initFromStruct
0048 if nargin == 2 && isscalar(dMin)
0049 obj.parameters{1} = dMin;
0050 end
0051
0052 if nargin >= 1 && isscalar(penalty)
0053 obj.penalty = penalty;
0054 end
0055 end
0056 end
0057
0058
0059 function fDose = computeDoseObjectiveFunction(obj,dose)
0060
0061 underdose = dose - obj.parameters{1};
0062
0063
0064 underdose(underdose>0) = 0;
0065
0066
0067 fDose = obj.penalty/numel(dose) * (underdose'*underdose);
0068 end
0069
0070
0071 function fDoseGrad = computeDoseObjectiveGradient(obj,dose)
0072
0073 underdose = dose - obj.parameters{1};
0074
0075
0076 underdose(underdose>0) = 0;
0077
0078
0079 fDoseGrad = 2 * obj.penalty/numel(dose) * underdose;
0080 end
0081 end
0082
0083 end