Skip to content

Commit e2f5153

Browse files
committed
particle stf generator tests
1 parent ecd3f9c commit e2f5153

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
function test_suite = test_stfGeneratorPhotonIMRT
2+
3+
test_functions=localfunctions();
4+
5+
initTestSuite;
6+
7+
function test_basic_construct()
8+
stfGen = matRad_ParticleStfGeneratorIMPT();
9+
assertTrue(isa(stfGen, 'matRad_ParticleStfGeneratorIMPT'));
10+
11+
function test_pln_construct()
12+
load protons_testData.mat
13+
stfGen = matRad_ParticleStfGeneratorIMPT(pln);
14+
stfGen.isAvailable(pln);
15+
assertTrue(isa(stfGen, 'matRad_ParticleStfGeneratorIMPT'));
16+
assertEqual(stfGen.gantryAngles, pln.propStf.gantryAngles);
17+
assertEqual(stfGen.couchAngles, pln.propStf.couchAngles);
18+
assertEqual(stfGen.isoCenter, pln.propStf.isoCenter);
19+
assertEqual(stfGen.radiationMode, pln.radiationMode);
20+
assertEqual(stfGen.machine, pln.machine);
21+
assertEqual(stfGen.bixelWidth, pln.propStf.bixelWidth);
22+
23+
function test_generate_multibeams()
24+
% geometry settings
25+
load protons_testData.mat ct cst pln stf;
26+
27+
stfGen = matRad_ParticleStfGeneratorIMPT(pln);
28+
stf2 = stfGen.generate(ct,cst);
29+
30+
assertTrue(isfield(stf2, 'radiationMode'));
31+
assertTrue(isfield(stf2, 'machine'));
32+
assertTrue(isfield(stf2, 'gantryAngle'));
33+
assertTrue(isfield(stf2, 'couchAngle'));
34+
assertTrue(isfield(stf2, 'isoCenter'));
35+
assertTrue(isfield(stf2, 'bixelWidth'));
36+
assertTrue(isfield(stf2, 'SAD'));
37+
assertTrue(isfield(stf2, 'numOfRays'));
38+
assertTrue(isfield(stf2, 'numOfBixelsPerRay'));
39+
assertTrue(isfield(stf2, 'totalNumOfBixels'));
40+
assertTrue(isfield(stf2, 'sourcePoint'));
41+
assertTrue(isfield(stf2, 'sourcePoint_bev'));
42+
assertTrue(isfield(stf2, 'ray'));
43+
44+
for i = 1:numel(stf2)
45+
46+
assertEqual(stf2(i).totalNumOfBixels,stf(i).totalNumOfBixels);
47+
assertEqual(stf2(i).numOfBixelsPerRay,stf(i).numOfBixelsPerRay);
48+
assertEqual(stf2(i).numOfRays,stf(i).numOfRays);
49+
assertEqual(stf2(i).bixelWidth,stfGen.bixelWidth);
50+
assertEqual(stf2(i).radiationMode,stfGen.radiationMode);
51+
assertEqual(stf2(i).machine,pln.machine);
52+
assertEqual(stf2(i).gantryAngle,stfGen.gantryAngles(i));
53+
assertEqual(stf2(i).couchAngle,stfGen.couchAngles(i));
54+
55+
rotMat = matRad_getRotationMatrix(stf2(i).gantryAngle,stf2(i).couchAngle);
56+
assertEqual(stf2(i).sourcePoint,stf2(i).sourcePoint_bev*rotMat);
57+
assertEqual(stf2(i).sourcePoint_bev,[0 -stf2(i).SAD 0]);
58+
59+
assertTrue(isstruct(stf2(i).ray));
60+
assertEqual(numel(stf2(i).ray),numel(stf(i).ray));
61+
assertEqual(numel(stf2(i).ray),stf2(i).numOfRays);
62+
63+
assertTrue(isfield(stf2(i).ray,'rangeShifter'));
64+
65+
rayPosTest = vertcat(stf2(i).ray.rayPos);
66+
rayPosTest_bev = rayPosTest*rotMat;
67+
rayPos_bevTest = vertcat(stf2(i).ray.rayPos_bev);
68+
rayPosRef = vertcat(stf(i).ray.rayPos);
69+
assertElementsAlmostEqual(sort(rayPosTest,1),sort(rayPosRef,1));
70+
assertElementsAlmostEqual(sort(rayPos_bevTest,1),sort(rayPosTest_bev,1));
71+
72+
targetPointTest = vertcat(stf2(i).ray.targetPoint);
73+
targetPointRef = vertcat(stf(i).ray.targetPoint);
74+
targetPoint_bevTest = vertcat(stf2(i).ray.targetPoint_bev);
75+
targetPoint_bevRef = vertcat(stf(i).ray.targetPoint_bev);
76+
assertElementsAlmostEqual(sort(targetPointTest,1),sort(targetPointRef,1));
77+
assertElementsAlmostEqual(sort(targetPoint_bevTest,1),sort(targetPoint_bevRef,1));
78+
assertElementsAlmostEqual(sort(targetPoint_bevTest,1),sort(targetPointTest*rotMat,1));
79+
80+
energiesTest = [stf2(i).ray.energy];
81+
energiesRef = [stf(i).ray.energy];
82+
assertEqual(unique(energiesTest),unique(energiesRef));
83+
84+
%assertTrue(isscalar(stf2(i).ray.energy));
85+
end

0 commit comments

Comments
 (0)