This is a script file.
0001 classdef matRad_VariableRBEProjection < matRad_EffectProjection
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 methods
0018 function obj = matRad_VariableRBEProjection()
0019 end
0020
0021 function RBExD = computeSingleScenario(obj,dij,scen,w)
0022 effect = computeSingleScenario@matRad_EffectProjection(obj,dij,scen,w);
0023 RBExD = zeros(dij.doseGrid.numOfVoxels,1);
0024 RBExD(dij.ixDose) = sqrt((effect(dij.ixDose)./dij.bx(dij.ixDose))+(dij.gamma(dij.ixDose).^2)) - dij.gamma(dij.ixDose);
0025 end
0026
0027 function wGrad = projectSingleScenarioGradient(obj,dij,doseGrad,scen,w)
0028 if isempty(dij.mAlphaDose{scen}) || isempty(dij.mSqrtBetaDose{scen})
0029 wGrad = [];
0030 matRad_cfg = MatRad_Config.instance();
0031 matRad_cfg.dispWarning('Empty scenario in optimization detected! This should not happen...\n');
0032 else
0033
0034
0035 obj = obj.compute(dij,w);
0036
0037
0038 scaledEffect = obj.d{scen} + dij.gamma;
0039 doseGradTmp = zeros(dij.doseGrid.numOfVoxels,1);
0040 doseGradTmp(dij.ixDose) = doseGrad{scen}(dij.ixDose) ./ (2*dij.bx(dij.ixDose).*scaledEffect(dij.ixDose));
0041
0042
0043 vBias = (doseGradTmp' * dij.mAlphaDose{scen})';
0044 quadTerm = dij.mSqrtBetaDose{scen} * w;
0045 mPsi = (2*(doseGrad{scen}.*quadTerm)' * dij.mSqrtBetaDose{scen})';
0046 wGrad = vBias + mPsi;
0047 end
0048 end
0049 end
0050 end
0051