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+
0 commit comments