This is a script file.
0001 classdef (Abstract) matRad_DoseOptimizationFunction
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 properties (Abstract, Constant)
0020 name
0021 parameterNames
0022 parameterTypes
0023 end
0024
0025 properties (Abstract, Access = public)
0026 parameters
0027 end
0028
0029 methods
0030 function obj = matRad_DoseOptimizationFunction(dataStruct)
0031 if nargin > 0 && ~isempty(dataStruct) && isstruct(dataStruct)
0032 obj = assignCommonPropertiesFromStruct(obj,dataStruct);
0033 end
0034 end
0035
0036
0037
0038 function s = struct(obj)
0039 s.className = class(obj);
0040 s.parameters = obj.parameters;
0041 end
0042 end
0043
0044
0045 methods (Access = public)
0046 function doseParams = getDoseParameters(obj)
0047
0048 ix = cellfun(@(c) isequal('dose',c),obj.parameterTypes);
0049 doseParams = [obj.parameters{ix}];
0050 end
0051
0052 function obj = setDoseParameters(obj,doseParams)
0053
0054 ix = cellfun(@(c) isequal('dose',c),obj.parameterTypes);
0055 obj.parameters(ix) = num2cell(doseParams);
0056
0057 end
0058 end
0059
0060 methods (Access = private)
0061 function obj = assignCommonPropertiesFromStruct(obj,s)
0062 for fn = fieldnames(s)'
0063 try
0064 obj.(fn{1}) = s.(fn{1});
0065 catch
0066 continue;
0067
0068
0069 end
0070 end
0071 end
0072 end
0073
0074
0075 methods (Static)
0076
0077 function obj = createInstanceFromStruct(s)
0078 try
0079
0080
0081 if isfield(s,'type')
0082 s = matRad_DoseOptimizationFunction.convertOldOptimizationStruct(s);
0083 end
0084
0085
0086 obj = eval([s.className '(s)']);
0087
0088 env = matRad_getEnvironment();
0089
0090
0091
0092 if strcmp(env,'OCTAVE')
0093 obj = assignCommonPropertiesFromStruct(obj,s);
0094 end
0095
0096 catch ME
0097 error(['Could not instantiate Optimization Function: ' ME.message]);
0098 end
0099 end
0100
0101 function s = convertOldOptimizationStruct(old_s)
0102
0103 switch old_s.type
0104
0105 case 'square deviation'
0106 s.className = 'DoseObjectives.matRad_SquaredDeviation';
0107 s.penalty = old_s.penalty;
0108 s.parameters{1} = old_s.dose;
0109
0110 case 'square overdosing'
0111 s.className = 'DoseObjectives.matRad_SquaredOverdosing';
0112 s.penalty = old_s.penalty;
0113 s.parameters{1} = old_s.dose;
0114
0115 case 'square underdosing'
0116 s.className = 'DoseObjectives.matRad_SquaredUnderdosing';
0117 s.penalty = old_s.penalty;
0118 s.parameters{1} = old_s.dose;
0119
0120 case 'min DVH objective'
0121 s.className = 'DoseObjectives.matRad_MinDVH';
0122 s.parameters{1} = old_s.dose;
0123 s.parameters{2} = old_s.volume;
0124
0125 case 'max DVH objective'
0126 s.className = 'DoseObjectives.matRad_MaxDVH';
0127 s.parameters{1} = old_s.dose;
0128 s.parameters{2} = old_s.volume;
0129
0130 case 'mean'
0131 s.className = 'DoseObjectives.matRad_MeanDose';
0132 s.parameters{1} = old_s.dose;
0133
0134 case 'EUD'
0135 s.className = 'DoseObjectives.matRad_EUD';
0136 s.parameters{1} = old_s.dose;
0137 s.parameters{2} = old_s.EUD;
0138
0139
0140 case 'max dose constraint'
0141 s.className = 'DoseConstraints.matRad_MinMaxDose';
0142 s.parameters{1} = 0;
0143 s.parameters{2} = old_s.dose;
0144
0145 case 'min dose constraint'
0146 s.className = 'DoseConstraints.matRad_MinMaxDose';
0147 s.parameters{1} = old_s.dose;
0148 s.parameters{2} = Inf;
0149
0150 case 'min mean dose constraint'
0151 s.className = 'DoseConstraints.matRad_MinMaxMeanDose';
0152 s.parameters{1} = old_s.dose;
0153 s.parameters{2} = Inf;
0154
0155 case 'max mean dose constraint'
0156 s.className = 'DoseConstraints.matRad_MinMaxMeanDose';
0157 s.parameters{1} = 0;
0158 s.parameters{2} = old_s.dose;
0159
0160
0161 case 'min EUD constraint'
0162 s.className = 'DoseConstraints.matRad_MinMaxEUD';
0163 s.parameters{1} = old_s.EUD;
0164 s.parameters{2} = old_s.dose;
0165 s.parameters{3} = Inf;
0166
0167 case 'max EUD constraint'
0168 s.className = 'DoseConstraints.matRad_MinMaxEUD';
0169 S.parameters{1} = old_s.EUD;
0170 s.parameters{2} = 0;
0171 s.parameters{3} = old_s.dose;
0172
0173 case 'max DVH constraint'
0174 s.className = 'DoseConstraints.matRad_MinMaxDVH';
0175 s.parameters{1} = old_s.dose;
0176 s.parameters{2} = 0;
0177 s.parameters{3} = old_s.volume;
0178
0179 case 'min DVH constraint'
0180 s.className = 'DoseConstraints.matRad_MinMaxDVH';
0181 s.parameters{1} = old_s.dose;
0182 s.parameters{2} = old_s.volume;
0183 s.parameters{3} = 100;
0184 otherwise
0185 ME = MException('optimization:ObjectCreationFailed','Old versioned input struct / parameter invalid for creation of optimization function!');
0186 throw(ME);
0187 end
0188 end
0189 end
0190 end
0191