Skip to content

Commit c227f61

Browse files
committed
fix for missing constant RBE in effect projection
1 parent 4881d26 commit c227f61

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

matRad/optimization/projections/matRad_EffectProjection.m

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
effect = [];
3636
matRad_cfg = MatRad_Config.instance();
3737
matRad_cfg.dispWarning('Empty dij.ax scenario in optimization detected! This should not happen...\n');
38-
elseif isfield(dij,'RBE') && dij.RBE == 1.1
38+
elseif isfield(dij,'RBE') && (isscalar(dij.RBE) || numel(dij.RBE) == size(dij.physicalDose{scen},1)) && all(isfinite(dij.RBE))
3939
effect = dij.ax{ctScen} .* (dij.physicalDose{scen} * w .* dij.RBE) + dij.bx{ctScen} .* (dij.physicalDose{scen} * w .* dij.RBE).^2;
4040
else
4141
effect = dij.ax{ctScen} .* (dij.physicalDose{scen} * w) + dij.bx{ctScen} .* (dij.physicalDose{scen}*w).^2;
@@ -50,10 +50,10 @@
5050
matRad_cfg = MatRad_Config.instance();
5151
matRad_cfg.dispWarning('Empty mAlphaDose scenario in optimization detected! This should not happen...\n');
5252
else
53-
vBias = (doseGrad{scen}' * dij.mAlphaDose{scen})';
53+
alphaTerm = (doseGrad{scen}' * dij.mAlphaDose{scen})';
5454
quadTerm = dij.mSqrtBetaDose{scen} * w;
55-
mPsi = (2*(doseGrad{scen}.*quadTerm)' * dij.mSqrtBetaDose{scen})';
56-
wGrad = vBias + mPsi;
55+
betaTerm = (2*(doseGrad{scen}.*quadTerm)' * dij.mSqrtBetaDose{scen})';
56+
wGrad = alphaTerm + betaTerm;
5757
end
5858
else
5959
[ctScen,~,~] = ind2sub(size(dij.physicalDose),scen); %TODO: Workaround for now
@@ -62,10 +62,18 @@
6262
matRad_cfg = MatRad_Config.instance();
6363
matRad_cfg.dispWarning('Empty dij.ax/dij.bx scenario in optimization detected! This should not happen...\n');
6464
else
65-
vBias = ((doseGrad{scen}.*dij.ax{ctScen})' * dij.physicalDose{scen})';
66-
quadTerm = dij.physicalDose{scen} * w;
67-
mPsi = (2*(doseGrad{scen}.*quadTerm.*dij.bx{ctScen})' * dij.physicalDose{scen})';
68-
wGrad = vBias + mPsi;
65+
physDose = dij.physicalDose{scen} * w;
66+
if isfield(dij,'RBE') && (isscalar(dij.RBE) || numel(dij.RBE) == size(dij.physicalDose{scen},1)) && all(isfinite(dij.RBE))
67+
alpha = dij.ax{ctScen} .* dij.RBE;
68+
beta = dij.bx{ctScen} .* dij.RBE.^2;
69+
else
70+
alpha = dij.ax{ctScen};
71+
beta = dij.bx{ctScen};
72+
end
73+
alphaTerm = ((doseGrad{scen} .* alpha)' * dij.physicalDose{scen})';
74+
betaTerm = (2 * (doseGrad{scen} .* physDose .* beta)' * dij.physicalDose{scen})';
75+
76+
wGrad = alphaTerm + betaTerm;
6977
end
7078
end
7179
end
@@ -93,10 +101,10 @@
93101
if isempty(dij.mAlphaDoseExp{scen}) || isempty(dij.mSqrtBetaDoseExp{scen})
94102
wGrad = [];
95103
else
96-
vBias = (dExpGrad{scen}' * dij.mAlphaDoseExp{scen})';
104+
alphaTerm = (dExpGrad{scen}' * dij.mAlphaDoseExp{scen})';
97105
quadTerm = dij.mSqrtBetaDoseExp{scen} * w;
98-
mPsi = (2*(dExpGrad{scen}.*quadTerm)' * dij.mSqrtBetaDoseExp{scen})';
99-
wGrad = vBias + mPsi;
106+
betaTerm = (2*(dExpGrad{scen}.*quadTerm)' * dij.mSqrtBetaDoseExp{scen})';
107+
wGrad = alphaTerm + betaTerm;
100108
wGrad = wGrad + 2 * dOmegaVgrad;
101109
end
102110
end

0 commit comments

Comments
 (0)