This is a script file.
0001 classdef matRad_SquaredOverdosing < 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 Overdosing';
0023 parameterNames = {'d^{max}'};
0024 parameterTypes = {'dose'};
0025 end
0026
0027 properties
0028 parameters = {30};
0029 penalty = 1;
0030 end
0031
0032 methods
0033 function obj = matRad_SquaredOverdosing(penalty,dMax)
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(dMax)
0049 obj.parameters{1} = dMax;
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 overdose = dose - obj.parameters{1};
0062
0063
0064 overdose(overdose<0) = 0;
0065
0066
0067 fDose = obj.penalty/numel(dose) * (overdose'*overdose);
0068 end
0069
0070
0071 function fDoseGrad = computeDoseObjectiveGradient(obj,dose)
0072
0073 overdose = dose - obj.parameters{1};
0074
0075
0076 overdose(overdose<0) = 0;
0077
0078
0079 fDoseGrad = 2 * obj.penalty/numel(dose) * overdose;
0080 end
0081 end
0082
0083 end