Skip to content

Commit 334a4ca

Browse files
committed
tests for dose objectives
1 parent f87e333 commit 334a4ca

File tree

8 files changed

+372
-1
lines changed

8 files changed

+372
-1
lines changed

matRad/optimization/+DoseObjectives/matRad_EUD.m

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@
9696
fDoseGrad = 2 * nthroot(1/numel(dose),k) * powersum^((1-k)/k) * (dose.^(k-1)) .* (nthroot(powersum/numel(dose),k) - obj.parameters{1});
9797
%end
9898
if any(~isfinite(fDoseGrad)) % check for inf and nan for numerical stability
99-
error(['EUD computation failed. Reduce exponent to resolve numerical problems.']);
99+
matRad_cfg = MatRad_Config.instance();
100+
matRad_cfg.dispError(['EUD computation failed. Reduce exponent to resolve numerical problems.']);
100101
end
101102
end
102103
end
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
function test_suite = test_doseObejctiveEUD
2+
3+
test_functions=localfunctions();
4+
5+
initTestSuite;
6+
7+
function test_doseObjective_EUD_construct
8+
9+
obj = DoseObjectives.matRad_EUD(); %default
10+
assertTrue(isobject(obj));
11+
assertTrue(isa(obj, 'DoseObjectives.matRad_EUD'));
12+
assertEqual(obj.parameters{1},0);
13+
assertEqual(obj.parameters{2},3.5);
14+
assertEqual(obj.penalty,1);
15+
16+
obj = DoseObjectives.matRad_EUD(100,60,3.5);
17+
assertTrue(isobject(obj));
18+
assertTrue(isa(obj, 'DoseObjectives.matRad_EUD'));
19+
20+
function test_doseObjective_EUD_computeObjFunction
21+
22+
obj = DoseObjectives.matRad_EUD(100,60,3.5);
23+
24+
dose = [55,58,60,62,65]';
25+
test_fDose = computeDoseObjectiveFunction(obj,dose);
26+
expected_fDose = 0.0579;
27+
28+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
29+
30+
dose = [55,58,60,nan,65]';
31+
test_fDose = computeDoseObjectiveFunction(obj,dose);
32+
33+
assertTrue(isnan(test_fDose));
34+
35+
36+
function test_doseObjective_EUD_computeGradient
37+
38+
obj = DoseObjectives.matRad_EUD(100,10,2);
39+
40+
dose = [55,58,60,62,65]';
41+
test_fDose = computeDoseObjectiveGradient(obj,dose);
42+
expected_fDose = [ 18.3392 19.3395 20.0064 20.6733 21.6736]';
43+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
44+
45+
dose = [55,58,60,nan,65]';
46+
assertExceptionThrown(@()computeDoseObjectiveGradient(obj,dose),'matRad:Error')
47+
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
function test_suite = test_doseObejctiveMaxDVH
2+
3+
test_functions=localfunctions();
4+
5+
initTestSuite;
6+
7+
function test_doseObjective_MaxDVH_construct
8+
9+
obj = DoseObjectives.matRad_MaxDVH(); %default
10+
assertTrue(isobject(obj));
11+
assertTrue(isa(obj, 'DoseObjectives.matRad_MaxDVH'));
12+
assertEqual(obj.parameters{1},30);
13+
assertEqual(obj.parameters{2},95);
14+
assertEqual(obj.penalty,1);
15+
16+
obj = DoseObjectives.matRad_MaxDVH(100,30,95);
17+
assertTrue(isobject(obj));
18+
assertTrue(isa(obj, 'DoseObjectives.matRad_MaxDVH'));
19+
20+
function test_doseObjective_MaxDVH_computeObjFunction
21+
22+
obj = DoseObjectives.matRad_MaxDVH(100,60,50);
23+
24+
dose = [55,58,60,62,65]';
25+
test_fDose = computeDoseObjectiveFunction(obj,dose);
26+
expected_fDose = 0;
27+
28+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
29+
30+
obj = DoseObjectives.matRad_MaxDVH(100,50,95);
31+
32+
dose = [55,58,60,62,65]';
33+
test_fDose = computeDoseObjectiveFunction(obj,dose);
34+
expected_fDose = 5;
35+
36+
37+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
38+
39+
dose = [55,58,60,nan,65]';
40+
test_fDose = computeDoseObjectiveFunction(obj,dose);
41+
42+
assertTrue(isnan(test_fDose));
43+
44+
45+
function test_doseObjective_MaxDVH_computeGradient
46+
47+
obj = DoseObjectives.matRad_MaxDVH(100,50,95);
48+
49+
dose = [55,58,60,62,65]';
50+
test_fDose = computeDoseObjectiveGradient(obj,dose);
51+
expected_fDose = [ 2 0 0 0 0]';
52+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
53+
54+
dose = [55,58,60,nan,65]';
55+
test_fDose = computeDoseObjectiveGradient(obj,dose);
56+
57+
assertTrue(isnan(test_fDose(4)));
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
function test_suite = test_doseObejctiveMinDVH
2+
3+
test_functions=localfunctions();
4+
5+
initTestSuite;
6+
7+
function test_doseObjective_MinDVH_construct
8+
9+
obj = DoseObjectives.matRad_MinDVH(); %default
10+
assertTrue(isobject(obj));
11+
assertTrue(isa(obj, 'DoseObjectives.matRad_MinDVH'));
12+
assertEqual(obj.parameters{1},60);
13+
assertEqual(obj.parameters{2},95);
14+
assertEqual(obj.penalty,1);
15+
16+
obj = DoseObjectives.matRad_MinDVH(100,60,95);
17+
assertTrue(isobject(obj));
18+
assertTrue(isa(obj, 'DoseObjectives.matRad_MinDVH'));
19+
20+
function test_doseObjective_MinDVH_computeObjFunction
21+
22+
obj = DoseObjectives.matRad_MinDVH(100,60,50);
23+
24+
dose = [55,58,60,62,65]';
25+
test_fDose = computeDoseObjectiveFunction(obj,dose);
26+
expected_fDose = 0;
27+
28+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
29+
30+
obj = DoseObjectives.matRad_MinDVH(100,60,95);
31+
32+
dose = [55,58,60,62,65]';
33+
test_fDose = computeDoseObjectiveFunction(obj,dose);
34+
expected_fDose = 5.8;
35+
36+
37+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
38+
39+
dose = [55,58,60,nan,65]';
40+
test_fDose = computeDoseObjectiveFunction(obj,dose);
41+
42+
assertTrue(isnan(test_fDose));
43+
44+
45+
function test_doseObjective_MinDVH_computeGradient
46+
47+
obj = DoseObjectives.matRad_MinDVH(100,60);
48+
49+
dose = [55,58,60,62,65]';
50+
test_fDose = computeDoseObjectiveGradient(obj,dose);
51+
expected_fDose = [ -2.0000 -0.8000 0 0 0]';
52+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
53+
54+
dose = [55,58,60,nan,65]';
55+
test_fDose = computeDoseObjectiveGradient(obj,dose);
56+
57+
assertTrue(isnan(test_fDose(4)));
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
function test_suite = test_doseObejctiveSquaredDeviation
2+
3+
test_functions=localfunctions();
4+
5+
initTestSuite;
6+
7+
function test_doseObjective_squaredDeviation_construct
8+
9+
obj = DoseObjectives.matRad_SquaredDeviation(); %default
10+
assertTrue(isobject(obj));
11+
assertTrue(isa(obj, 'DoseObjectives.matRad_SquaredDeviation'));
12+
assertEqual(obj.parameters{1},60);
13+
assertEqual(obj.penalty,1);
14+
15+
obj = DoseObjectives.matRad_SquaredDeviation(100,60);
16+
assertTrue(isobject(obj));
17+
assertTrue(isa(obj, 'DoseObjectives.matRad_SquaredDeviation'));
18+
19+
function test_doseObjective_SquaredDeviation_computeObjFunction
20+
21+
obj = DoseObjectives.matRad_SquaredDeviation(100,60);
22+
23+
dose = [55,58,60,62,65]';
24+
test_fDose = computeDoseObjectiveFunction(obj,dose);
25+
expected_fDose = 11.6000;
26+
27+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
28+
29+
dose = [55,58,60,nan,65]';
30+
test_fDose = computeDoseObjectiveFunction(obj,dose);
31+
32+
assertTrue(isnan(test_fDose));
33+
34+
35+
function test_doseObjective_SquaredDeviation_computeGradient
36+
37+
obj = DoseObjectives.matRad_SquaredDeviation(100,60);
38+
39+
dose = [55,58,60,62,65]';
40+
test_fDose = computeDoseObjectiveGradient(obj,dose);
41+
expected_fDose = [-2.0000; -0.8000; 0; 0.8000; 2.0000];
42+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
43+
44+
dose = [55,58,60,nan,65]';
45+
test_fDose = computeDoseObjectiveGradient(obj,dose);
46+
47+
assertTrue(isnan(test_fDose(4)));
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
function test_suite = test_doseObejctiveSquaredOverdosing
2+
3+
test_functions=localfunctions();
4+
5+
initTestSuite;
6+
7+
function test_doseObjective_SquaredOverdosing_construct
8+
obj = DoseObjectives.matRad_SquaredOverdosing(); %default
9+
assertTrue(isobject(obj));
10+
assertTrue(isa(obj, 'DoseObjectives.matRad_SquaredOverdosing'));
11+
assertEqual(obj.parameters{1},30);
12+
assertEqual(obj.penalty,1);
13+
14+
obj = DoseObjectives.matRad_SquaredOverdosing(100,60);
15+
assertTrue(isobject(obj));
16+
assertTrue(isa(obj, 'DoseObjectives.matRad_SquaredOverdosing'));
17+
18+
function test_doseObjective_SquaredOverdosing_computeObjFunction
19+
20+
obj = DoseObjectives.matRad_SquaredOverdosing(100,60);
21+
22+
dose = [55,58,60,62,65]';
23+
test_fDose = computeDoseObjectiveFunction(obj,dose);
24+
expected_fDose = 5.8;
25+
26+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
27+
28+
dose = [55,58,60,nan,65]';
29+
test_fDose = computeDoseObjectiveFunction(obj,dose);
30+
31+
assertTrue(isnan(test_fDose));
32+
33+
34+
function test_doseObjective_SquaredOverdosing_computeGradient
35+
36+
obj = DoseObjectives.matRad_SquaredOverdosing(100,60);
37+
38+
dose = [55,58,60,62,65]';
39+
test_fDose = computeDoseObjectiveGradient(obj,dose);
40+
expected_fDose = [0 0 0 0.8000 2.0000]';
41+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
42+
43+
dose = [55,58,60,nan,65]';
44+
test_fDose = computeDoseObjectiveGradient(obj,dose);
45+
46+
assertTrue(isnan(test_fDose(4)));
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
function test_suite = test_doseObejctiveSquaredUnderdosing
2+
3+
test_functions=localfunctions();
4+
5+
initTestSuite;
6+
7+
function test_doseObjective_SquaredUnderdosing_construct
8+
9+
obj = DoseObjectives.matRad_SquaredUnderdosing(); %default
10+
assertTrue(isobject(obj));
11+
assertTrue(isa(obj, 'DoseObjectives.matRad_SquaredUnderdosing'));
12+
assertEqual(obj.parameters{1},60);
13+
assertEqual(obj.penalty,1);
14+
15+
obj = DoseObjectives.matRad_SquaredUnderdosing(100,60);
16+
assertTrue(isobject(obj));
17+
assertTrue(isa(obj, 'DoseObjectives.matRad_SquaredUnderdosing'));
18+
19+
function test_doseObjective_SquaredUnderdosing_computeObjFunction
20+
21+
obj = DoseObjectives.matRad_SquaredUnderdosing(100,60);
22+
23+
dose = [55,58,60,62,65]';
24+
test_fDose = computeDoseObjectiveFunction(obj,dose);
25+
expected_fDose = 5.8;
26+
27+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
28+
29+
dose = [55,58,60,nan,65]';
30+
test_fDose = computeDoseObjectiveFunction(obj,dose);
31+
32+
assertTrue(isnan(test_fDose));
33+
34+
35+
function test_doseObjective_SquaredUnderdosing_computeGradient
36+
37+
obj = DoseObjectives.matRad_SquaredUnderdosing(100,60);
38+
39+
dose = [55,58,60,62,65]';
40+
test_fDose = computeDoseObjectiveGradient(obj,dose);
41+
expected_fDose = [ -2.0000 -0.8000 0 0 0]';
42+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
43+
44+
dose = [55,58,60,nan,65]';
45+
test_fDose = computeDoseObjectiveGradient(obj,dose);
46+
47+
assertTrue(isnan(test_fDose(4)));

test/test_doseObejctiveMeanDose.m

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
function test_suite = test_doseObejctiveMeanDose
2+
3+
test_functions=localfunctions();
4+
5+
initTestSuite;
6+
7+
function test_doseObjective_squaredDeviation_construct
8+
9+
obj = DoseObjectives.matRad_MeanDose(); %default
10+
assertTrue(isobject(obj));
11+
assertTrue(isa(obj, 'DoseObjectives.matRad_MeanDose'));
12+
assertEqual(obj.parameters{1},0);
13+
assertEqual(obj.parameters{2},1);
14+
assertEqual(obj.penalty,1);
15+
16+
obj = DoseObjectives.matRad_MeanDose(100,0,'Linear');
17+
assertTrue(isobject(obj));
18+
assertTrue(isa(obj, 'DoseObjectives.matRad_MeanDose'));
19+
20+
obj = DoseObjectives.matRad_MeanDose(100,10,4);
21+
assertTrue(isobject(obj));
22+
assertTrue(isa(obj, 'DoseObjectives.matRad_MeanDose'));
23+
assertEqual(obj.parameters{1},10);
24+
assertEqual(obj.parameters{2},1);
25+
26+
function test_doseObjective_MeanDose_computeObjFunction
27+
28+
obj = DoseObjectives.matRad_MeanDose(100,10,'Linear');
29+
30+
dose = [55,58,60,62,65]';
31+
test_fDose = computeDoseObjectiveFunction(obj,dose);
32+
expected_fDose = 50;
33+
34+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
35+
36+
obj = DoseObjectives.matRad_MeanDose(100,0,'Quadratic');
37+
38+
dose = [55,58,60,62,65]';
39+
test_fDose = computeDoseObjectiveFunction(obj,dose);
40+
expected_fDose = 3600;
41+
42+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
43+
44+
dose = [55,58,60,nan,65]';
45+
test_fDose = computeDoseObjectiveFunction(obj,dose);
46+
47+
assertTrue(isnan(test_fDose));
48+
49+
50+
function test_doseObjective_MeanDose_computeGradient
51+
52+
obj = DoseObjectives.matRad_MeanDose(100,0,'Linear');
53+
54+
dose = [55,58,60,62,65]';
55+
test_fDose = computeDoseObjectiveGradient(obj,dose);
56+
expected_fDose = [0.2; 0.2; 0.2; 0.2; 0.2];
57+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
58+
59+
obj = DoseObjectives.matRad_MeanDose(100,0,'Quadratic');
60+
61+
dose = [55,58,60,62,65]';
62+
test_fDose = computeDoseObjectiveGradient(obj,dose);
63+
expected_fDose = [24; 24; 24; 24; 24];
64+
assertElementsAlmostEqual(test_fDose,expected_fDose,'absolute', 1e-4);
65+
66+
dose = [55,58,60,nan,65]';
67+
test_fDose = computeDoseObjectiveGradient(obj,dose);
68+
69+
assertTrue(isnan(test_fDose(4)));

0 commit comments

Comments
 (0)