MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
mitkCombinedModalityTest.cpp
Go to the documentation of this file.
1/*============================================================================
2
3The Medical Imaging Interaction Toolkit (MITK)
4
5Copyright (c) German Cancer Research Center (DKFZ)
6All rights reserved.
7
8Use of this source code is governed by a 3-clause BSD license that can be
9found in the LICENSE file.
10
11============================================================================*/
12
15#include <mitkUSVideoDevice.h>
16#include <mitkTestingMacros.h>
18
20{
21public:
22
23 static bool CompareDoubles (double A, double B)
24 {
25 return std::abs(A - B) < 0.0001;
26 }
27
28 /*
29 * \brief Creates a dummy combined modality.
30 */
31 static mitk::USCombinedModality::Pointer CreateModality()
32 {
33 mitk::USVideoDevice::Pointer usDevice = mitk::USVideoDevice::New("IllegalPath", "Manufacturer", "Model");
34 mitk::VirtualTrackingDevice::Pointer tracker = mitk::VirtualTrackingDevice::New();
35 tracker->AddTool("tool1");
36 tracker->AddTool("tool2");
37 mitk::TrackingDeviceSource::Pointer source = mitk::TrackingDeviceSource::New();
38 source->SetTrackingDevice(tracker);
39 source->Connect();
40 source->StartTracking();
41 return mitk::USCombinedModality::New(usDevice.GetPointer(), source.GetPointer(), false);
42 }
43
44 static void TestInstantiation()
45 {
46 mitk::USCombinedModality::Pointer combinedModality = CreateModality();
47 MITK_TEST_CONDITION_REQUIRED(combinedModality.IsNotNull(), "CombinedModality should not be null after instantiation");
48 }
49
50 static void TestSerialization()
51 {
52 auto modality = CreateModality();
53
54 mitk::AffineTransform3D::MatrixType matrix;
55 matrix[0][0] = 1.1234;
56 matrix[0][1] = 1.2234;
57 matrix[0][2] = 1.3234;
58 matrix[1][0] = 1.4234;
59 matrix[1][1] = 1.5234;
60 matrix[1][2] = 1.6234;
61 matrix[2][0] = 1.7234;
62 matrix[2][1] = 1.8234;
63 matrix[2][2] = 1.9234;
64
65 mitk::AffineTransform3D::OffsetType offset;
66 offset[0] = 2.1234;
67 offset[1] = 2.2234;
68 offset[2] = 2.3234;
69
70 mitk::AffineTransform3D::Pointer transform = mitk::AffineTransform3D::New();
71 transform->SetMatrix(matrix);
72 transform->SetOffset(offset);
73
74 modality->SetCalibration(transform);
75
76 const auto xmlString = modality->SerializeCalibration();
77 auto otherModality = CreateModality();
78 otherModality->DeserializeCalibration(xmlString);
79 auto calibration = otherModality->GetCalibration();
80 const auto& otherMatrix = calibration->GetMatrix();
81 const auto& otherOffset = calibration->GetOffset();
82
83 bool identical = true;
84
85 for (size_t i = 0; i < 3; ++i)
86 {
87 for (size_t j = 0; j < 3; ++j)
88 {
89 if (!CompareDoubles(matrix[i][j], otherMatrix[i][j]))
90 {
91 identical = false;
92 break;
93 }
94 }
95
96 if (!identical)
97 break;
98 }
99
100 if (identical)
101 {
102 for (size_t i = 0; i < 3; ++i)
103 {
104 if (!CompareDoubles(offset[i], otherOffset[i]))
105 {
106 identical = false;
107 break;
108 }
109 }
110 }
111
112 MITK_TEST_CONDITION_REQUIRED(identical, "Testing if deserialized calibration is identical to serialized one...");
113
114 // test if invalid strings cause exceptions
115 MITK_TEST_FOR_EXCEPTION(mitk::Exception, modality->DeserializeCalibration("invalid-string"));
116 MITK_TEST_FOR_EXCEPTION(mitk::Exception, modality->DeserializeCalibration("<xml><test></xml>", false));
117 }
118
119 static void TestFilterPipeline()
120 {
121 /*mitk::USCombinedModality::Pointer combinedModality = mitkCombinedModalityTestClass::CreateModality();
122 MITK_INFO << combinedModality->GetNavigationDataSource()->GetNameOfClass();
123 MITK_TEST_CONDITION(strcmp(combinedModality->GetNavigationDataSource()->GetNameOfClass(), "TrackingDeviceSource") == 0,
124 "")*/
125
126 mitk::USVideoDevice::Pointer usDevice = mitk::USVideoDevice::New("IllegalPath", "Manufacturer", "Model");
127 mitk::VirtualTrackingDevice::Pointer tracker = mitk::VirtualTrackingDevice::New();
128 tracker->AddTool("tool1");
129 tracker->AddTool("tool2");
130 mitk::TrackingDeviceSource::Pointer source = mitk::TrackingDeviceSource::New();
131 source->SetTrackingDevice(tracker);
132 source->Connect();
133 source->StartTracking();
134 mitk::USCombinedModality::Pointer modality = mitk::USCombinedModality::New(usDevice.GetPointer(), source.GetPointer(), false);
135
136 MITK_TEST_CONDITION(source->GetOutput(0) == modality->GetNavigationDataSource()->GetOutput(0),
137 "Navigation data output of the Combined Modality should be the same as the source output as no filters are active.")
138
139 modality->SetNumberOfSmoothingValues(2);
140
141 mitk::NavigationDataSource::Pointer smoothingFilter = modality->GetNavigationDataSource();
142 MITK_TEST_CONDITION(source->GetOutput(0) != smoothingFilter->GetOutput(0),
143 "Navigation data output of the Combined Modality should be different to the source output as smoothing filter is active.")
144
145 modality->SetNumberOfSmoothingValues(0);
146 MITK_TEST_CONDITION(source->GetOutput(0) == modality->GetNavigationDataSource()->GetOutput(0),
147 "Navigation data output of the Combined Modality should be the same as the source output again.")
148
149 modality->SetDelayCount(5);
150 MITK_TEST_CONDITION(source->GetOutput(0) != smoothingFilter->GetOutput(0),
151 "Navigation data output of the Combined Modality should be different to the source output as delay filter is active.")
152
153 modality->SetDelayCount(0);
154 MITK_TEST_CONDITION(source->GetOutput(0) == modality->GetNavigationDataSource()->GetOutput(0),
155 "Navigation data output of the Combined Modality should be the same as the source output again.")
156 }
157};
158
162int mitkCombinedModalityTest(int /* argc */, char* /*argv*/[])
163{
164 MITK_TEST_BEGIN("mitkCombinedModalityTest");
165
169
170 MITK_TEST_END();
171}
Definition diagrams_a.h:3
Definition diagrams_b.h:4
static mitk::USCombinedModality::Pointer CreateModality()
static bool CompareDoubles(double A, double B)
int mitkCombinedModalityTest(int, char *[])