Skip to content

Commit a16756f

Browse files
committed
add some basic tests to cover VHEE engine for both divergent and focused beam
1 parent 1751463 commit a16756f

File tree

4 files changed

+88
-9
lines changed

4 files changed

+88
-9
lines changed

test/doseCalc/test_Analytical.m

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,6 @@
1111
engine = DoseEngines.matRad_ParticleAnalyticalBortfeldEngine.getEngineFromPln(testData.pln);
1212
assertTrue(isa(engine,'DoseEngines.matRad_ParticleAnalyticalBortfeldEngine'));
1313

14-
% Double Gaussian lateral model
15-
% If you don't have my clusterDose basedata you cannot try this :P
16-
%{
17-
testData.pln = struct('radiationMode','protons','machine','Generic_clusterDose');
18-
testData.pln.propDoseCalc.engine = 'AnalyticalPB';
19-
engine = DoseEngines.matRad_ParticleAnalyticalBortfeldEngine.getEngineFromPln(testData.pln);
20-
assertTrue(isa(engine,'DoseEngines.matRad_ParticleAnalyticalBortfeldEngine'));
21-
%}
22-
2314
function test_loadMachineForAnalytical
2415
possibleRadModes = DoseEngines.matRad_ParticleAnalyticalBortfeldEngine.possibleRadiationModes;
2516
for i = 1:numel(possibleRadModes)

test/doseCalc/test_HongPB.m

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
function test_suite = test_HongPB
2+
3+
test_functions=localfunctions();
4+
5+
initTestSuite;
6+
7+
function test_getHongPBEngineFromPln
8+
% Single gaussian lateral model
9+
testData.pln = struct('radiationMode','protons','machine','Generic');
10+
testData.pln.propDoseCalc.engine = 'HongPB';
11+
engine = DoseEngines.matRad_ParticleHongPencilBeamEngine.getEngineFromPln(testData.pln);
12+
assertTrue(isa(engine,'DoseEngines.matRad_ParticleHongPencilBeamEngine'));
13+
14+
function test_loadMachineForHongPB
15+
possibleRadModes = DoseEngines.matRad_ParticleHongPencilBeamEngine.possibleRadiationModes;
16+
for i = 1:numel(possibleRadModes)
17+
machine = DoseEngines.matRad_ParticleHongPencilBeamEngine.loadMachine(possibleRadModes{i},'Generic');
18+
assertTrue(isstruct(machine));
19+
assertTrue(isfield(machine, 'meta'));
20+
assertTrue(isfield(machine.meta, 'radiationMode'));
21+
assertTrue(strcmp(machine.meta.radiationMode, possibleRadModes{i}));
22+
end
23+
24+
function test_calcDoseHongPBprotons
25+
testData = load('protons_testData.mat');
26+
assertTrue(DoseEngines.matRad_ParticleHongPencilBeamEngine.isAvailable(testData.pln))
27+
testData.pln.propDoseCalc.engine = 'HongPB';
28+
resultGUI = matRad_calcDoseForward(testData.ct, testData.cst, testData.stf, testData.pln, ones(sum([testData.stf(:).totalNumOfBixels]),1));
29+
30+
assertTrue(isfield(resultGUI, 'physicalDose'));
31+
assertTrue(isfield(resultGUI, 'w'));
32+
assertTrue(isequal(testData.ct.cubeDim, size(resultGUI.physicalDose)));
33+
34+
function test_calcDoseHongPBhelium
35+
testData = load('helium_testData.mat');
36+
assertTrue(DoseEngines.matRad_ParticleHongPencilBeamEngine.isAvailable(testData.pln))
37+
testData.pln.propDoseCalc.engine = 'HongPB';
38+
resultGUI = matRad_calcDoseForward(testData.ct, testData.cst, testData.stf, testData.pln, ones(sum([testData.stf(:).totalNumOfBixels]),1));
39+
40+
assertTrue(isfield(resultGUI, 'physicalDose'));
41+
assertTrue(isfield(resultGUI, 'w'));
42+
assertTrue(isequal(testData.ct.cubeDim, size(resultGUI.physicalDose)));
43+
44+
function test_calcDoseHongPBcarbon
45+
testData = load('carbon_testData.mat');
46+
assertTrue(DoseEngines.matRad_ParticleHongPencilBeamEngine.isAvailable(testData.pln))
47+
testData.pln.propDoseCalc.engine = 'HongPB';
48+
resultGUI = matRad_calcDoseForward(testData.ct, testData.cst, testData.stf, testData.pln, ones(sum([testData.stf(:).totalNumOfBixels]),1));
49+
50+
assertTrue(isfield(resultGUI, 'physicalDose'));
51+
assertTrue(isfield(resultGUI, 'w'));
52+
assertTrue(isequal(testData.ct.cubeDim, size(resultGUI.physicalDose)));
53+
54+
function test_calcDoseHongPBVHEE
55+
testData = load('VHEE_testData.mat');
56+
assertTrue(DoseEngines.matRad_ParticleHongPencilBeamEngine.isAvailable(testData.pln))
57+
testData.pln.propDoseCalc.engine = 'HongPB';
58+
resultGUI = matRad_calcDoseForward(testData.ct, testData.cst, testData.stf, testData.pln, ones(sum([testData.stf(:).totalNumOfBixels]),1));
59+
60+
assertTrue(isfield(resultGUI, 'physicalDose'));
61+
assertTrue(isfield(resultGUI, 'w'));
62+
assertTrue(isequal(testData.ct.cubeDim, size(resultGUI.physicalDose)));
63+
64+
function test_calcDoseHongPBVHEE_Focused
65+
testData = load('VHEE_testData_Focused.mat');
66+
assertTrue(DoseEngines.matRad_ParticleHongPencilBeamEngine.isAvailable(testData.pln))
67+
testData.pln.propDoseCalc.engine = 'HongPB';
68+
resultGUI = matRad_calcDoseForward(testData.ct, testData.cst, testData.stf, testData.pln, ones(sum([testData.stf(:).totalNumOfBixels]),1));
69+
70+
assertTrue(isfield(resultGUI, 'physicalDose'));
71+
assertTrue(isfield(resultGUI, 'w'));
72+
assertTrue(isequal(testData.ct.cubeDim, size(resultGUI.physicalDose)));
73+
74+
function test_nonSupportedSettings
75+
% Radiation mode other than protons not implemented
76+
testData = load('photons_testData.mat');
77+
testData.pln.propDoseCalc.engine = 'HongPB';
78+
assertFalse(DoseEngines.matRad_ParticleHongPencilBeamEngine.isAvailable(testData.pln));
79+
80+
% Invalid machine without radiation mode field
81+
testData.pln.machine = 'Empty';
82+
testData.pln.propDoseCalc.engine = 'HongPB';
83+
assertExceptionThrown(@() DoseEngines.matRad_ParticleHongPencilBeamEngine.isAvailable(testData.pln));
84+
assertFalse(DoseEngines.matRad_ParticleHongPencilBeamEngine.isAvailable(testData.pln,[]));
85+
86+
87+
88+

test/testData/VHEE_testData.mat

41.8 KB
Binary file not shown.
91.4 KB
Binary file not shown.

0 commit comments

Comments
 (0)