85 #include <uves_wavecal_utils.h>
86 #include <uves_utils.h>
87 #include <uves_utils_wrappers.h>
88 #include <uves_error.h>
121 lt->
table = cpl_calloc(windows*traces,
sizeof(cpl_table *));
140 if (lt != NULL && *lt != NULL)
143 for (i = 0; i < (*lt)->windows * (*lt)->traces; i++)
145 uves_free_table (&((*lt)->table[i]));
150 cpl_free((*lt)->table);
151 cpl_free((*lt)->dispersion_relation);
152 cpl_free((*lt)->absolute_order);
153 cpl_free((*lt)->first_absolute_order);
154 cpl_free((*lt)->last_absolute_order);
174 return &(lt->
table[trace + (window-1)*lt->
traces]);
258 else if (lo + 1 == hi)
261 lhi = cpl_table_get_double(line_refer,
"Wave", hi, NULL);
262 llo = cpl_table_get_double(line_refer,
"Wave", lo, NULL);
265 return ((llo-lambda)*(llo-lambda) < (lhi-lambda)*(lhi-lambda)) ? lo : hi;
270 int mid = (lo + hi)/2;
273 lmid = cpl_table_get_double(line_refer,
"Wave", mid, NULL);
307 int numb_lines = cpl_table_get_nrow(table);
310 check( uves_erase_invalid_table_rows(table,
"Ident"),
311 "Error erasing un-identified lines");
313 assure( cpl_table_has_column(table,
"Residual_pix"),
314 CPL_ERROR_DATA_NOT_FOUND,
315 "Missing column 'Residual_pix'");
317 assure( cpl_table_has_column(table, LINETAB_RESIDUAL),
318 CPL_ERROR_DATA_NOT_FOUND,
319 "Missing column '" LINETAB_RESIDUAL
"'");
324 check(( uves_erase_table_rows(table,
325 "Residual_pix", CPL_GREATER_THAN, TOLERANCE),
326 uves_erase_table_rows(table,
327 "Residual_pix", CPL_LESS_THAN , -TOLERANCE)),
328 "Error removing rows");
333 check(( uves_erase_table_rows(table,
334 LINETAB_RESIDUAL, CPL_GREATER_THAN, -TOLERANCE),
335 uves_erase_table_rows(table,
336 LINETAB_RESIDUAL, CPL_LESS_THAN , TOLERANCE)),
337 "Error removing rows");
344 if (cpl_table_get_nrow(table) - cpl_table_count_invalid(table,
"Residual_pix") >= 2)
347 "Residual_pix",
"temp",
366 result = numb_lines - cpl_table_get_nrow(table);
405 const polynomial *order_locations,
const cpl_table *t,
406 const char *lambda_column,
const char *abs_order,
407 const int *relative_order,
int minorder,
int maxorder,
408 bool vertical,
int offset)
415 passure( dispersion != NULL,
" ");
418 passure( order_locations != NULL,
" ");
422 passure( cpl_table_has_column(t, lambda_column),
"%s", lambda_column);
423 if (abs_order != NULL)
425 passure( cpl_table_has_column(t, abs_order),
"%s", abs_order);
428 nx = cpl_image_get_size_x(image);
429 ny = cpl_image_get_size_y(image);
431 for (row = 0; row < cpl_table_get_nrow(t); row++) {
433 double lambda, lambda_left, lambda_right;
436 check( lambda = cpl_table_get_double(t, lambda_column, row, NULL),
437 "Error reading table");
439 if (abs_order != NULL)
440 check (minorder = maxorder = cpl_table_get_int(t, abs_order, row, NULL),
441 "Error reading table");
443 for (order = minorder; order <= maxorder; order++) {
448 xguess = 1 + (nx - 1) * (lambda - lambda_left)/(lambda_right - lambda_left);
452 if (1 <= xguess && xguess <= nx) {
459 if (cpl_error_get_code() != CPL_ERROR_NONE)
470 if (1 <= x && x <= nx) {
472 relative_order[order]);
475 for (i = -3; i <= 3; i++) {
477 check( cpl_image_set(image,
478 uves_min_int(nx, uves_max_int(1, x )),
479 uves_min_int(ny, uves_max_int(1, (
int) y + i +
481 "Error writing image");
484 check( cpl_image_set(image,
485 uves_min_int(nx, uves_max_int(1, x - i)),
486 uves_min_int(ny, uves_max_int(1, (
int) y +
488 "Error writing image");
500 return cpl_error_get_code();