23 CPPUNIT_TEST_SUITE(mitkPhotoacousticVolumeTestSuite);
24 MITK_TEST(TestUniformDistributionIsUniform);
25 MITK_TEST(TestInitializedTissueContainsOnlyZeros);
26 MITK_TEST(TestConvertedMitkImageContainsOnlyZerosOrAir);
27 MITK_TEST(TestTissueVolumeContainsCorrectAbsorptionNumber);
28 MITK_TEST(TestTissueVolumeContainsCorrectScatteringNumber);
29 MITK_TEST(TestTissueVolumeContainsCorrectAnisotropyNumber);
33 MITK_TEST(testCompleteAirAndSkinVoxelInclusion);
35 CPPUNIT_TEST_SUITE_END();
39 mitk::pa::InSilicoTissueVolume::Pointer m_PhotoacousticVolume;
40 mitk::pa::TissueGeneratorParameters::Pointer m_TissueGeneratorParameters;
47 auto rng = std::mt19937();
51 void TestUniformDistributionIsUniform()
55 m_TissueGeneratorParameters->SetXDim(dims);
56 m_TissueGeneratorParameters->SetYDim(dims);
57 m_TissueGeneratorParameters->SetZDim(dims);
58 m_TissueGeneratorParameters->SetAirThicknessInMillimeters(0);
60 m_TissueGeneratorParameters->SetMinBackgroundAbsorption(0.001);
61 m_TissueGeneratorParameters->SetMaxBackgroundAbsorption(0.2);
63 auto rng = std::mt19937();
66 for (
int x = 0; x < dims; x++)
68 for (
int y = 0; y < dims; y++)
70 for (
int z = 0; z < dims; z++)
72 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Every absorption should be in bounds.",
73 m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(x, y, z) >= 0.001 &&
74 m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(x, y, z) <= 0.2,
true);
81 void TestInitializedTissueContainsOnlyZeros()
84 m_TissueGeneratorParameters->SetXDim(dims);
85 m_TissueGeneratorParameters->SetYDim(dims);
86 m_TissueGeneratorParameters->SetZDim(dims);
87 m_TissueGeneratorParameters->SetAirThicknessInMillimeters(0);
88 m_TissueGeneratorParameters->SetMinBackgroundAbsorption(0);
89 m_TissueGeneratorParameters->SetMaxBackgroundAbsorption(0);
90 auto rng = std::mt19937();
93 for (
int x = 0; x < dims; x++)
95 for (
int y = 0; y < dims; y++)
97 for (
int z = 0; z < dims; z++)
99 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Every field should be initialized with 0.", std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(x, y, z)) <
mitk::eps,
true);
105 void TestConvertedMitkImageContainsOnlyZerosOrAir()
108 m_TissueGeneratorParameters->SetXDim(dims);
109 m_TissueGeneratorParameters->SetYDim(dims);
110 m_TissueGeneratorParameters->SetZDim(dims);
111 auto rng = std::mt19937();
117 auto* imagePointer = (
double*)imgMemAcc.GetData();
119 for (
int index = 0; index < dims*dims*dims; index++, imagePointer++)
121 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Every voxel in image should be 0.1 or 0.0001.",
true, std::abs(*imagePointer - 0.1) <=
mitk::eps || std::abs(*imagePointer - 0.0001) <=
mitk::eps);
125 void TestTissueVolumeContainsCorrectAbsorptionNumber()
128 m_TissueGeneratorParameters->SetXDim(dims);
129 m_TissueGeneratorParameters->SetYDim(dims);
130 m_TissueGeneratorParameters->SetZDim(dims);
131 auto rng = std::mt19937();
134 m_PhotoacousticVolume->SetVolumeValues(0, 0, 0, 0, 0, 0);
135 m_PhotoacousticVolume->SetVolumeValues(0, 0, 1, 1, 0, 0);
136 m_PhotoacousticVolume->SetVolumeValues(0, 1, 0, 2, 0, 0);
137 m_PhotoacousticVolume->SetVolumeValues(0, 1, 1, 3, 0, 0);
138 m_PhotoacousticVolume->SetVolumeValues(1, 0, 0, 4, 0, 0);
139 m_PhotoacousticVolume->SetVolumeValues(1, 0, 1, 5, 0, 0);
140 m_PhotoacousticVolume->SetVolumeValues(1, 1, 0, 6, 0, 0);
141 m_PhotoacousticVolume->SetVolumeValues(1, 1, 1, 7, 0, 0);
143 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 0.0, m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(0, 0, 0));
144 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 1.0, m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(0, 0, 1));
145 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 2.0, m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(0, 1, 0));
146 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 3.0, m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(0, 1, 1));
147 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 4.0, m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 0, 0));
148 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 5.0, m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 0, 1));
149 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 6.0, m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 0));
150 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 7.0, m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 1));
153 void TestTissueVolumeContainsCorrectScatteringNumber()
156 m_TissueGeneratorParameters->SetXDim(dims);
157 m_TissueGeneratorParameters->SetYDim(dims);
158 m_TissueGeneratorParameters->SetZDim(dims);
159 auto rng = std::mt19937();
162 m_PhotoacousticVolume->SetVolumeValues(0, 0, 0, 0, 0, 0);
163 m_PhotoacousticVolume->SetVolumeValues(0, 0, 1, 0, 1, 0);
164 m_PhotoacousticVolume->SetVolumeValues(0, 1, 0, 0, 2, 0);
165 m_PhotoacousticVolume->SetVolumeValues(0, 1, 1, 0, 3, 0);
166 m_PhotoacousticVolume->SetVolumeValues(1, 0, 0, 0, 4, 0);
167 m_PhotoacousticVolume->SetVolumeValues(1, 0, 1, 0, 5, 0);
168 m_PhotoacousticVolume->SetVolumeValues(1, 1, 0, 0, 6, 0);
169 m_PhotoacousticVolume->SetVolumeValues(1, 1, 1, 0, 7, 0);
171 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 0.0, m_PhotoacousticVolume->GetScatteringVolume()->GetData(0, 0, 0));
172 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 1.0, m_PhotoacousticVolume->GetScatteringVolume()->GetData(0, 0, 1));
173 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 2.0, m_PhotoacousticVolume->GetScatteringVolume()->GetData(0, 1, 0));
174 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 3.0, m_PhotoacousticVolume->GetScatteringVolume()->GetData(0, 1, 1));
175 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 4.0, m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 0, 0));
176 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 5.0, m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 0, 1));
177 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 6.0, m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 0));
178 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 7.0, m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 1));
181 void TestTissueVolumeContainsCorrectAnisotropyNumber()
184 m_TissueGeneratorParameters->SetXDim(dims);
185 m_TissueGeneratorParameters->SetYDim(dims);
186 m_TissueGeneratorParameters->SetZDim(dims);
187 auto rng = std::mt19937();
190 m_PhotoacousticVolume->SetVolumeValues(0, 0, 0, 0, 0, 0);
191 m_PhotoacousticVolume->SetVolumeValues(0, 0, 1, 0, 0, 1);
192 m_PhotoacousticVolume->SetVolumeValues(0, 1, 0, 0, 0, 2);
193 m_PhotoacousticVolume->SetVolumeValues(0, 1, 1, 0, 0, 3);
194 m_PhotoacousticVolume->SetVolumeValues(1, 0, 0, 0, 0, 4);
195 m_PhotoacousticVolume->SetVolumeValues(1, 0, 1, 0, 0, 5);
196 m_PhotoacousticVolume->SetVolumeValues(1, 1, 0, 0, 0, 6);
197 m_PhotoacousticVolume->SetVolumeValues(1, 1, 1, 0, 0, 7);
199 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 0.0, m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(0, 0, 0));
200 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 1.0, m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(0, 0, 1));
201 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 2.0, m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(0, 1, 0));
202 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 3.0, m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(0, 1, 1));
203 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 4.0, m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 0, 0));
204 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 5.0, m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 0, 1));
205 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 6.0, m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 0));
206 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Should be correct value", 7.0, m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 1));
209 mitk::pa::Volume::Pointer createTestVolume(
double value)
211 auto* data =
new double[27];
212 for (
int i = 0; i < 27; ++i)
217 void assertEqual(mitk::pa::Volume::Pointer first, mitk::pa::Volume::Pointer second)
219 CPPUNIT_ASSERT(first->GetXDim() == second->GetXDim());
220 CPPUNIT_ASSERT(first->GetYDim() == second->GetYDim());
221 CPPUNIT_ASSERT(first->GetZDim() == second->GetZDim());
222 for (
unsigned int x = 0; x < first->GetXDim(); ++x)
223 for (
unsigned int y = 0; y < first->GetYDim(); ++y)
224 for (
unsigned int z = 0; z < first->GetZDim(); ++z)
225 CPPUNIT_ASSERT(std::abs(first->GetData(x, y, z) - second->GetData(x, y, z)) <
mitk::eps);
228 void testSecondConstructor()
230 mitk::pa::Volume::Pointer absorption = createTestVolume(1);
231 mitk::pa::Volume::Pointer scattering = createTestVolume(2);
232 mitk::pa::Volume::Pointer anisotropy = createTestVolume(3);
233 mitk::pa::Volume::Pointer segmentation = createTestVolume(4);
237 scattering, anisotropy, segmentation, m_TissueGeneratorParameters, properties);
239 assertEqual(m_PhotoacousticVolume->GetAbsorptionVolume(), absorption);
240 assertEqual(m_PhotoacousticVolume->GetScatteringVolume(), scattering);
241 assertEqual(m_PhotoacousticVolume->GetAnisotropyVolume(), anisotropy);
242 assertEqual(m_PhotoacousticVolume->GetSegmentationVolume(), segmentation);
245 void testCompleteAirVoxelInclusion()
247 mitk::pa::Volume::Pointer absorption = createTestVolume(1);
248 mitk::pa::Volume::Pointer scattering = createTestVolume(2);
249 mitk::pa::Volume::Pointer anisotropy = createTestVolume(3);
250 mitk::pa::Volume::Pointer segmentation = createTestVolume(4);
252 m_TissueGeneratorParameters->SetXDim(3);
253 m_TissueGeneratorParameters->SetYDim(3);
254 m_TissueGeneratorParameters->SetZDim(3);
255 m_TissueGeneratorParameters->SetAirThicknessInMillimeters(10);
256 m_TissueGeneratorParameters->SetSkinThicknessInMillimeters(0);
257 m_TissueGeneratorParameters->SetAirAbsorption(2);
258 m_TissueGeneratorParameters->SetAirScattering(4);
259 m_TissueGeneratorParameters->SetAirAnisotropy(6);
262 scattering, anisotropy, segmentation, m_TissueGeneratorParameters, properties);
264 m_PhotoacousticVolume->FinalizeVolume();
266 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(0, 0, 0) - 2) <
mitk::eps);
267 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 1) - 1) <
mitk::eps);
268 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 2) - 1) <
mitk::eps);
269 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(0, 0, 0) - 4) <
mitk::eps);
270 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 1) - 2) <
mitk::eps);
271 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 2) - 2) <
mitk::eps);
272 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(0, 0, 0) - 6) <
mitk::eps);
273 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 1) - 3) <
mitk::eps);
274 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 2) - 3) <
mitk::eps);
277 void testRandomizeCoefficients()
279 mitk::pa::Volume::Pointer absorption = createTestVolume(1);
280 mitk::pa::Volume::Pointer scattering = createTestVolume(1);
281 mitk::pa::Volume::Pointer anisotropy = createTestVolume(1);
282 mitk::pa::Volume::Pointer segmentation = createTestVolume(4);
284 m_TissueGeneratorParameters->SetXDim(3);
285 m_TissueGeneratorParameters->SetYDim(3);
286 m_TissueGeneratorParameters->SetZDim(3);
287 m_TissueGeneratorParameters->SetRandomizePhysicalProperties(
true);
288 m_TissueGeneratorParameters->SetRandomizePhysicalPropertiesPercentage(1);
289 m_TissueGeneratorParameters->SetRngSeed(17);
290 m_TissueGeneratorParameters->SetUseRngSeed(
true);
293 scattering, anisotropy, segmentation, m_TissueGeneratorParameters, properties);
295 m_PhotoacousticVolume->FinalizeVolume();
297 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(0, 0, 0) - 1) < 0.1);
298 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 1) - 1) < 0.1);
299 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 2) - 1) < 0.1);
300 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(0, 0, 0) - 1) < 0.1);
301 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 1) - 1) < 0.1);
302 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 2) - 1) < 0.1);
303 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(0, 0, 0) - 1) < 0.1);
304 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 1) - 1) < 0.1);
305 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 2) - 1) < 0.1);
308 void testCompleteAirAndSkinVoxelInclusion()
310 mitk::pa::Volume::Pointer absorption = createTestVolume(1);
311 mitk::pa::Volume::Pointer scattering = createTestVolume(2);
312 mitk::pa::Volume::Pointer anisotropy = createTestVolume(3);
313 mitk::pa::Volume::Pointer segmentation = createTestVolume(4);
315 m_TissueGeneratorParameters->SetXDim(3);
316 m_TissueGeneratorParameters->SetYDim(3);
317 m_TissueGeneratorParameters->SetZDim(3);
318 m_TissueGeneratorParameters->SetAirThicknessInMillimeters(10);
319 m_TissueGeneratorParameters->SetSkinThicknessInMillimeters(10);
320 m_TissueGeneratorParameters->SetAirAbsorption(2);
321 m_TissueGeneratorParameters->SetAirScattering(4);
322 m_TissueGeneratorParameters->SetAirAnisotropy(6);
323 m_TissueGeneratorParameters->SetSkinAbsorption(4);
324 m_TissueGeneratorParameters->SetSkinScattering(8);
325 m_TissueGeneratorParameters->SetSkinAnisotropy(12);
328 scattering, anisotropy, segmentation, m_TissueGeneratorParameters, properties);
330 m_PhotoacousticVolume->FinalizeVolume();
332 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(0, 0, 0) - 2) <
mitk::eps);
333 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 1) - 4) <
mitk::eps);
334 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 2) - 1) <
mitk::eps);
335 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(0, 0, 0) - 4) <
mitk::eps);
336 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 1) - 8) <
mitk::eps);
337 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 2) - 2) <
mitk::eps);
338 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(0, 0, 0) - 6) <
mitk::eps);
339 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 1) - 12) <
mitk::eps);
340 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 2) - 3) <
mitk::eps);
343 void testHalfAirVoxelInclusion()
345 mitk::pa::Volume::Pointer absorption = createTestVolume(1);
346 mitk::pa::Volume::Pointer scattering = createTestVolume(2);
347 mitk::pa::Volume::Pointer anisotropy = createTestVolume(3);
348 mitk::pa::Volume::Pointer segmentation = createTestVolume(4);
350 m_TissueGeneratorParameters->SetXDim(3);
351 m_TissueGeneratorParameters->SetYDim(3);
352 m_TissueGeneratorParameters->SetZDim(3);
353 m_TissueGeneratorParameters->SetAirThicknessInMillimeters(15);
354 m_TissueGeneratorParameters->SetSkinThicknessInMillimeters(0);
355 m_TissueGeneratorParameters->SetAirAbsorption(2);
356 m_TissueGeneratorParameters->SetAirScattering(4);
357 m_TissueGeneratorParameters->SetAirAnisotropy(6);
360 scattering, anisotropy, segmentation, m_TissueGeneratorParameters, properties);
362 m_PhotoacousticVolume->FinalizeVolume();
364 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(0, 0, 0) - 2) <
mitk::eps);
365 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 1) - 1.5) <
mitk::eps);
366 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 2) - 1) <
mitk::eps);
367 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(0, 0, 0) - 4) <
mitk::eps);
368 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 1) - 3) <
mitk::eps);
369 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 2) - 2) <
mitk::eps);
370 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(0, 0, 0) - 6) <
mitk::eps);
371 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 1) - 4.5) <
mitk::eps);
372 CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 2) - 3) <
mitk::eps);
375 void tearDown()
override 377 m_TissueGeneratorParameters =
nullptr;
378 m_PhotoacousticVolume =
nullptr;
MITK_TEST_SUITE_REGISTRATION(mitkImageToItk)
#define MITK_TEST(TESTMETHOD)
Adds a test to the current test suite.
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)
Test fixture for parameterized tests.
MITKCORE_EXPORT const ScalarType eps
ImageReadAccessor class to get locked read access for a particular image part.
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 ...