81TEST_CASE(
"Calculating subimage sizes",
"[ioutils::fits::fitsFile]" )
84#ifdef MXLIB_DOXYGEN_PROTECTED_REF
93 SECTION(
"a 1D image to read" )
95 SECTION(
"reading the whole image with default setup" )
97 fitsFile_test<float> fft;
99 fft.setnax( 1, 64, 0, 0 );
101 REQUIRE( fft.naxis() == 1 );
102 REQUIRE( fft.naxes( 0 ) == 64 );
103 REQUIRE( fft.naxes( 1 ) == -1 );
105 fitsFile_test<float>::pixarrTT pixarrs;
106 fft.calcPixarrs( pixarrs );
108 REQUIRE( pixarrs.fpix[0] == 1 );
109 REQUIRE( pixarrs.lpix[0] == 64 );
110 REQUIRE( pixarrs.inc[0] == 1 );
113 SECTION(
"reading a subimage" )
115 fitsFile_test<float> fft;
117 fft.setnax( 1, 64, 0, 0 );
119 REQUIRE( fft.naxis() == 1 );
120 REQUIRE( fft.naxes( 0 ) == 64 );
121 REQUIRE( fft.naxes( 1 ) == -1 );
123 fft.setReadSize( 10, 0, 7, 0 );
125 fitsFile_test<float>::pixarrTT pixarrs;
126 fft.calcPixarrs( pixarrs );
128 REQUIRE( pixarrs.fpix[0] == 11 );
129 REQUIRE( pixarrs.lpix[0] == 17 );
130 REQUIRE( pixarrs.inc[0] == 1 );
134 SECTION(
"a 2D image to read" )
136 SECTION(
"reading the whole image with default setup" )
138 fitsFile_test<float> fft;
140 fft.setnax( 2, 64, 64, 0 );
142 REQUIRE( fft.naxis() == 2 );
143 REQUIRE( fft.naxes( 0 ) == 64 );
144 REQUIRE( fft.naxes( 1 ) == 64 );
145 REQUIRE( fft.naxes( 2 ) == -1 );
147 fitsFile_test<float>::pixarrTT pixarrs;
148 fft.calcPixarrs( pixarrs );
150 REQUIRE( pixarrs.fpix[0] == 1 );
151 REQUIRE( pixarrs.fpix[1] == 1 );
152 REQUIRE( pixarrs.lpix[0] == 64 );
153 REQUIRE( pixarrs.lpix[1] == 64 );
154 REQUIRE( pixarrs.inc[0] == 1 );
155 REQUIRE( pixarrs.inc[1] == 1 );
158 SECTION(
"reading a subimage" )
160 fitsFile_test<float> fft;
162 fft.setnax( 2, 64, 64, 0 );
164 REQUIRE( fft.naxis() == 2 );
165 REQUIRE( fft.naxes( 0 ) == 64 );
166 REQUIRE( fft.naxes( 1 ) == 64 );
167 REQUIRE( fft.naxes( 2 ) == -1 );
169 fft.setReadSize( 10, 9, 7, 10 );
171 fitsFile_test<float>::pixarrTT pixarrs;
172 fft.calcPixarrs( pixarrs );
174 REQUIRE( pixarrs.fpix[0] == 11 );
175 REQUIRE( pixarrs.fpix[1] == 10 );
176 REQUIRE( pixarrs.lpix[0] == 17 );
177 REQUIRE( pixarrs.lpix[1] == 19 );
178 REQUIRE( pixarrs.inc[0] == 1 );
179 REQUIRE( pixarrs.inc[1] == 1 );
183 SECTION(
"a 3D image to read" )
185 WHEN(
"reading the whole image with default setup" )
187 fitsFile_test<float> fft;
189 fft.setnax( 3, 64, 64, 64 );
191 REQUIRE( fft.naxis() == 3 );
192 REQUIRE( fft.naxes( 0 ) == 64 );
193 REQUIRE( fft.naxes( 1 ) == 64 );
194 REQUIRE( fft.naxes( 2 ) == 64 );
195 REQUIRE( fft.naxes( 3 ) == -1 );
197 fitsFile_test<float>::pixarrTT pixarrs;
198 fft.calcPixarrs( pixarrs );
200 REQUIRE( pixarrs.fpix[0] == 1 );
201 REQUIRE( pixarrs.fpix[1] == 1 );
202 REQUIRE( pixarrs.fpix[2] == 1 );
204 REQUIRE( pixarrs.lpix[0] == 64 );
205 REQUIRE( pixarrs.lpix[1] == 64 );
206 REQUIRE( pixarrs.lpix[2] == 64 );
207 REQUIRE( pixarrs.inc[0] == 1 );
208 REQUIRE( pixarrs.inc[1] == 1 );
209 REQUIRE( pixarrs.inc[2] == 1 );
212 SECTION(
"reading a subimage" )
214 fitsFile_test<float> fft;
216 fft.setnax( 3, 64, 64, 64 );
218 REQUIRE( fft.naxis() == 3 );
219 REQUIRE( fft.naxes( 0 ) == 64 );
220 REQUIRE( fft.naxes( 1 ) == 64 );
221 REQUIRE( fft.naxes( 2 ) == 64 );
222 REQUIRE( fft.naxes( 3 ) == -1 );
224 fft.setReadSize( 10, 9, 7, 10 );
225 fft.setCubeReadSize( 5, 3 );
227 fitsFile_test<float>::pixarrTT pixarrs;
228 fft.calcPixarrs( pixarrs );
230 REQUIRE( pixarrs.fpix[0] == 11 );
231 REQUIRE( pixarrs.fpix[1] == 10 );
232 REQUIRE( pixarrs.fpix[2] == 6 );
233 REQUIRE( pixarrs.lpix[0] == 17 );
234 REQUIRE( pixarrs.lpix[1] == 19 );
235 REQUIRE( pixarrs.lpix[2] == 8 );
236 REQUIRE( pixarrs.inc[0] == 1 );
237 REQUIRE( pixarrs.inc[1] == 1 );
238 REQUIRE( pixarrs.inc[2] == 1 );
325TEST_CASE(
"Reading headers",
"[ioutils::fits::fitsFile]" )
328#ifdef MXLIB_DOXYGEN_PROTECTED_REF
331 fh.
append(
"dummy", 2,
"dummy" );
333 ff.
write(
"dummy", im, fh );
336 fitsFile_test<float> fft;
338 std::vector<std::string> fnames(
339 {
"/tmp/fitsFile_test1.fits",
"/tmp/fitsFile_test2.fits",
"/tmp/fitsFile_test3.fits" } );
344 SECTION(
"write three frames and read their headers as a vector, not allocated" )
348 std::vector<mx::fits::fitsHeader<mx::verbose::d>> fh;
352 REQUIRE( fh.size() == fnames.size() );
354 REQUIRE_THAT( fh[0][
"FLOAT1"].Float(), WithinAbs( 1.1, 1e-5 ) );
355 REQUIRE( fh[0][
"INT1"].Int() == 2 );
356 REQUIRE_THAT( fh[1][
"FLOAT2"].Float(), WithinAbs( 1.1, 1e-5 ) );
357 REQUIRE( fh[1][
"INT2"].Int() == 2 );
358 REQUIRE_THAT( fh[2][
"FLOAT3"].Float(), WithinAbs( 1.1, 1e-5 ) );
359 REQUIRE( fh[2][
"INT3"].Int() == 2 );
362 SECTION(
"write three frames and read their headers as a vector, allocated" )
366 std::vector<mx::fits::fitsHeader<mx::verbose::d>> fh;
369 fh.resize( fnames.size() );
374 REQUIRE_THAT( fh[0][
"FLOAT1"].Float( &errc ), WithinAbs( 1.1, 1e-5 ) );
377 REQUIRE( fh[0][
"INT1"].Int( &errc ) == 2 );
380 REQUIRE_THAT( fh[1][
"FLOAT2"].Float( &errc ), WithinAbs( 1.1, 1e-5 ) );
383 REQUIRE( fh[1][
"INT2"].Int( &errc ) == 2 );
386 REQUIRE_THAT( fh[2][
"FLOAT3"].Float( &errc ), WithinAbs( 1.1, 1e-5 ) );
389 REQUIRE( fh[2][
"INT3"].Int( &errc ) == 2 );
393 SECTION(
"write three frames and read their headers as a vector, allocated to wrong size" )
396 std::vector<mx::fits::fitsHeader<mx::verbose::d>> fh;
399 fh.resize( fnames.size() + 1 );
403 SECTION(
"write three frames and read their headers as a vector, extracting only 1 keyword" )
407 std::vector<mx::fits::fitsHeader<mx::verbose::d>> fh;
410 fh.resize( fnames.size() );
412 fh[1].append(
"FLOAT2" );
413 fh[2].append(
"FLOAT3" );
419 REQUIRE_THAT( fh[0][
"FLOAT1"].Float( &errc ), WithinAbs( 1.1, 1e-5 ) );
421 REQUIRE( fh[0][
"FLOAT1"].valueGood() ==
true );
423 REQUIRE( fh[0][
"INT1"].Int( &errc ) == 0 );
425 REQUIRE( fh[0][
"INT1"].valueGood() ==
false );
427 REQUIRE_THAT( fh[1][
"FLOAT2"].Float( &errc ), WithinAbs( 1.1, 1e-5 ) );
429 REQUIRE( fh[1][
"FLOAT2"].valueGood() ==
true );
431 REQUIRE( fh[1][
"INT2"].Int( &errc ) == 0 );
433 REQUIRE( fh[1][
"INT2"].valueGood() ==
false );
435 REQUIRE_THAT( fh[2][
"FLOAT3"].Float( &errc ), WithinAbs( 1.1, 1e-5 ) );
437 REQUIRE( fh[2][
"FLOAT3"].valueGood() ==
true );
439 REQUIRE( fh[2][
"INT3"].Int( &errc ) == 0 );
441 REQUIRE( fh[2][
"INT3"].valueGood() ==
false );