Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkPhotoacousticComposedVolumeTest.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 #include <mitkTestFixture.h>
13 #include <mitkTestingMacros.h>
14 
15 #include "mitkPAComposedVolume.h"
16 #include "mitkIOUtil.h"
17 #include "mitkImageReadAccessor.h"
18 #include <string>
19 
20 class mitkPhotoacousticComposedVolumeTestSuite : public mitk::TestFixture
21 {
22  CPPUNIT_TEST_SUITE(mitkPhotoacousticComposedVolumeTestSuite);
23  MITK_TEST(TestCreateAndDestructComposedVolume);
24  MITK_TEST(TestAccessInvalidFluenceComponent);
25  MITK_TEST(TestAccessInvalidFluenceComponentIndex);
26  MITK_TEST(TestAddMultiplePairs);
27  MITK_TEST(TestSortFunctionality);
28  MITK_TEST(TestAccessInvalidFluenceComponentForYOffset);
29  CPPUNIT_TEST_SUITE_END();
30 
31 private:
32  mitk::pa::ComposedVolume::Pointer m_ComposedVolume;
33  mitk::pa::TissueGeneratorParameters::Pointer m_DefaultParameters;
34  mitk::pa::InSilicoTissueVolume::Pointer m_InSilicoTissueVolume;
35 
36 public:
37 
38  void setUp() override
39  {
40  m_DefaultParameters = mitk::pa::TissueGeneratorParameters::New();
41  m_DefaultParameters->SetXDim(5);
42  m_DefaultParameters->SetYDim(5);
43  m_DefaultParameters->SetZDim(5);
44  auto rng = std::mt19937();
45  m_InSilicoTissueVolume = mitk::pa::InSilicoTissueVolume::New(m_DefaultParameters, &rng);
46  m_ComposedVolume = mitk::pa::ComposedVolume::New(m_InSilicoTissueVolume);
47  }
48 
49  mitk::pa::FluenceYOffsetPair::Pointer createFluenceYOffsetPair(double value, double yOffset)
50  {
51  auto* data = new double[125];
52  for (int i = 0; i < 125; ++i)
53  data[i] = value;
54  mitk::pa::Volume::Pointer volume = mitk::pa::Volume::New(data, 5, 5, 5, 1);
55  return mitk::pa::FluenceYOffsetPair::New(volume, yOffset);
56  }
57 
58  void TestCreateAndDestructComposedVolume()
59  {
60  CPPUNIT_ASSERT(m_ComposedVolume->GetNumberOfFluenceComponents() == 0);
61  }
62 
63  void TestAccessInvalidFluenceComponent()
64  {
65  bool caughtException = false;
66  try
67  {
68  m_ComposedVolume->GetFluenceValue(0, 0, 0, 0);
69  }
70  catch (const mitk::Exception &)
71  {
72  caughtException = true;
73  }
74  CPPUNIT_ASSERT(caughtException);
75  }
76 
77  void TestAddMultiplePairs()
78  {
79  m_ComposedVolume->AddSlice(createFluenceYOffsetPair(0, 0));
80  CPPUNIT_ASSERT(m_ComposedVolume->GetNumberOfFluenceComponents() == 1);
81  m_ComposedVolume->AddSlice(createFluenceYOffsetPair(1, 1));
82  CPPUNIT_ASSERT(m_ComposedVolume->GetNumberOfFluenceComponents() == 2);
83  }
84 
85  void TestSortFunctionality()
86  {
87  m_ComposedVolume->AddSlice(createFluenceYOffsetPair(2, 2));
88  m_ComposedVolume->AddSlice(createFluenceYOffsetPair(-1, -1));
89  m_ComposedVolume->AddSlice(createFluenceYOffsetPair(1, 1));
90  m_ComposedVolume->AddSlice(createFluenceYOffsetPair(0, 0));
91  m_ComposedVolume->AddSlice(createFluenceYOffsetPair(-2, -2));
92  CPPUNIT_ASSERT(m_ComposedVolume->GetFluenceValue(0, 0, 2, 0) == 2);
93  CPPUNIT_ASSERT(m_ComposedVolume->GetFluenceValue(1, 0, 2, 0) == -1);
94  CPPUNIT_ASSERT(m_ComposedVolume->GetFluenceValue(2, 0, 2, 0) == 1);
95  CPPUNIT_ASSERT(m_ComposedVolume->GetFluenceValue(3, 0, 2, 0) == 0);
96  CPPUNIT_ASSERT(m_ComposedVolume->GetFluenceValue(4, 0, 2, 0) == -2);
97 
98  m_ComposedVolume->Sort();
99 
100  CPPUNIT_ASSERT(m_ComposedVolume->GetFluenceValue(0, 0, 2, 0) == -2);
101  CPPUNIT_ASSERT(m_ComposedVolume->GetFluenceValue(1, 0, 2, 0) == -1);
102  CPPUNIT_ASSERT(m_ComposedVolume->GetFluenceValue(2, 0, 2, 0) == 0);
103  CPPUNIT_ASSERT(m_ComposedVolume->GetFluenceValue(3, 0, 2, 0) == 1);
104  CPPUNIT_ASSERT(m_ComposedVolume->GetFluenceValue(4, 0, 2, 0) == 2);
105  }
106 
107  void TestAccessInvalidFluenceComponentIndex()
108  {
109 #ifdef _DEBUG
110  m_ComposedVolume->AddSlice(createFluenceYOffsetPair(0, 0));
111  bool caughtException = false;
112  try
113  {
114  double unusedValue = m_ComposedVolume->GetFluenceValue(0, 1, 2, 300);
115  unusedValue = 0;
116  }
117  catch (const mitk::Exception e)
118  {
119  caughtException = true;
120  }
121  CPPUNIT_ASSERT(caughtException);
122 #endif
123  }
124 
125  void TestAccessInvalidFluenceComponentForYOffset()
126  {
127  bool caughtException = false;
128  try
129  {
130  m_ComposedVolume->GetYOffsetForFluenceComponentInPixels(0);
131  }
132  catch (const mitk::Exception &)
133  {
134  caughtException = true;
135  }
136  CPPUNIT_ASSERT(caughtException);
137  }
138 
139  void tearDown() override
140  {
141  m_ComposedVolume = nullptr;
142  }
143 };
144 
145 MITK_TEST_SUITE_REGISTRATION(mitkPhotoacousticComposedVolume)
MITK_TEST_SUITE_REGISTRATION(mitkImageToItk)
#define MITK_TEST(TESTMETHOD)
Adds a test to the current test suite.
float yOffset
Definition: MitkMCxyz.cpp:622
static InSilicoTissueVolume::Pointer New(mitk::pa::Volume::Pointer absorptionVolume, Volume::Pointer scatteringVolume, Volume::Pointer anisotropyVolume, Volume::Pointer segmentationVolume, TissueGeneratorParameters::Pointer tissueParameters, mitk::PropertyList::Pointer propertyList)
An object of this class represents an exception of MITK. Please don&#39;t instantiate exceptions manually...
Definition: mitkException.h:45
Test fixture for parameterized tests.
static Volume::Pointer New(double *data, unsigned int xDim, unsigned int yDim, unsigned int zDim, double spacing)
returns smartpointer reference to a new instance of this objects. The given data array will be freed ...