This is a script file.
0001 classdef matRad_MaxDVH < 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 = 'Max DVH';
0023 parameterNames = {'d', 'V^{max}'};
0024 parameterTypes = {'dose','numeric'};
0025 end
0026
0027 properties
0028 parameters = {30,95};
0029 penalty = 1;
0030 end
0031
0032 methods
0033 function obj = matRad_MaxDVH(penalty,dRef,vMaxPercent)
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 >= 3 && isscalar(vMaxPercent)
0049 obj.parameters{2} = vMaxPercent;
0050 end
0051
0052 if nargin >= 2 && isscalar(dRef)
0053 obj.parameters{1} = dRef;
0054 end
0055
0056 if nargin >= 1 && isscalar(penalty)
0057 obj.penalty = penalty;
0058 end
0059 end
0060 end
0061
0062
0063 function fDose = computeDoseObjectiveFunction(obj,dose)
0064
0065 refVol = obj.parameters{2}/100;
0066
0067
0068 deviation = dose - obj.parameters{1};
0069
0070
0071 d_ref2 = matRad_calcInversDVH(refVol,dose);
0072
0073
0074 deviation(dose < obj.parameters{1} | dose > d_ref2) = 0;
0075
0076
0077 fDose = (obj.penalty/numel(dose))*(deviation'*deviation);
0078 end
0079
0080
0081 function fDoseGrad = computeDoseObjectiveGradient(obj,dose)
0082
0083 refVol = obj.parameters{2}/100;
0084
0085
0086 deviation = dose - obj.parameters{1};
0087
0088
0089 d_ref2 = matRad_calcInversDVH(refVol,dose);
0090
0091 deviation(dose < obj.parameters{1} | dose > d_ref2) = 0;
0092
0093
0094 fDoseGrad = 2 * (obj.penalty/numel(dose))*deviation;
0095 end
0096 end
0097
0098 end