Skip to content

Commit ecd3f9c

Browse files
committed
photon IMRT stf generator tests
1 parent 96b5ac7 commit ecd3f9c

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
function test_suite = test_stfGeneratorPhotonIMRT
2+
3+
test_functions=localfunctions();
4+
5+
initTestSuite;
6+
7+
function test_basic_construct()
8+
stfGen = matRad_PhotonStfGeneratorIMRT();
9+
assertTrue(isa(stfGen, 'matRad_PhotonStfGeneratorIMRT'));
10+
11+
function test_pln_construct()
12+
load photons_testData.mat
13+
stfGen = matRad_PhotonStfGeneratorIMRT(pln);
14+
stfGen.isAvailable(pln);
15+
assertTrue(isa(stfGen, 'matRad_PhotonStfGeneratorIMRT'));
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 photons_testData.mat ct cst pln stf;
26+
27+
stfGen = matRad_PhotonStfGeneratorIMRT(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, 'SCD'));
38+
assertTrue(isfield(stf2, 'numOfRays'));
39+
assertTrue(isfield(stf2, 'numOfBixelsPerRay'));
40+
assertTrue(isfield(stf2, 'totalNumOfBixels'));
41+
assertTrue(isfield(stf2, 'sourcePoint'));
42+
assertTrue(isfield(stf2, 'sourcePoint_bev'));
43+
assertTrue(isfield(stf2, 'ray'));
44+
45+
for i = 1:numel(stf2)
46+
47+
assertEqual(stf2(i).totalNumOfBixels,stf(i).totalNumOfBixels);
48+
assertEqual(stf2(i).numOfBixelsPerRay,stf(i).numOfBixelsPerRay);
49+
assertEqual(stf2(i).numOfRays,stf(i).numOfRays);
50+
assertEqual(stf2(i).bixelWidth,stfGen.bixelWidth);
51+
assertEqual(stf2(i).radiationMode,stfGen.radiationMode);
52+
assertEqual(stf2(i).machine,pln.machine);
53+
assertEqual(stf2(i).gantryAngle,stfGen.gantryAngles(i));
54+
assertEqual(stf2(i).couchAngle,stfGen.couchAngles(i));
55+
56+
rotMat = matRad_getRotationMatrix(stf2(i).gantryAngle,stf2(i).couchAngle);
57+
assertEqual(stf2(i).sourcePoint,stf2(i).sourcePoint_bev*rotMat);
58+
assertEqual(stf2(i).sourcePoint_bev,[0 -stf2(i).SAD 0]);
59+
60+
assertTrue(isstruct(stf2(i).ray));
61+
assertEqual(numel(stf2(i).ray),numel(stf(i).ray));
62+
assertEqual(numel(stf2(i).ray),stf2(i).numOfRays);
63+
64+
assertTrue(isfield(stf2(i).ray,'beamletCornersAtIso'));
65+
assertTrue(isfield(stf2(i).ray,'rayCorners_SCD'));
66+
67+
rayPosTest = vertcat(stf2(i).ray.rayPos);
68+
rayPosTest_bev = rayPosTest*rotMat;
69+
rayPos_bevTest = vertcat(stf2(i).ray.rayPos_bev);
70+
rayPosRef = vertcat(stf(i).ray.rayPos);
71+
assertElementsAlmostEqual(sort(rayPosTest,1),sort(rayPosRef,1));
72+
assertElementsAlmostEqual(sort(rayPos_bevTest,1),sort(rayPosTest_bev,1));
73+
74+
targetPointTest = vertcat(stf2(i).ray.targetPoint);
75+
targetPointRef = vertcat(stf(i).ray.targetPoint);
76+
targetPoint_bevTest = vertcat(stf2(i).ray.targetPoint_bev);
77+
targetPoint_bevRef = vertcat(stf(i).ray.targetPoint_bev);
78+
assertElementsAlmostEqual(sort(targetPointTest,1),sort(targetPointRef,1));
79+
assertElementsAlmostEqual(sort(targetPoint_bevTest,1),sort(targetPoint_bevRef,1));
80+
assertElementsAlmostEqual(sort(targetPoint_bevTest,1),sort(targetPointTest*rotMat,1));
81+
82+
energiesTest = [stf2(i).ray.energy];
83+
energiesRef = [stf(i).ray.energy];
84+
assertEqual(energiesTest,energiesRef);
85+
%assertTrue(isscalar(stf2(i).ray.energy));
86+
end

0 commit comments

Comments
 (0)