90 #include <uves_extract.h>
91 #include <uves_extract_iterate.h>
92 #include <uves_extract_profile.h>
93 #include <uves_test_simulate.h>
95 #include <uves_parameters.h>
96 #include <uves_pfits.h>
97 #include <uves_utils_wrappers.h>
98 #include <uves_utils_polynomial.h>
100 #include <uves_chip.h>
101 #include <uves_error.h>
102 #include <cpl_test.h>
131 int norders = maxorder - minorder + 1;
132 cpl_image *spectrum = cpl_image_new(nx, norders, CPL_TYPE_DOUBLE);
133 cpl_image *dummy = cpl_image_new(nx, ny, CPL_TYPE_DOUBLE);
134 uves_iterate_position *pos = NULL;
136 cpl_binary *bpm = NULL;
139 double tot_flux = 3000;
142 *sky_spectrum = cpl_image_new(nx, norders, CPL_TYPE_DOUBLE);
146 for (x = 1; x <= nx; x++)
147 for (order = 1; order <= norders; order++)
149 cpl_image_reject(spectrum, x, order);
150 cpl_image_reject(*sky_spectrum, x, order);
162 int spectrum_row = pos->order - minorder + 1;
164 double sky = 1000+20000*(pos->order - minorder)*1.0/(maxorder - minorder);
166 check_nomsg( cpl_image_set(spectrum , pos->x, spectrum_row, tot_flux) );
167 check_nomsg( cpl_image_set(*sky_spectrum, pos->x, spectrum_row, sky) );
173 uves_free_image(&dummy);
196 cpl_image *in_spectrum = NULL;
197 cpl_image *in_sky = NULL;
198 cpl_image *image = NULL;
199 cpl_image *image_noise = NULL;
201 cpl_table *ordertable = NULL;
202 cpl_parameterlist * parameters = NULL;
203 const char *test_id =
"uves_extract-test";
204 bool extract_partial =
false;
205 bool debug_mode =
true;
208 cpl_image *cosmics = NULL;
209 uves_iterate_position *pos = NULL;
210 uves_extract_profile *profile = NULL;
213 cpl_image *out_spectrum = NULL;
214 cpl_image *out_sky = NULL;
215 cpl_image *out_sky_noise = NULL;
218 cpl_table *cosmic_mask = NULL;
219 cpl_image *cosmic_image = NULL;
221 cpl_image *weights = NULL;
222 cpl_table *info_tbl = NULL;
223 cpl_table *order_trace = NULL;
227 minorder, maxorder, nx) );
237 profile = uves_extract_profile_new(
uves_gauss,
253 uves_save_image(image,
"image.fits", NULL,
true,
true);
254 uves_save_image(image_noise,
"noise.fits", NULL,
true,
true);
256 ordertable = cpl_table_new(2);
257 cpl_table_new_column(ordertable,
"Order", CPL_TYPE_INT);
258 cpl_table_set_int(ordertable,
"Order", 0, minorder);
259 cpl_table_set_int(ordertable,
"Order", 1, maxorder);
262 parameters = cpl_parameterlist_new();
263 check_nomsg( uves_propagate_parameters_step(UVES_EXTRACT_ID,
269 const char *value =
"optimal";
270 uves_set_parameter(parameters, test_id, UVES_EXTRACT_ID
".method", CPL_TYPE_STRING, &value);
273 check( out_spectrum =
297 "Error during extraction");
299 uves_save_image(out_spectrum,
"spectrum.fits", NULL,
true,
true);
305 for (order = minorder; order <= maxorder; order++)
307 int spectrum_row = order - minorder + 1;
309 for (x = 1; x <= nx; x++)
312 double in = cpl_image_get( in_spectrum, x, spectrum_row, &in_bad);
313 double sky = cpl_image_get( in_sky , x, spectrum_row, &in_bad);
314 double out = cpl_image_get(out_spectrum, x, spectrum_row, &out_bad);
315 double osky = cpl_image_get(out_sky , x, spectrum_row, &out_bad);
318 assure( out_bad || in_bad ||
319 float_equal(out, in + sky, 0.001),
320 CPL_ERROR_ILLEGAL_OUTPUT,
321 "At (x, order) = (%d, %d): In = %f + %f (%d); Out = %f (%d)",
322 x, order, sky, in, in_bad, out, out_bad);
327 assure( out_bad || in_bad ||
328 float_equal(out, in, 0.02),
329 CPL_ERROR_ILLEGAL_OUTPUT,
330 "Object spectrum differs at (x, order) = (%d, %d): In = %f (%d); Out = %f (%d)",
331 x, order, in, in_bad, out, out_bad);
333 assure( out_bad || in_bad ||
334 float_equal(osky, sky, 0.01),
335 CPL_ERROR_ILLEGAL_OUTPUT,
336 "Sky spectrum differs at (x, order) = (%d, %d), sky: In = %f (%d); Out = %f (%d)",
337 x, order, sky, in_bad, osky, out_bad);
339 if (!out_bad && !in_bad)
341 cpl_test_rel(out, in, 0.02);
342 cpl_test_rel(osky, sky, 0.01);
351 uves_free_image(&in_spectrum);
352 uves_free_image(&in_sky);
353 uves_free_image(&image);
354 uves_free_image(&image_noise);
355 uves_free_propertylist(&image_header);
357 uves_free_parameterlist(¶meters);
358 uves_free_table(&ordertable);
360 uves_extract_profile_delete(&profile);
361 uves_free_image(&cosmics);
363 uves_free_image(&out_spectrum);
364 uves_free_image(&out_sky);
365 uves_free_image(&out_sky_noise);
366 uves_free_image(&weights);
367 uves_free_table(&cosmic_mask);
368 uves_free_image(&cosmic_image);
369 uves_free_table(&info_tbl);
370 uves_free_table(&order_trace);
385 uves_iterate_position *pos = NULL;
386 cpl_binary *bpm = NULL;
390 cpl_image *image = cpl_image_new(2000, 1000, CPL_TYPE_DOUBLE);
396 minorder, maxorder, nx) );
411 "Set first position failed");
413 assure( pos->x == 1 && pos->order == minorder,
414 CPL_ERROR_ILLEGAL_OUTPUT,
415 "Set first position failed: x, order, minorder = %d %d %d",
416 pos->x, pos->order, minorder);
429 assure( pos->x == 1 && pos->y == y+4 &&
430 pos->order == minorder, CPL_ERROR_ILLEGAL_OUTPUT,
431 "Increment failed: x, y, order = %d, %d (%d), %d",
432 pos->x, pos->y, y+1, pos->order);
449 cpl_test_eq( pos->x, 1 );
450 cpl_test_eq( pos->y, y+1 );
451 cpl_test_eq( pos->order, minorder+1 );
459 uves_free_image(&image);
473 cpl_test_init(PACKAGE_BUGREPORT, CPL_MSG_WARNING);
481 return cpl_test_end(0);