forked from eric11210/matRad
-
Notifications
You must be signed in to change notification settings - Fork 0
/
matRad_directApertureOptimization.m
83 lines (73 loc) · 3 KB
/
matRad_directApertureOptimization.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
function optResult = matRad_directApertureOptimization(dij,cst,apertureInfo,optResult,visBool,varargin)
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% matRad function to run direct aperture optimization
%
% call
% optResult = matRad_directApertureOptimization(dij,cst,apertureInfo,visBool,varargin)
%
% input
% input
% dij: matRad dij struct
% cst: matRad cst struct
% shaoInfo: aperture shape info struct
% optResult: resultGUI struct to which the output data will be added, if
% this field is empty optResult struct will be created
% (optional)
% visBool: plots the objective function value in dependence of the
% number of iterations
% varargin: optinal: convergence criteria for optimization and biological
% optimization mode
%
% output
% optResult: struct containing optimized fluence vector, dose, and shape
% info
%
% References
% [1] http://dx.doi.org/10.1118/1.4914863
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Copyright 2015, Mark Bangert, on behalf of the matRad development team
%
%
% This file is part of matRad.
%
% matrad is free software: you can redistribute it and/or modify it under
% the terms of the GNU General Public License as published by the Free
% Software Foundation, either version 3 of the License, or (at your option)
% any later version.
%
% matRad is distributed in the hope that it will be useful, but WITHOUT ANY
% WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
% details.
%
% You should have received a copy of the GNU General Public License in the
% file license.txt along with matRad. If not, see
% <http://www.gnu.org/licenses/>.
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if nargin < 5
visBool = 0;
end
% adjust overlap priorities
cst = matRad_setOverlapPriorities(cst);
% get initial vector for optimization
initApertureInfoVec = apertureInfo.apertureVector;
% set objective function
objFunc = @(x) matRad_daoObjFunc(x,apertureInfo,dij,cst);
% set projection function
projFunc = @(x) matRad_daoProjectionFunction(x,apertureInfo.limMx,apertureInfo.totalNumOfShapes);
% verify gradients
%matRad_verifyGradient(objFunc,initapertureInfoVec);
% minimize objetive function
optApertureInfoVec = matRad_projectedLBFGS(objFunc,projFunc,initApertureInfoVec,visBool,varargin);
% update the apertureInfoStruct and calculate bixel weights
optResult.apertureInfo = matRad_daoVec2ApertureInfo(apertureInfo,optApertureInfoVec);
% override also bixel weight vector in optResult struct
optResult.w = optResult.apertureInfo.bixelWeights;
optResult.wDao = optResult.apertureInfo.bixelWeights;
% calc dose and reshape from 1D vector to 3D array
optResult.physicalDose = reshape(dij.physicalDose*optResult.w,dij.dimensions);