Skip to content

Commit ab401ce

Browse files
committed
add HongPB dose calculation tests
1 parent 6f7b87e commit ab401ce

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

test/doseCalc/test_HongPB.m

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
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+
27+
assertTrue(DoseEngines.matRad_ParticleHongPencilBeamEngine.isAvailable(testData.pln));
28+
29+
testData.pln.propDoseCalc.engine = 'HongPB';
30+
testData.pln.propDoseCalc.dosimetricLateralCutOff = 0.995;
31+
testData.pln.propDoseCalc.geometricLateralCutOff = 50;
32+
resultGUI = matRad_calcDoseForward(testData.ct, testData.cst, testData.stf, testData.pln, ones(sum([testData.stf(:).totalNumOfBixels]),1));
33+
34+
assertTrue(isequal(fieldnames(resultGUI),fieldnames(testData.resultGUI)));
35+
assertTrue(isequal(testData.ct.cubeDim, size(resultGUI.physicalDose)));
36+
assertElementsAlmostEqual(resultGUI.physicalDose,testData.resultGUI.physicalDose,'relative',1e-2);
37+
38+
function test_calcDoseHongPBhelium
39+
testData = load('helium_testData.mat');
40+
assertTrue(DoseEngines.matRad_ParticleHongPencilBeamEngine.isAvailable(testData.pln));
41+
42+
testData.pln.propDoseCalc.engine = 'HongPB';
43+
testData.pln.propDoseCalc.dosimetricLateralCutOff = 0.995;
44+
testData.pln.propDoseCalc.geometricLateralCutOff = 50;
45+
resultGUI = matRad_calcDoseForward(testData.ct, testData.cst, testData.stf, testData.pln, ones(sum([testData.stf(:).totalNumOfBixels]),1));
46+
47+
assertTrue(isequal(fieldnames(resultGUI),fieldnames(testData.resultGUI)));
48+
assertTrue(isequal(testData.ct.cubeDim, size(resultGUI.physicalDose)));
49+
assertElementsAlmostEqual(resultGUI.physicalDose,testData.resultGUI.physicalDose,'relative',1e-2);
50+
51+
function test_calcDoseHongPBcarbon
52+
testData = load('carbon_testData.mat');
53+
assertTrue(DoseEngines.matRad_ParticleHongPencilBeamEngine.isAvailable(testData.pln));
54+
55+
testData.pln.propDoseCalc.engine = 'HongPB';
56+
testData.pln.propDoseCalc.dosimetricLateralCutOff = 0.995;
57+
testData.pln.propDoseCalc.geometricLateralCutOff = 50;
58+
resultGUI = matRad_calcDoseForward(testData.ct, testData.cst, testData.stf, testData.pln, ones(sum([testData.stf(:).totalNumOfBixels]),1));
59+
60+
assertTrue(isequal(fieldnames(resultGUI),fieldnames(testData.resultGUI)));
61+
assertTrue(isequal(testData.ct.cubeDim, size(resultGUI.physicalDose)));
62+
assertElementsAlmostEqual(resultGUI.physicalDose,testData.resultGUI.physicalDose,'relative',1e-2);
63+
64+
65+
function test_nonSupportedSettings
66+
% Radiation mode other than protons not implemented
67+
testData = load('photons_testData.mat');
68+
testData.pln.propDoseCalc.engine = 'HongPB';
69+
assertFalse(DoseEngines.matRad_ParticleHongPencilBeamEngine.isAvailable(testData.pln));
70+
71+
% Invalid machine without radiation mode field
72+
testData.pln.machine = 'Empty';
73+
testData.pln.propDoseCalc.engine = 'HongPB';
74+
assertExceptionThrown(@() DoseEngines.matRad_ParticleHongPencilBeamEngine.isAvailable(testData.pln));
75+
assertFalse(DoseEngines.matRad_ParticleHongPencilBeamEngine.isAvailable(testData.pln,[]));
76+
77+
78+
79+

0 commit comments

Comments
 (0)