|
35 | 35 | effect = []; |
36 | 36 | matRad_cfg = MatRad_Config.instance(); |
37 | 37 | 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)) |
39 | 39 | effect = dij.ax{ctScen} .* (dij.physicalDose{scen} * w .* dij.RBE) + dij.bx{ctScen} .* (dij.physicalDose{scen} * w .* dij.RBE).^2; |
40 | 40 | else |
41 | 41 | effect = dij.ax{ctScen} .* (dij.physicalDose{scen} * w) + dij.bx{ctScen} .* (dij.physicalDose{scen}*w).^2; |
|
50 | 50 | matRad_cfg = MatRad_Config.instance(); |
51 | 51 | matRad_cfg.dispWarning('Empty mAlphaDose scenario in optimization detected! This should not happen...\n'); |
52 | 52 | else |
53 | | - vBias = (doseGrad{scen}' * dij.mAlphaDose{scen})'; |
| 53 | + alphaTerm = (doseGrad{scen}' * dij.mAlphaDose{scen})'; |
54 | 54 | 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; |
57 | 57 | end |
58 | 58 | else |
59 | 59 | [ctScen,~,~] = ind2sub(size(dij.physicalDose),scen); %TODO: Workaround for now |
|
62 | 62 | matRad_cfg = MatRad_Config.instance(); |
63 | 63 | matRad_cfg.dispWarning('Empty dij.ax/dij.bx scenario in optimization detected! This should not happen...\n'); |
64 | 64 | 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; |
69 | 77 | end |
70 | 78 | end |
71 | 79 | end |
|
93 | 101 | if isempty(dij.mAlphaDoseExp{scen}) || isempty(dij.mSqrtBetaDoseExp{scen}) |
94 | 102 | wGrad = []; |
95 | 103 | else |
96 | | - vBias = (dExpGrad{scen}' * dij.mAlphaDoseExp{scen})'; |
| 104 | + alphaTerm = (dExpGrad{scen}' * dij.mAlphaDoseExp{scen})'; |
97 | 105 | 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; |
100 | 108 | wGrad = wGrad + 2 * dOmegaVgrad; |
101 | 109 | end |
102 | 110 | end |
|
0 commit comments