38 #include "midi_utils.h"
39 #include "midi_pfits.h"
42 #include "midiTableToFits.h"
43 #include "midi_cplupgrade.h"
49 static int midi_kappamatrix_create(cpl_plugin *);
50 static int midi_kappamatrix_exec(cpl_plugin *);
51 static int midi_kappamatrix_destroy(cpl_plugin *);
52 static int midi_kappamatrix(cpl_frameset *,
const cpl_parameterlist *);
53 static int table_to_imglst_sky_target(
const char * ,
58 static int table_to_imglst_mask(
const char *,
61 static void kappa_to_ascii(
const cpl_image * ,
74 static char midi_kappamatrix_description[] =
75 "This recipe derives the Kappa Matrix in the SCI_PHOT mode following\n"
76 "the definition in A&A 425 1161. It uses a set of AOPEN and BOPEN\n"
77 "photometry files as well as a spatial profile of the spectrum. The\n"
78 "spectrum is extracted using the Optimal Extraction algorithm\n"
79 "(Horne 1986, PASP 98 209) adapted to NIR data, i.e. background dominated\n"
80 "images. The errors of the kappa matrix are not calculated but set a\n"
81 "priori to 5 per cent. "
82 "The main output is a fits table with the PRO\n"
83 "CATG keyword set to MIDI_KAPPAMATRIX_(G|P)RISM. For diagnostic reasons the\n"
84 "different kappa matrixes are also saved as single fits images\n\n"
88 " DO category: Type: Explanation: Required:\n"
89 " PHOTOM_SP_CALIB Raw Raw data frame \n"
91 " PHOTOM_SP_SCIENCE Raw Raw data frame \n\n"
92 " KAPPA_SP_MASK_PRISM Calib Spectral profile \n"
94 " KAPPA_SP_MASK_GRISM Calib Spectral profile \n\n"
96 " DO category: Data type: Explanation:\n"
97 " MIDI_KAPPAMATRIX_PRISM FITS table Kappa matrix: Main product \n"
99 " MIDI_KAPPAMATRIX_GRISM FITS table Kappa matrix: Main product \n\n"
100 " MIDI_KAPPAMATRIX11 FITS image Kappa matrix: For diagnostics\n"
101 " MIDI_KAPPAMATRIX11_FILTERED FITS image Kappa matrix: For diagnostics\n"
102 " MIDI_KAPPAMATRIX11_NOMASK FITS image Kappa matrix: For diagnostics\n"
103 " MIDI_KAPPAMATRIX12 FITS image Kappa matrix: For diagnostics\n"
104 " MIDI_KAPPAMATRIX12_FILTERED FITS image Kappa matrix: For diagnostics\n"
105 " MIDI_KAPPAMATRIX12_NOMASK FITS image Kappa matrix: For diagnostics\n"
106 " MIDI_KAPPAMATRIX21 FITS image Kappa matrix: For diagnostics\n"
107 " MIDI_KAPPAMATRIX21_FILTERED FITS image Kappa matrix: For diagnostics\n"
108 " MIDI_KAPPAMATRIX21_NOMASK FITS image Kappa matrix: For diagnostics\n"
109 " MIDI_KAPPAMATRIX22 FITS image Kappa matrix: For diagnostics\n"
110 " MIDI_KAPPAMATRIX22_FILTERED FITS image Kappa matrix: For diagnostics\n"
111 " MIDI_KAPPAMATRIX22_NOMASK FITS image Kappa matrix: For diagnostics\n\n";
141 cpl_recipe * recipe = cpl_calloc(1,
sizeof *recipe );
142 cpl_plugin * plugin = &recipe->interface;
144 if (cpl_plugin_init(plugin,
147 CPL_PLUGIN_TYPE_RECIPE,
149 "Derives the Kappamatrix for the SCI_PHOT mode",
150 midi_kappamatrix_description,
154 midi_kappamatrix_create,
155 midi_kappamatrix_exec,
156 midi_kappamatrix_destroy)) {
157 cpl_msg_error(cpl_func,
"Plugin initialization failed");
158 (void)cpl_error_set_where(cpl_func);
162 if (cpl_pluginlist_append(list, plugin)) {
163 cpl_msg_error(cpl_func,
"Error adding plugin to list");
164 (void)cpl_error_set_where(cpl_func);
180 static int midi_kappamatrix_create(cpl_plugin * plugin)
186 if (cpl_error_get_code() != CPL_ERROR_NONE) {
187 cpl_msg_error(cpl_func,
"%s():%d: An error is already set: %s",
188 cpl_func, __LINE__, cpl_error_get_where());
189 return (
int)cpl_error_get_code();
192 if (plugin == NULL) {
193 cpl_msg_error(cpl_func,
"Null plugin");
194 cpl_ensure_code(0, (
int)CPL_ERROR_NULL_INPUT);
198 if (cpl_plugin_get_type(plugin) != CPL_PLUGIN_TYPE_RECIPE) {
199 cpl_msg_error(cpl_func,
"Plugin is not a recipe");
200 cpl_ensure_code(0, (
int)CPL_ERROR_TYPE_MISMATCH);
204 recipe = (cpl_recipe *)plugin;
207 recipe->parameters = cpl_parameterlist_new();
208 if (recipe->parameters == NULL) {
209 cpl_msg_error(cpl_func,
"Parameter list allocation failed");
210 cpl_ensure_code(0, (
int)CPL_ERROR_ILLEGAL_OUTPUT);
222 p = cpl_parameter_new_value(
"midi.midi_kappamatrix.medianwindow",
224 "The window size of the median filter. No influence on the main product",
225 "midi.midi_kappamatrix",9);
226 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"medianwindow");
227 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
228 cpl_parameterlist_append(recipe->parameters, p);
248 static int midi_kappamatrix_exec(cpl_plugin * plugin)
253 cpl_errorstate initial_errorstate = cpl_errorstate_get();
256 if (cpl_error_get_code() != CPL_ERROR_NONE) {
257 cpl_msg_error(cpl_func,
"%s():%d: An error is already set: %s",
258 cpl_func, __LINE__, cpl_error_get_where());
259 return (
int)cpl_error_get_code();
262 if (plugin == NULL) {
263 cpl_msg_error(cpl_func,
"Null plugin");
264 cpl_ensure_code(0, (
int)CPL_ERROR_NULL_INPUT);
268 if (cpl_plugin_get_type(plugin) != CPL_PLUGIN_TYPE_RECIPE) {
269 cpl_msg_error(cpl_func,
"Plugin is not a recipe");
270 cpl_ensure_code(0, (
int)CPL_ERROR_TYPE_MISMATCH);
274 recipe = (cpl_recipe *)plugin;
277 if (recipe->parameters == NULL) {
278 cpl_msg_error(cpl_func,
"Recipe invoked with NULL parameter list");
279 cpl_ensure_code(0, (
int)CPL_ERROR_NULL_INPUT);
281 if (recipe->frames == NULL) {
282 cpl_msg_error(cpl_func,
"Recipe invoked with NULL frame set");
283 cpl_ensure_code(0, (
int)CPL_ERROR_NULL_INPUT);
287 recipe_status = midi_kappamatrix(recipe->frames, recipe->parameters);
290 if (cpl_dfs_update_product_header(recipe->frames)) {
291 if (!recipe_status) recipe_status = (int)cpl_error_get_code();
294 if (!cpl_errorstate_is_equal(initial_errorstate)) {
297 cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
300 return recipe_status;
310 static int midi_kappamatrix_destroy(cpl_plugin * plugin)
314 if (plugin == NULL) {
315 cpl_msg_error(cpl_func,
"Null plugin");
316 cpl_ensure_code(0, (
int)CPL_ERROR_NULL_INPUT);
320 if (cpl_plugin_get_type(plugin) != CPL_PLUGIN_TYPE_RECIPE) {
321 cpl_msg_error(cpl_func,
"Plugin is not a recipe");
322 cpl_ensure_code(0, (
int)CPL_ERROR_TYPE_MISMATCH);
326 recipe = (cpl_recipe *)plugin;
328 cpl_parameterlist_delete(recipe->parameters);
341 static int midi_kappamatrix(cpl_frameset * frameset,
342 const cpl_parameterlist * parlist)
344 const cpl_parameter * param;
345 cpl_frame * cur_frame;
346 cpl_table * table=NULL;
347 cpl_table * kappamatrix_table=NULL;
348 cpl_propertylist * plist;
350 cpl_propertylist * qclist11;
351 cpl_propertylist * qclist12;
352 cpl_propertylist * qclist21;
353 cpl_propertylist * qclist22;
354 cpl_propertylist * qclist11_nomask;
355 cpl_propertylist * qclist12_nomask;
356 cpl_propertylist * qclist21_nomask;
357 cpl_propertylist * qclist22_nomask;
358 cpl_propertylist * qclist11_filtered;
359 cpl_propertylist * qclist12_filtered;
360 cpl_propertylist * qclist21_filtered;
361 cpl_propertylist * qclist22_filtered;
362 cpl_propertylist * qclist_all;
363 cpl_propertylist * qclist_all_extension;
364 cpl_mask * mask=NULL;
366 const char * shutter_id =NULL;
367 cpl_errorstate prestate = cpl_errorstate_get();
372 char gris_name[100]=
"";
373 int ext_imaging_data;
376 double * pmask_grism_DATA1=NULL;
377 double * pmask_grism_DATA1_norm=NULL;
378 double * pmask_grism_DATA2=NULL;
379 double * pmask_grism_DATA2_norm=NULL;
380 double * pmask_grism_DATA3=NULL;
381 double * pmask_grism_DATA3_norm=NULL;
382 double * pmask_grism_DATA4=NULL;
383 double * pmask_grism_DATA4_norm=NULL;
385 double * pmask_prism_DATA1=NULL;
386 double * pmask_prism_DATA1_norm=NULL;
387 double * pmask_prism_DATA2=NULL;
388 double * pmask_prism_DATA2_norm=NULL;
389 double * pmask_prism_DATA3=NULL;
390 double * pmask_prism_DATA3_norm=NULL;
391 double * pmask_prism_DATA4=NULL;
392 double * pmask_prism_DATA4_norm=NULL;
394 double kappamatrix11_stdev=0.;
395 double kappamatrix11_stdev_nomask=0.;
396 double kappamatrix11_stdev_filtered=0.;
397 double kappamatrix12_stdev=0.;
398 double kappamatrix12_stdev_nomask=0.;
399 double kappamatrix12_stdev_filtered=0.;
400 double kappamatrix21_stdev=0.;
401 double kappamatrix21_stdev_nomask=0.;
402 double kappamatrix21_stdev_filtered=0.;
403 double kappamatrix22_stdev=0.;
404 double kappamatrix22_stdev_nomask=0.;
405 double kappamatrix22_stdev_filtered=0.;
407 double kappamatrix11_median=0.;
408 double kappamatrix11_median_nomask=0.;
409 double kappamatrix11_median_filtered=0.;
410 double kappamatrix12_median=0.;
411 double kappamatrix12_median_nomask=0.;
412 double kappamatrix12_median_filtered=0.;
413 double kappamatrix21_median=0.;
414 double kappamatrix21_median_nomask=0.;
415 double kappamatrix21_median_filtered=0.;
416 double kappamatrix22_median=0.;
417 double kappamatrix22_median_nomask=0.;
418 double kappamatrix22_median_filtered=0.;
421 int nx_DATA1=0,nx_DATA2=0,nx_DATA3=0,nx_DATA4=0;
422 int ny_DATA1=0,ny_DATA2=0,ny_DATA3=0,ny_DATA4=0;
428 cpl_image * image_AOPEN_DATA2_T = NULL;
429 cpl_image * image_AOPEN_DATA3_T = NULL;
430 cpl_image * image_AOPEN_DATA4_T = NULL;
432 cpl_image * image_BOPEN_DATA1_T = NULL;
433 cpl_image * image_BOPEN_DATA2_T = NULL;
434 cpl_image * image_BOPEN_DATA3_T = NULL;
436 cpl_image * image_AOPEN_DATA2_T_collapsed = NULL;
437 cpl_image * image_AOPEN_DATA3_T_collapsed = NULL;
438 cpl_image * image_AOPEN_DATA4_T_collapsed = NULL;
439 cpl_image * image_BOPEN_DATA1_T_collapsed = NULL;
440 cpl_image * image_BOPEN_DATA2_T_collapsed = NULL;
441 cpl_image * image_BOPEN_DATA3_T_collapsed = NULL;
443 cpl_image * image_AOPEN_DATA2_T_collapsed_nomask = NULL;
444 cpl_image * image_AOPEN_DATA3_T_collapsed_nomask = NULL;
445 cpl_image * image_AOPEN_DATA4_T_collapsed_nomask = NULL;
446 cpl_image * image_BOPEN_DATA1_T_collapsed_nomask = NULL;
447 cpl_image * image_BOPEN_DATA2_T_collapsed_nomask = NULL;
448 cpl_image * image_BOPEN_DATA3_T_collapsed_nomask = NULL;
451 cpl_image * mask_grism_DATA1_collapsed = NULL;
452 cpl_image * mask_grism_DATA2_collapsed = NULL;
453 cpl_image * mask_grism_DATA3_collapsed = NULL;
454 cpl_image * mask_grism_DATA4_collapsed = NULL;
456 cpl_image * mask_prism_DATA1_collapsed = NULL;
457 cpl_image * mask_prism_DATA2_collapsed = NULL;
458 cpl_image * mask_prism_DATA3_collapsed = NULL;
459 cpl_image * mask_prism_DATA4_collapsed = NULL;
463 cpl_image * kappamatrix11 = NULL;
464 cpl_image * kappamatrix12 = NULL;
465 cpl_image * kappamatrix21 = NULL;
466 cpl_image * kappamatrix22 = NULL;
467 cpl_image * kappamatrix11_nomask = NULL;
468 cpl_image * kappamatrix12_nomask = NULL;
469 cpl_image * kappamatrix21_nomask = NULL;
470 cpl_image * kappamatrix22_nomask = NULL;
471 cpl_image * kappamatrix11_filtered = NULL;
472 cpl_image * kappamatrix12_filtered = NULL;
473 cpl_image * kappamatrix21_filtered = NULL;
474 cpl_image * kappamatrix22_filtered = NULL;
476 cpl_image * mask_grism_DATA1 = NULL;
477 cpl_image * mask_grism_DATA2 = NULL;
478 cpl_image * mask_grism_DATA3 = NULL;
479 cpl_image * mask_grism_DATA4 = NULL;
481 cpl_image * mask_grism_DATA1_norm = NULL;
482 cpl_image * mask_grism_DATA2_norm = NULL;
483 cpl_image * mask_grism_DATA3_norm = NULL;
484 cpl_image * mask_grism_DATA4_norm = NULL;
486 cpl_image * mask_prism_DATA1 = NULL;
487 cpl_image * mask_prism_DATA2 = NULL;
488 cpl_image * mask_prism_DATA3 = NULL;
489 cpl_image * mask_prism_DATA4 = NULL;
492 cpl_image * mask_prism_DATA1_norm = NULL;
493 cpl_image * mask_prism_DATA2_norm = NULL;
494 cpl_image * mask_prism_DATA3_norm = NULL;
495 cpl_image * mask_prism_DATA4_norm = NULL;
499 cpl_imagelist * imglst_AOPEN_DATA2_S;
500 cpl_imagelist * imglst_AOPEN_DATA2_T;
501 cpl_imagelist * imglst_AOPEN_DATA3_S;
502 cpl_imagelist * imglst_AOPEN_DATA3_T;
503 cpl_imagelist * imglst_AOPEN_DATA4_S;
504 cpl_imagelist * imglst_AOPEN_DATA4_T;
506 cpl_imagelist * imglst_BOPEN_DATA1_S;
507 cpl_imagelist * imglst_BOPEN_DATA1_T;
508 cpl_imagelist * imglst_BOPEN_DATA2_S;
509 cpl_imagelist * imglst_BOPEN_DATA2_T;
510 cpl_imagelist * imglst_BOPEN_DATA3_S;
511 cpl_imagelist * imglst_BOPEN_DATA3_T;
515 cpl_imagelist * imglst_mask_prism;
516 cpl_imagelist * imglst_mask_grism;
523 cur_frame = cpl_frameset_get_first(frameset);
524 if (cur_frame == NULL) {
525 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
526 "SOF does not have any file");
532 imglst_AOPEN_DATA2_S=cpl_imagelist_new();
533 imglst_AOPEN_DATA2_T=cpl_imagelist_new();
534 imglst_AOPEN_DATA3_S=cpl_imagelist_new();
535 imglst_AOPEN_DATA3_T=cpl_imagelist_new();
536 imglst_AOPEN_DATA4_S=cpl_imagelist_new();
537 imglst_AOPEN_DATA4_T=cpl_imagelist_new();
539 imglst_BOPEN_DATA1_S=cpl_imagelist_new();
540 imglst_BOPEN_DATA1_T=cpl_imagelist_new();
541 imglst_BOPEN_DATA2_S=cpl_imagelist_new();
542 imglst_BOPEN_DATA2_T=cpl_imagelist_new();
543 imglst_BOPEN_DATA3_S=cpl_imagelist_new();
544 imglst_BOPEN_DATA3_T=cpl_imagelist_new();
548 imglst_mask_prism=cpl_imagelist_new();
549 imglst_mask_grism=cpl_imagelist_new();
557 param = cpl_parameterlist_find_const(parlist,
558 "midi.midi_kappamatrix.medianwindow");
559 medianwindow = cpl_parameter_get_int(param);
561 if(medianwindow%2 == 0)
563 cpl_msg_warning(cpl_func,
"The window size of the median filter is not odd,");
564 cpl_msg_warning(cpl_func,
"therefore the size is increased by unity");
565 medianwindow=medianwindow+1;
568 if(medianwindow > 81)
570 cpl_msg_warning(cpl_func,
"The window size of the median filter exceeds the maximal supported value,");
571 cpl_msg_warning(cpl_func,
"therefore the size is reset to 81");
577 cpl_msg_warning(cpl_func,
"The window size of the median filter must be positive,");
578 cpl_msg_warning(cpl_func,
"therefore the size is reset to 1");
584 if (!cpl_errorstate_is_equal(prestate)) {
585 return (
int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
"Could not retrieve the input parameters");
590 cpl_error_get_code());
601 cur_frame = cpl_frameset_get_first(frameset);
602 if (cur_frame == NULL) {
603 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
604 "SOF does not have any file");
610 tag = (
char*)cpl_frame_get_tag(cur_frame);
611 if (strcmp(tag, MIDI_PHOTOM_SP_CALIB) && strcmp(tag, MIDI_PHOTOM_SP_SCIENCE)) {
612 cur_frame = cpl_frameset_get_next( frameset );
616 cpl_msg_info(cpl_func,
"Processing file %s",cpl_frame_get_filename(cur_frame));
617 ext_imaging_data=cpl_fits_find_extension(cpl_frame_get_filename(cur_frame),
"IMAGING_DATA");
621 plist = cpl_propertylist_load(cpl_frame_get_filename(cur_frame), 0);
622 if (cpl_propertylist_has(plist,
"ESO INS SHUT ID") == 1)
624 shutter_id=(cpl_propertylist_get_string(plist,
"ESO INS SHUT ID"));
628 if (cpl_propertylist_has(plist,
"ESO INS GRIS NAME") == 1)
630 strcpy(gris_name,cpl_propertylist_get_string(plist,
"ESO INS GRIS NAME"));
633 if (!cpl_errorstate_is_equal(prestate)) {
634 return (
int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
"Could not ...");
637 if (strcmp(shutter_id,
"AOPEN")==0)
643 table = cpl_table_load(cpl_frame_get_filename(cur_frame), ext_imaging_data, 1);
645 return (
int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
646 "Could not load the table");
648 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
653 if (cpl_table_has_column(table,
"DATA2")){
654 table_to_imglst_sky_target(
"DATA2",
"TARTYP2",imglst_AOPEN_DATA2_S,imglst_AOPEN_DATA2_T,table);
657 if (cpl_table_has_column(table,
"DATA3")){
658 table_to_imglst_sky_target(
"DATA3",
"TARTYP2",imglst_AOPEN_DATA3_S,imglst_AOPEN_DATA3_T,table);
661 if (cpl_table_has_column(table,
"DATA4")){
662 table_to_imglst_sky_target(
"DATA4",
"TARTYP2",imglst_AOPEN_DATA4_S,imglst_AOPEN_DATA4_T,table);
665 cpl_msg_info(cpl_func,
"Number of so far processed AOPEN patches: % " CPL_SIZE_FORMAT
" ",cpl_imagelist_get_size(imglst_AOPEN_DATA2_T));
667 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
669 cpl_table_delete(table);
672 if (strcmp(shutter_id,
"BOPEN")==0)
678 table = cpl_table_load(cpl_frame_get_filename(cur_frame), ext_imaging_data, 1);
680 return (
int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
681 "Could not load the table");
683 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
687 if (cpl_table_has_column(table,
"DATA1")){
688 table_to_imglst_sky_target(
"DATA1",
"TARTYP2",imglst_BOPEN_DATA1_S,imglst_BOPEN_DATA1_T,table);
692 if (cpl_table_has_column(table,
"DATA2")){
693 table_to_imglst_sky_target(
"DATA2",
"TARTYP2",imglst_BOPEN_DATA2_S,imglst_BOPEN_DATA2_T,table);
696 if (cpl_table_has_column(table,
"DATA3")){
697 table_to_imglst_sky_target(
"DATA3",
"TARTYP2",imglst_BOPEN_DATA3_S,imglst_BOPEN_DATA3_T,table);
703 cpl_msg_info(cpl_func,
"Number of so far processed BOPEN patches: % " CPL_SIZE_FORMAT
" ",cpl_imagelist_get_size(imglst_BOPEN_DATA2_T));
706 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
708 cpl_table_delete(table);
712 cpl_propertylist_delete(plist);
715 cur_frame = cpl_frameset_get_next( frameset );
720 if (isPHOTAdata==0 || isPHOTBdata==0)
722 cpl_msg_error(cpl_func,
"No suitable SetOfFrame fround");
723 (void)cpl_error_set_where(cpl_func);
724 return (
int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
"Mask for filter name PRISM needed but not found");
731 cpl_msg_info(cpl_func,
"Doing sky subtraction ...");
733 if(cpl_imagelist_get_size(imglst_AOPEN_DATA2_T)==cpl_imagelist_get_size(imglst_AOPEN_DATA2_S)
734 && cpl_imagelist_get_size(imglst_BOPEN_DATA1_T)==cpl_imagelist_get_size(imglst_BOPEN_DATA1_S)
737 cpl_imagelist_subtract(imglst_AOPEN_DATA2_T,imglst_AOPEN_DATA2_S);
738 cpl_imagelist_subtract(imglst_AOPEN_DATA3_T,imglst_AOPEN_DATA3_S);
739 cpl_imagelist_subtract(imglst_AOPEN_DATA4_T,imglst_AOPEN_DATA4_S);
740 cpl_imagelist_subtract(imglst_BOPEN_DATA1_T,imglst_BOPEN_DATA1_S);
741 cpl_imagelist_subtract(imglst_BOPEN_DATA2_T,imglst_BOPEN_DATA2_S);
742 cpl_imagelist_subtract(imglst_BOPEN_DATA3_T,imglst_BOPEN_DATA3_S);
746 cpl_msg_info(cpl_func,
"The number of Skyframes and Targetframes differ");
747 return (
int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
748 "The number of Skyframes and Targetframes differ");
752 cpl_msg_info(cpl_func,
"Collapsing the images in the time domain ...");
755 image_AOPEN_DATA2_T=cpl_imagelist_collapse_create(imglst_AOPEN_DATA2_T);
756 image_AOPEN_DATA3_T=cpl_imagelist_collapse_create(imglst_AOPEN_DATA3_T);
757 image_AOPEN_DATA4_T=cpl_imagelist_collapse_create(imglst_AOPEN_DATA4_T);
758 image_BOPEN_DATA1_T=cpl_imagelist_collapse_create(imglst_BOPEN_DATA1_T);
759 image_BOPEN_DATA2_T=cpl_imagelist_collapse_create(imglst_BOPEN_DATA2_T);
760 image_BOPEN_DATA3_T=cpl_imagelist_collapse_create(imglst_BOPEN_DATA3_T);
763 cpl_imagelist_delete(imglst_AOPEN_DATA2_T);
764 cpl_imagelist_delete(imglst_AOPEN_DATA3_T);
765 cpl_imagelist_delete(imglst_AOPEN_DATA4_T);
766 cpl_imagelist_delete(imglst_AOPEN_DATA2_S);
767 cpl_imagelist_delete(imglst_AOPEN_DATA3_S);
768 cpl_imagelist_delete(imglst_AOPEN_DATA4_S);
770 cpl_imagelist_delete(imglst_BOPEN_DATA1_T);
771 cpl_imagelist_delete(imglst_BOPEN_DATA2_T);
772 cpl_imagelist_delete(imglst_BOPEN_DATA3_T);
773 cpl_imagelist_delete(imglst_BOPEN_DATA1_S);
774 cpl_imagelist_delete(imglst_BOPEN_DATA2_S);
775 cpl_imagelist_delete(imglst_BOPEN_DATA3_S);
785 cpl_msg_info(cpl_func,
"Extracting the masks ...");
787 cur_frame = cpl_frameset_get_first(frameset);
788 if (cur_frame == NULL) {
789 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
790 "SOF does not have any file");
795 ext_imaging_data=cpl_fits_find_extension(cpl_frame_get_filename(cur_frame),
"IMAGING_DATA");
798 tag = (
char*)cpl_frame_get_tag(cur_frame);
800 if (!strcmp(tag, MIDI_KAPPA_SP_MASK_GRISM)) {
801 table = cpl_table_load(cpl_frame_get_filename(cur_frame), ext_imaging_data, 1);
803 return (
int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
804 "Could not load the table");
806 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
808 table_to_imglst_mask(
"DATA1",imglst_mask_grism,table);
809 table_to_imglst_mask(
"DATA1",imglst_mask_grism,table);
810 table_to_imglst_mask(
"DATA2",imglst_mask_grism,table);
811 table_to_imglst_mask(
"DATA3",imglst_mask_grism,table);
812 table_to_imglst_mask(
"DATA4",imglst_mask_grism,table);
816 cpl_msg_info(cpl_func,
"Normalizing the integral of the masks (GRISM) to unity ...");
817 mask_grism_DATA1=cpl_image_cast(cpl_imagelist_get(imglst_mask_grism, 1),CPL_TYPE_DOUBLE);
818 mask_grism_DATA2=cpl_image_cast(cpl_imagelist_get(imglst_mask_grism, 2),CPL_TYPE_DOUBLE);
819 mask_grism_DATA3=cpl_image_cast(cpl_imagelist_get(imglst_mask_grism, 3),CPL_TYPE_DOUBLE);
820 mask_grism_DATA4=cpl_image_cast(cpl_imagelist_get(imglst_mask_grism, 4),CPL_TYPE_DOUBLE);
822 mask_grism_DATA1_norm=cpl_image_collapse_create(mask_grism_DATA1,0);
823 mask_grism_DATA2_norm=cpl_image_collapse_create(mask_grism_DATA2,0);
824 mask_grism_DATA3_norm=cpl_image_collapse_create(mask_grism_DATA3,0);
825 mask_grism_DATA4_norm=cpl_image_collapse_create(mask_grism_DATA4,0);
827 nx_DATA1=cpl_image_get_size_x(mask_grism_DATA1);
828 ny_DATA1=cpl_image_get_size_y(mask_grism_DATA1);
829 nx_DATA2=cpl_image_get_size_x(mask_grism_DATA2);
830 ny_DATA2=cpl_image_get_size_y(mask_grism_DATA2);
831 nx_DATA3=cpl_image_get_size_x(mask_grism_DATA3);
832 ny_DATA3=cpl_image_get_size_y(mask_grism_DATA3);
833 nx_DATA4=cpl_image_get_size_x(mask_grism_DATA4);
834 ny_DATA4=cpl_image_get_size_y(mask_grism_DATA4);
836 pmask_grism_DATA1 = cpl_image_get_data_double(mask_grism_DATA1);
837 pmask_grism_DATA1_norm= cpl_image_get_data_double(mask_grism_DATA1_norm);
838 pmask_grism_DATA2 = cpl_image_get_data_double(mask_grism_DATA2);
839 pmask_grism_DATA2_norm= cpl_image_get_data_double(mask_grism_DATA2_norm);
840 pmask_grism_DATA3 = cpl_image_get_data_double(mask_grism_DATA3);
841 pmask_grism_DATA3_norm= cpl_image_get_data_double(mask_grism_DATA3_norm);
842 pmask_grism_DATA4 = cpl_image_get_data_double(mask_grism_DATA4);
843 pmask_grism_DATA4_norm= cpl_image_get_data_double(mask_grism_DATA4_norm);
847 for (xpos=0; xpos<nx_DATA1; ++xpos)
849 for(ypos=0; ypos<ny_DATA1;++ypos)
851 pmask_grism_DATA1[xpos+nx_DATA1*ypos] /= pmask_grism_DATA1_norm[xpos];
855 for (xpos=0; xpos<nx_DATA2; ++xpos)
857 for(ypos=0; ypos<ny_DATA2;++ypos)
859 pmask_grism_DATA2[xpos+nx_DATA2*ypos] /= pmask_grism_DATA2_norm[xpos];
864 for (xpos=0; xpos<nx_DATA3; ++xpos)
866 for(ypos=0; ypos<ny_DATA3;++ypos)
868 pmask_grism_DATA3[xpos+nx_DATA3*ypos] /= pmask_grism_DATA3_norm[xpos];
873 for (xpos=0; xpos<nx_DATA4; ++xpos)
875 for(ypos=0; ypos<ny_DATA4;++ypos)
877 pmask_grism_DATA4[xpos+nx_DATA4*ypos] /= pmask_grism_DATA4_norm[xpos];
881 cpl_image_delete(mask_grism_DATA1_norm);
882 cpl_image_delete(mask_grism_DATA2_norm);
883 cpl_image_delete(mask_grism_DATA3_norm);
884 cpl_image_delete(mask_grism_DATA4_norm);
886 cpl_table_delete(table);
890 if (!strcmp(tag, MIDI_KAPPA_SP_MASK_PRISM)) {
891 table = cpl_table_load(cpl_frame_get_filename(cur_frame), ext_imaging_data, 1);
893 return (
int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
894 "Could not load the table");
896 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
898 table_to_imglst_mask(
"DATA1",imglst_mask_prism,table);
899 table_to_imglst_mask(
"DATA1",imglst_mask_prism,table);
900 table_to_imglst_mask(
"DATA2",imglst_mask_prism,table);
901 table_to_imglst_mask(
"DATA3",imglst_mask_prism,table);
902 table_to_imglst_mask(
"DATA4",imglst_mask_prism,table);
907 cpl_msg_info(cpl_func,
"Normalizing the integral of the masks (PRISM) to unity ...");
908 mask_prism_DATA1=cpl_image_cast(cpl_imagelist_get(imglst_mask_prism, 1),CPL_TYPE_DOUBLE);
909 mask_prism_DATA2=cpl_image_cast(cpl_imagelist_get(imglst_mask_prism, 2),CPL_TYPE_DOUBLE);
910 mask_prism_DATA3=cpl_image_cast(cpl_imagelist_get(imglst_mask_prism, 3),CPL_TYPE_DOUBLE);
911 mask_prism_DATA4=cpl_image_cast(cpl_imagelist_get(imglst_mask_prism, 4),CPL_TYPE_DOUBLE);
913 mask_prism_DATA1_norm=cpl_image_collapse_create(mask_prism_DATA1,0);
914 mask_prism_DATA2_norm=cpl_image_collapse_create(mask_prism_DATA2,0);
915 mask_prism_DATA3_norm=cpl_image_collapse_create(mask_prism_DATA3,0);
916 mask_prism_DATA4_norm=cpl_image_collapse_create(mask_prism_DATA4,0);
918 nx_DATA1=cpl_image_get_size_x(mask_prism_DATA1);
919 ny_DATA1=cpl_image_get_size_y(mask_prism_DATA1);
920 nx_DATA2=cpl_image_get_size_x(mask_prism_DATA2);
921 ny_DATA2=cpl_image_get_size_y(mask_prism_DATA2);
922 nx_DATA3=cpl_image_get_size_x(mask_prism_DATA3);
923 ny_DATA3=cpl_image_get_size_y(mask_prism_DATA3);
924 nx_DATA4=cpl_image_get_size_x(mask_prism_DATA4);
925 ny_DATA4=cpl_image_get_size_y(mask_prism_DATA4);
927 pmask_prism_DATA1 = cpl_image_get_data_double(mask_prism_DATA1);
928 pmask_prism_DATA1_norm= cpl_image_get_data_double(mask_prism_DATA1_norm);
929 pmask_prism_DATA2 = cpl_image_get_data_double(mask_prism_DATA2);
930 pmask_prism_DATA2_norm= cpl_image_get_data_double(mask_prism_DATA2_norm);
931 pmask_prism_DATA3 = cpl_image_get_data_double(mask_prism_DATA3);
932 pmask_prism_DATA3_norm= cpl_image_get_data_double(mask_prism_DATA3_norm);
933 pmask_prism_DATA4 = cpl_image_get_data_double(mask_prism_DATA4);
934 pmask_prism_DATA4_norm= cpl_image_get_data_double(mask_prism_DATA4_norm);
938 for (xpos=0; xpos<nx_DATA1; ++xpos)
940 for(ypos=0; ypos<ny_DATA1;++ypos)
942 pmask_prism_DATA1[xpos+nx_DATA1*ypos] /= pmask_prism_DATA1_norm[xpos];
946 for (xpos=0; xpos<nx_DATA2; ++xpos)
948 for(ypos=0; ypos<ny_DATA2;++ypos)
950 pmask_prism_DATA2[xpos+nx_DATA2*ypos] /= pmask_prism_DATA2_norm[xpos];
955 for (xpos=0; xpos<nx_DATA3; ++xpos)
957 for(ypos=0; ypos<ny_DATA3;++ypos)
959 pmask_prism_DATA3[xpos+nx_DATA3*ypos] /= pmask_prism_DATA3_norm[xpos];
964 for (xpos=0; xpos<nx_DATA4; ++xpos)
966 for(ypos=0; ypos<ny_DATA4;++ypos)
968 pmask_prism_DATA4[xpos+nx_DATA4*ypos] /= pmask_prism_DATA4_norm[xpos];
972 cpl_image_delete(mask_prism_DATA1_norm);
973 cpl_image_delete(mask_prism_DATA2_norm);
974 cpl_image_delete(mask_prism_DATA3_norm);
975 cpl_image_delete(mask_prism_DATA4_norm);
978 cpl_table_delete(table);
982 cur_frame = cpl_frameset_get_next( frameset );
989 if (strcmp(gris_name,
"GRISM")==0 && cpl_imagelist_get_size(imglst_mask_grism) <1)
991 cpl_msg_error(cpl_func,
"Mask for GRISM needed but not found");
992 (void)cpl_error_set_where(cpl_func);
993 return (
int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
"Mask for filter name GRISM needed but not found");
996 else if (strcmp(gris_name,
"PRISM")==0 && cpl_imagelist_get_size(imglst_mask_prism) <1)
998 cpl_msg_error(cpl_func,
"Mask for PRISM needed but not found");
999 (void)cpl_error_set_where(cpl_func);
1000 return (
int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
"Mask for filter name PRISM needed but not found");
1004 cpl_msg_info(cpl_func,
"Extracting the signal without using a mask ...");
1006 image_AOPEN_DATA2_T_collapsed_nomask=cpl_image_collapse_create(image_AOPEN_DATA2_T,0);
1007 image_AOPEN_DATA3_T_collapsed_nomask=cpl_image_collapse_create(image_AOPEN_DATA3_T,0);
1008 image_AOPEN_DATA4_T_collapsed_nomask=cpl_image_collapse_create(image_AOPEN_DATA4_T,0);
1009 image_BOPEN_DATA1_T_collapsed_nomask=cpl_image_collapse_create(image_BOPEN_DATA1_T,0);
1010 image_BOPEN_DATA2_T_collapsed_nomask=cpl_image_collapse_create(image_BOPEN_DATA2_T,0);
1011 image_BOPEN_DATA3_T_collapsed_nomask=cpl_image_collapse_create(image_BOPEN_DATA3_T,0);
1017 cpl_msg_info(cpl_func,
"Extracting the signal using Horne 1986, PASP 98 209 ...");
1018 cpl_msg_info(cpl_func,
"and assuming that the frames are sky-dominated: V(x)-> V0 ...");
1021 if (strcmp(gris_name,
"GRISM")==0){
1022 cpl_msg_info(cpl_func,
"Calculating the kappa matrix for the GRISM Data...");
1025 cpl_msg_info(cpl_func,
"1) Multiplying the images by the mask ...");
1026 cpl_image_multiply(image_AOPEN_DATA2_T,mask_grism_DATA2);
1027 cpl_image_multiply(image_AOPEN_DATA3_T,mask_grism_DATA3);
1028 cpl_image_multiply(image_AOPEN_DATA4_T,mask_grism_DATA4);
1029 cpl_image_multiply(image_BOPEN_DATA1_T,mask_grism_DATA1);
1030 cpl_image_multiply(image_BOPEN_DATA2_T,mask_grism_DATA2);
1031 cpl_image_multiply(image_BOPEN_DATA3_T,mask_grism_DATA3);
1034 cpl_msg_info(cpl_func,
"2) Integrating the images perpendicular to the dispersion direction ...");
1035 image_AOPEN_DATA2_T_collapsed=cpl_image_collapse_create(image_AOPEN_DATA2_T,0);
1036 image_AOPEN_DATA3_T_collapsed=cpl_image_collapse_create(image_AOPEN_DATA3_T,0);
1037 image_AOPEN_DATA4_T_collapsed=cpl_image_collapse_create(image_AOPEN_DATA4_T,0);
1038 image_BOPEN_DATA1_T_collapsed=cpl_image_collapse_create(image_BOPEN_DATA1_T,0);
1039 image_BOPEN_DATA2_T_collapsed=cpl_image_collapse_create(image_BOPEN_DATA2_T,0);
1040 image_BOPEN_DATA3_T_collapsed=cpl_image_collapse_create(image_BOPEN_DATA3_T,0);
1044 cpl_msg_info(cpl_func,
"3) Deriving mask^2 ");
1046 cpl_image_power(mask_grism_DATA1,2.0);
1047 cpl_image_power(mask_grism_DATA2,2.0);
1048 cpl_image_power(mask_grism_DATA3,2.0);
1049 cpl_image_power(mask_grism_DATA4,2.0);
1053 cpl_msg_info(cpl_func,
"4) Integrating mask^2 perpendicular to the dispersion direction");
1054 mask_grism_DATA1_collapsed=cpl_image_collapse_create(mask_grism_DATA1,0);
1055 mask_grism_DATA2_collapsed=cpl_image_collapse_create(mask_grism_DATA2,0);
1056 mask_grism_DATA3_collapsed=cpl_image_collapse_create(mask_grism_DATA3,0);
1057 mask_grism_DATA4_collapsed=cpl_image_collapse_create(mask_grism_DATA4,0);
1060 cpl_msg_info(cpl_func,
"5) Extracting the final flux by dividing 2) through 4)");
1061 cpl_image_divide(image_AOPEN_DATA2_T_collapsed,mask_grism_DATA2_collapsed);
1062 cpl_image_divide(image_AOPEN_DATA3_T_collapsed,mask_grism_DATA3_collapsed);
1063 cpl_image_divide(image_AOPEN_DATA4_T_collapsed,mask_grism_DATA4_collapsed);
1064 cpl_image_divide(image_BOPEN_DATA1_T_collapsed,mask_grism_DATA1_collapsed);
1065 cpl_image_divide(image_BOPEN_DATA2_T_collapsed,mask_grism_DATA2_collapsed);
1066 cpl_image_divide(image_BOPEN_DATA3_T_collapsed,mask_grism_DATA3_collapsed);
1069 cpl_image_delete(mask_grism_DATA1_collapsed);
1070 cpl_image_delete(mask_grism_DATA2_collapsed);
1071 cpl_image_delete(mask_grism_DATA3_collapsed);
1072 cpl_image_delete(mask_grism_DATA4_collapsed);
1076 if(mask_grism_DATA1 != NULL)cpl_image_delete(mask_grism_DATA1);
1077 if(mask_grism_DATA2 != NULL)cpl_image_delete(mask_grism_DATA2);
1078 if(mask_grism_DATA3 != NULL)cpl_image_delete(mask_grism_DATA3);
1079 if(mask_grism_DATA4 != NULL)cpl_image_delete(mask_grism_DATA4);
1083 if (strcmp(gris_name,
"PRISM")==0){
1084 cpl_msg_info(cpl_func,
"Calculating the kappa matrix for the PRISM Data...");
1087 cpl_msg_info(cpl_func,
"1) Multiplying the images by the mask ...");
1088 cpl_image_multiply(image_AOPEN_DATA2_T,mask_prism_DATA2);
1089 cpl_image_multiply(image_AOPEN_DATA3_T,mask_prism_DATA3);
1090 cpl_image_multiply(image_AOPEN_DATA4_T,mask_prism_DATA4);
1091 cpl_image_multiply(image_BOPEN_DATA1_T,mask_prism_DATA1);
1092 cpl_image_multiply(image_BOPEN_DATA2_T,mask_prism_DATA2);
1093 cpl_image_multiply(image_BOPEN_DATA3_T,mask_prism_DATA3);
1096 cpl_msg_info(cpl_func,
"2) Integrating the images perpendicular to the dispersion direction ...");
1097 image_AOPEN_DATA2_T_collapsed=cpl_image_collapse_create(image_AOPEN_DATA2_T,0);
1098 image_AOPEN_DATA3_T_collapsed=cpl_image_collapse_create(image_AOPEN_DATA3_T,0);
1099 image_AOPEN_DATA4_T_collapsed=cpl_image_collapse_create(image_AOPEN_DATA4_T,0);
1100 image_BOPEN_DATA1_T_collapsed=cpl_image_collapse_create(image_BOPEN_DATA1_T,0);
1101 image_BOPEN_DATA2_T_collapsed=cpl_image_collapse_create(image_BOPEN_DATA2_T,0);
1102 image_BOPEN_DATA3_T_collapsed=cpl_image_collapse_create(image_BOPEN_DATA3_T,0);
1106 cpl_msg_info(cpl_func,
"3) Deriving mask^2 ");
1108 cpl_image_power(mask_prism_DATA1,2.0);
1109 cpl_image_power(mask_prism_DATA2,2.0);
1110 cpl_image_power(mask_prism_DATA3,2.0);
1111 cpl_image_power(mask_prism_DATA4,2.0);
1116 cpl_msg_info(cpl_func,
"4) Integrating mask^2 perpendicular to the dispersion direction");
1117 mask_prism_DATA1_collapsed=cpl_image_collapse_create(mask_prism_DATA1,0);
1118 mask_prism_DATA2_collapsed=cpl_image_collapse_create(mask_prism_DATA2,0);
1119 mask_prism_DATA3_collapsed=cpl_image_collapse_create(mask_prism_DATA3,0);
1120 mask_prism_DATA4_collapsed=cpl_image_collapse_create(mask_prism_DATA4,0);
1122 cpl_msg_info(cpl_func,
"5) Extracting the final flux by dividing 2) through 4)");
1123 cpl_image_divide(image_AOPEN_DATA2_T_collapsed,mask_prism_DATA2_collapsed);
1124 cpl_image_divide(image_AOPEN_DATA3_T_collapsed,mask_prism_DATA3_collapsed);
1125 cpl_image_divide(image_AOPEN_DATA4_T_collapsed,mask_prism_DATA4_collapsed);
1126 cpl_image_divide(image_BOPEN_DATA1_T_collapsed,mask_prism_DATA1_collapsed);
1127 cpl_image_divide(image_BOPEN_DATA2_T_collapsed,mask_prism_DATA2_collapsed);
1128 cpl_image_divide(image_BOPEN_DATA3_T_collapsed,mask_prism_DATA3_collapsed);
1131 cpl_image_delete(mask_prism_DATA1_collapsed);
1132 cpl_image_delete(mask_prism_DATA2_collapsed);
1133 cpl_image_delete(mask_prism_DATA3_collapsed);
1134 cpl_image_delete(mask_prism_DATA4_collapsed);
1138 if(mask_prism_DATA1 != NULL)cpl_image_delete(mask_prism_DATA1);
1139 if(mask_prism_DATA2 != NULL)cpl_image_delete(mask_prism_DATA2);
1140 if(mask_prism_DATA3 != NULL)cpl_image_delete(mask_prism_DATA3);
1141 if(mask_prism_DATA4 != NULL)cpl_image_delete(mask_prism_DATA4);
1145 cpl_msg_info(cpl_func,
"Deriving the KAPPA matrix following A&A 425 1161 ...");
1147 kappamatrix11=cpl_image_divide_create (image_BOPEN_DATA2_T_collapsed, image_BOPEN_DATA1_T_collapsed);
1148 kappamatrix12=cpl_image_divide_create (image_AOPEN_DATA2_T_collapsed, image_AOPEN_DATA4_T_collapsed);
1149 kappamatrix21=cpl_image_divide_create (image_BOPEN_DATA3_T_collapsed, image_BOPEN_DATA1_T_collapsed);
1150 kappamatrix22=cpl_image_divide_create (image_AOPEN_DATA3_T_collapsed, image_AOPEN_DATA4_T_collapsed);
1152 kappamatrix11_nomask=cpl_image_divide_create (image_BOPEN_DATA2_T_collapsed_nomask, image_BOPEN_DATA1_T_collapsed_nomask);
1153 kappamatrix12_nomask=cpl_image_divide_create (image_AOPEN_DATA2_T_collapsed_nomask, image_AOPEN_DATA4_T_collapsed_nomask);
1154 kappamatrix21_nomask=cpl_image_divide_create (image_BOPEN_DATA3_T_collapsed_nomask, image_BOPEN_DATA1_T_collapsed_nomask);
1155 kappamatrix22_nomask=cpl_image_divide_create (image_AOPEN_DATA3_T_collapsed_nomask, image_AOPEN_DATA4_T_collapsed_nomask);
1160 cpl_image_delete(image_AOPEN_DATA2_T);
1161 cpl_image_delete(image_AOPEN_DATA3_T);
1162 cpl_image_delete(image_AOPEN_DATA4_T);
1164 cpl_image_delete(image_BOPEN_DATA1_T);
1165 cpl_image_delete(image_BOPEN_DATA2_T);
1166 cpl_image_delete(image_BOPEN_DATA3_T);
1168 cpl_image_delete(image_AOPEN_DATA2_T_collapsed);
1169 cpl_image_delete(image_AOPEN_DATA3_T_collapsed);
1170 cpl_image_delete(image_AOPEN_DATA4_T_collapsed);
1172 cpl_image_delete(image_BOPEN_DATA1_T_collapsed);
1173 cpl_image_delete(image_BOPEN_DATA2_T_collapsed);
1174 cpl_image_delete(image_BOPEN_DATA3_T_collapsed);
1176 cpl_image_delete(image_AOPEN_DATA2_T_collapsed_nomask);
1177 cpl_image_delete(image_AOPEN_DATA3_T_collapsed_nomask);
1178 cpl_image_delete(image_AOPEN_DATA4_T_collapsed_nomask);
1180 cpl_image_delete(image_BOPEN_DATA1_T_collapsed_nomask);
1181 cpl_image_delete(image_BOPEN_DATA2_T_collapsed_nomask);
1182 cpl_image_delete(image_BOPEN_DATA3_T_collapsed_nomask);
1194 cpl_msg_info(cpl_func,
"Smoothing the KAPPA matrix ...");
1196 mask = cpl_mask_new(medianwindow,1);
1199 kappamatrix11_filtered=cpl_image_duplicate(kappamatrix11);
1200 kappamatrix12_filtered=cpl_image_duplicate(kappamatrix12);
1201 kappamatrix21_filtered=cpl_image_duplicate(kappamatrix21);
1202 kappamatrix22_filtered=cpl_image_duplicate(kappamatrix22);
1205 cpl_image_filter_mask(kappamatrix11_filtered,kappamatrix11, mask,CPL_FILTER_MEDIAN ,CPL_BORDER_FILTER);
1206 cpl_image_filter_mask(kappamatrix12_filtered,kappamatrix12, mask,CPL_FILTER_MEDIAN ,CPL_BORDER_FILTER);
1207 cpl_image_filter_mask(kappamatrix21_filtered,kappamatrix21, mask,CPL_FILTER_MEDIAN ,CPL_BORDER_FILTER);
1208 cpl_image_filter_mask(kappamatrix22_filtered,kappamatrix22, mask,CPL_FILTER_MEDIAN ,CPL_BORDER_FILTER);
1210 cpl_mask_delete(mask);
1222 if (strcmp(gris_name,
"GRISM")==0)
1237 kappamatrix11_stdev=cpl_image_get_stdev_window (kappamatrix11,lowlimit,1,highlimit,1);
1238 kappamatrix11_stdev_nomask=cpl_image_get_stdev_window (kappamatrix11_nomask,lowlimit,1,highlimit,1);
1239 kappamatrix11_stdev_filtered=cpl_image_get_stdev_window (kappamatrix11_filtered,lowlimit,1,highlimit,1);
1241 kappamatrix12_stdev=cpl_image_get_stdev_window (kappamatrix12,lowlimit,1,highlimit,1);
1242 kappamatrix12_stdev_nomask=cpl_image_get_stdev_window (kappamatrix12_nomask,lowlimit,1,highlimit,1);
1243 kappamatrix12_stdev_filtered=cpl_image_get_stdev_window (kappamatrix12_filtered,lowlimit,1,highlimit,1);
1245 kappamatrix21_stdev=cpl_image_get_stdev_window (kappamatrix21,lowlimit,1,highlimit,1);
1246 kappamatrix21_stdev_nomask=cpl_image_get_stdev_window (kappamatrix21_nomask,lowlimit,1,highlimit,1);
1247 kappamatrix21_stdev_filtered=cpl_image_get_stdev_window (kappamatrix21_filtered,lowlimit,1,highlimit,1);
1249 kappamatrix22_stdev=cpl_image_get_stdev_window (kappamatrix22,lowlimit,1,highlimit,1);
1250 kappamatrix22_stdev_nomask=cpl_image_get_stdev_window (kappamatrix22_nomask,lowlimit,1,highlimit,1);
1251 kappamatrix22_stdev_filtered=cpl_image_get_stdev_window (kappamatrix22_filtered,lowlimit,1,highlimit,1);
1254 kappamatrix11_median=cpl_image_get_median_window (kappamatrix11,lowlimit,1,highlimit,1);
1255 kappamatrix11_median_nomask=cpl_image_get_median_window (kappamatrix11_nomask,lowlimit,1,highlimit,1);
1256 kappamatrix11_median_filtered=cpl_image_get_median_window (kappamatrix11_filtered,lowlimit,1,highlimit,1);
1258 kappamatrix12_median=cpl_image_get_median_window (kappamatrix12,lowlimit,1,highlimit,1);
1259 kappamatrix12_median_nomask=cpl_image_get_median_window (kappamatrix12_nomask,lowlimit,1,highlimit,1);
1260 kappamatrix12_median_filtered=cpl_image_get_median_window (kappamatrix12_filtered,lowlimit,1,highlimit,1);
1262 kappamatrix21_median=cpl_image_get_median_window (kappamatrix21,lowlimit,1,highlimit,1);
1263 kappamatrix21_median_nomask=cpl_image_get_median_window (kappamatrix21_nomask,lowlimit,1,highlimit,1);
1264 kappamatrix21_median_filtered=cpl_image_get_median_window (kappamatrix21_filtered,lowlimit,1,highlimit,1);
1266 kappamatrix22_median=cpl_image_get_median_window (kappamatrix22,lowlimit,1,highlimit,1);
1267 kappamatrix22_median_nomask=cpl_image_get_median_window (kappamatrix22_nomask,lowlimit,1,highlimit,1);
1268 kappamatrix22_median_filtered=cpl_image_get_median_window (kappamatrix22_filtered,lowlimit,1,highlimit,1);
1274 cpl_msg_info(cpl_func,
"Saving the KAPPA matrix(es) ...");
1278 qclist11 = cpl_propertylist_new();
1279 qclist12 = cpl_propertylist_new();
1280 qclist21 = cpl_propertylist_new();
1281 qclist22 = cpl_propertylist_new();
1283 qclist11_nomask = cpl_propertylist_new();
1284 qclist12_nomask = cpl_propertylist_new();
1285 qclist21_nomask = cpl_propertylist_new();
1286 qclist22_nomask = cpl_propertylist_new();
1288 qclist11_filtered = cpl_propertylist_new();
1289 qclist12_filtered = cpl_propertylist_new();
1290 qclist21_filtered = cpl_propertylist_new();
1291 qclist22_filtered = cpl_propertylist_new();
1294 cpl_propertylist_append_double(qclist11,
"ESO QC KAPPA MEDIAN 11", kappamatrix11_median);
1295 cpl_propertylist_append_double(qclist12,
"ESO QC KAPPA MEDIAN 12", kappamatrix12_median);
1296 cpl_propertylist_append_double(qclist21,
"ESO QC KAPPA MEDIAN 21", kappamatrix21_median);
1297 cpl_propertylist_append_double(qclist22,
"ESO QC KAPPA MEDIAN 22", kappamatrix22_median);
1299 cpl_propertylist_append_double(qclist11_nomask,
"ESO QC KAPPA NOMASK MEDIAN 11", kappamatrix11_median_nomask);
1300 cpl_propertylist_append_double(qclist12_nomask,
"ESO QC KAPPA NOMASK MEDIAN 12", kappamatrix12_median_nomask);
1301 cpl_propertylist_append_double(qclist21_nomask,
"ESO QC KAPPA NOMASK MEDIAN 21", kappamatrix21_median_nomask);
1302 cpl_propertylist_append_double(qclist22_nomask,
"ESO QC KAPPA NOMASK MEDIAN 22", kappamatrix22_median_nomask);
1304 cpl_propertylist_append_double(qclist11_filtered,
"ESO QC KAPPA FILTERED MEDIAN 11", kappamatrix11_median_filtered);
1305 cpl_propertylist_append_double(qclist12_filtered,
"ESO QC KAPPA FILTERED MEDIAN 12", kappamatrix12_median_filtered);
1306 cpl_propertylist_append_double(qclist21_filtered,
"ESO QC KAPPA FILTERED MEDIAN 21", kappamatrix21_median_filtered);
1307 cpl_propertylist_append_double(qclist22_filtered,
"ESO QC KAPPA FILTERED MEDIAN 22", kappamatrix22_median_filtered);
1310 cpl_propertylist_append_double(qclist11,
"ESO QC KAPPA STDEV 11", kappamatrix11_stdev);
1311 cpl_propertylist_append_double(qclist12,
"ESO QC KAPPA STDEV 12", kappamatrix12_stdev);
1312 cpl_propertylist_append_double(qclist21,
"ESO QC KAPPA STDEV 21", kappamatrix21_stdev);
1313 cpl_propertylist_append_double(qclist22,
"ESO QC KAPPA STDEV 22", kappamatrix22_stdev);
1315 cpl_propertylist_append_double(qclist11_nomask,
"ESO QC KAPPA NOMASK STDEV 11", kappamatrix11_stdev_nomask);
1316 cpl_propertylist_append_double(qclist12_nomask,
"ESO QC KAPPA NOMASK STDEV 12", kappamatrix12_stdev_nomask);
1317 cpl_propertylist_append_double(qclist21_nomask,
"ESO QC KAPPA NOMASK STDEV 21", kappamatrix21_stdev_nomask);
1318 cpl_propertylist_append_double(qclist22_nomask,
"ESO QC KAPPA NOMASK STDEV 22", kappamatrix22_stdev_nomask);
1320 cpl_propertylist_append_double(qclist11_filtered,
"ESO QC KAPPA FILTERED STDEV 11", kappamatrix11_stdev_filtered);
1321 cpl_propertylist_append_double(qclist12_filtered,
"ESO QC KAPPA FILTERED STDEV 12", kappamatrix12_stdev_filtered);
1322 cpl_propertylist_append_double(qclist21_filtered,
"ESO QC KAPPA FILTERED STDEV 21", kappamatrix21_stdev_filtered);
1323 cpl_propertylist_append_double(qclist22_filtered,
"ESO QC KAPPA FILTERED STDEV 22", kappamatrix22_stdev_filtered);
1327 cpl_propertylist_update_string(qclist11, CPL_DFS_PRO_CATG,
"MIDI_KAPPAMATRIX11");
1328 cpl_propertylist_update_string(qclist12, CPL_DFS_PRO_CATG,
"MIDI_KAPPAMATRIX12");
1329 cpl_propertylist_update_string(qclist21, CPL_DFS_PRO_CATG,
"MIDI_KAPPAMATRIX21");
1330 cpl_propertylist_update_string(qclist22, CPL_DFS_PRO_CATG,
"MIDI_KAPPAMATRIX22");
1332 cpl_propertylist_update_string(qclist11_nomask, CPL_DFS_PRO_CATG,
"MIDI_KAPPAMATRIX11_NOMASK");
1333 cpl_propertylist_update_string(qclist12_nomask, CPL_DFS_PRO_CATG,
"MIDI_KAPPAMATRIX12_NOMASK");
1334 cpl_propertylist_update_string(qclist21_nomask, CPL_DFS_PRO_CATG,
"MIDI_KAPPAMATRIX21_NOMASK");
1335 cpl_propertylist_update_string(qclist22_nomask, CPL_DFS_PRO_CATG,
"MIDI_KAPPAMATRIX22_NOMASK");
1337 cpl_propertylist_update_string(qclist11_filtered, CPL_DFS_PRO_CATG,
"MIDI_KAPPAMATRIX11_FILTERED");
1338 cpl_propertylist_update_string(qclist12_filtered, CPL_DFS_PRO_CATG,
"MIDI_KAPPAMATRIX12_FILTERED");
1339 cpl_propertylist_update_string(qclist21_filtered, CPL_DFS_PRO_CATG,
"MIDI_KAPPAMATRIX21_FILTERED");
1340 cpl_propertylist_update_string(qclist22_filtered, CPL_DFS_PRO_CATG,
"MIDI_KAPPAMATRIX22_FILTERED");
1348 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix11,
1349 CPL_BPP_IEEE_FLOAT,
"midi_kappamatrix",
1351 PACKAGE
"/" PACKAGE_VERSION,
1352 "midi_kappamatrix11.fits")) {
1354 (void)cpl_error_set_where(cpl_func);
1356 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix12,
1357 CPL_BPP_IEEE_FLOAT,
"midi_kappamatrix",
1359 PACKAGE
"/" PACKAGE_VERSION,
1360 "midi_kappamatrix12.fits")) {
1362 (void)cpl_error_set_where(cpl_func);
1364 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix21,
1365 CPL_BPP_IEEE_FLOAT,
"midi_kappamatrix",
1367 PACKAGE
"/" PACKAGE_VERSION,
1368 "midi_kappamatrix21.fits")) {
1370 (void)cpl_error_set_where(cpl_func);
1372 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix22,
1373 CPL_BPP_IEEE_FLOAT,
"midi_kappamatrix",
1375 PACKAGE
"/" PACKAGE_VERSION,
1376 "midi_kappamatrix22.fits")) {
1378 (void)cpl_error_set_where(cpl_func);
1382 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix11_nomask,
1383 CPL_BPP_IEEE_FLOAT,
"midi_kappamatrix",
1384 qclist11_nomask, NULL,
1385 PACKAGE
"/" PACKAGE_VERSION,
1386 "midi_kappamatrix11_nomask.fits")) {
1388 (void)cpl_error_set_where(cpl_func);
1390 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix12_nomask,
1391 CPL_BPP_IEEE_FLOAT,
"midi_kappamatrix",
1392 qclist12_nomask, NULL,
1393 PACKAGE
"/" PACKAGE_VERSION,
1394 "midi_kappamatrix12_nomask.fits")) {
1396 (void)cpl_error_set_where(cpl_func);
1398 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix21_nomask,
1399 CPL_BPP_IEEE_FLOAT,
"midi_kappamatrix",
1400 qclist21_nomask, NULL,
1401 PACKAGE
"/" PACKAGE_VERSION,
1402 "midi_kappamatrix21_nomask.fits")) {
1404 (void)cpl_error_set_where(cpl_func);
1406 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix22_nomask,
1407 CPL_BPP_IEEE_FLOAT,
"midi_kappamatrix",
1408 qclist22_nomask, NULL,
1409 PACKAGE
"/" PACKAGE_VERSION,
1410 "midi_kappamatrix22_nomask.fits")) {
1412 (void)cpl_error_set_where(cpl_func);
1416 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix11_filtered,
1417 CPL_BPP_IEEE_FLOAT,
"midi_kappamatrix",
1418 qclist11_filtered, NULL,
1419 PACKAGE
"/" PACKAGE_VERSION,
1420 "midi_kappamatrix11_filtered.fits")) {
1422 (void)cpl_error_set_where(cpl_func);
1424 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix12_filtered,
1425 CPL_BPP_IEEE_FLOAT,
"midi_kappamatrix",
1426 qclist12_filtered, NULL,
1427 PACKAGE
"/" PACKAGE_VERSION,
1428 "midi_kappamatrix12_filtered.fits")) {
1430 (void)cpl_error_set_where(cpl_func);
1432 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix21_filtered,
1433 CPL_BPP_IEEE_FLOAT,
"midi_kappamatrix",
1434 qclist21_filtered, NULL,
1435 PACKAGE
"/" PACKAGE_VERSION,
1436 "midi_kappamatrix21_filtered.fits")) {
1438 (void)cpl_error_set_where(cpl_func);
1440 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix22_filtered,
1441 CPL_BPP_IEEE_FLOAT,
"midi_kappamatrix",
1442 qclist22_filtered, NULL,
1443 PACKAGE
"/" PACKAGE_VERSION,
1444 "midi_kappamatrix22_filtered.fits")) {
1446 (void)cpl_error_set_where(cpl_func);
1452 kappamatrix_table=cpl_table_new(cpl_image_get_size_x(kappamatrix11));
1453 cpl_table_new_column(kappamatrix_table,
"kappam11", CPL_TYPE_FLOAT);
1454 cpl_table_new_column(kappamatrix_table,
"kappam11_error", CPL_TYPE_FLOAT);
1455 cpl_table_new_column(kappamatrix_table,
"kappam12", CPL_TYPE_FLOAT);
1456 cpl_table_new_column(kappamatrix_table,
"kappam12_error", CPL_TYPE_FLOAT);
1457 cpl_table_new_column(kappamatrix_table,
"kappam21", CPL_TYPE_FLOAT);
1458 cpl_table_new_column(kappamatrix_table,
"kappam21_error", CPL_TYPE_FLOAT);
1459 cpl_table_new_column(kappamatrix_table,
"kappam22", CPL_TYPE_FLOAT);
1460 cpl_table_new_column(kappamatrix_table,
"kappam22_error", CPL_TYPE_FLOAT);
1462 cpl_table_copy_data_float(kappamatrix_table,
"kappam11", cpl_image_get_data_float((kappamatrix11)));
1463 cpl_table_copy_data_float(kappamatrix_table,
"kappam12", cpl_image_get_data_float((kappamatrix12)));
1464 cpl_table_copy_data_float(kappamatrix_table,
"kappam21", cpl_image_get_data_float((kappamatrix21)));
1465 cpl_table_copy_data_float(kappamatrix_table,
"kappam22", cpl_image_get_data_float((kappamatrix22)));
1467 cpl_table_fill_column_window_float (kappamatrix_table,
"kappam11_error", 0, cpl_image_get_size_x(kappamatrix11), 0.05);
1468 cpl_table_fill_column_window_float (kappamatrix_table,
"kappam12_error", 0, cpl_image_get_size_x(kappamatrix12), 0.05);
1469 cpl_table_fill_column_window_float (kappamatrix_table,
"kappam21_error", 0, cpl_image_get_size_x(kappamatrix21), 0.05);
1470 cpl_table_fill_column_window_float (kappamatrix_table,
"kappam22_error", 0, cpl_image_get_size_x(kappamatrix22), 0.05);
1472 qclist_all = cpl_propertylist_new();
1473 cpl_propertylist_append(qclist_all,qclist11);
1474 cpl_propertylist_append(qclist_all,qclist12);
1475 cpl_propertylist_append(qclist_all,qclist21);
1476 cpl_propertylist_append(qclist_all,qclist22);
1477 cpl_propertylist_erase_regexp(qclist_all, CPL_DFS_PRO_CATG,0);
1481 qclist_all_extension = cpl_propertylist_new();
1482 cpl_propertylist_append_string (qclist_all_extension,
"EXTNAME",
"MIDI_KAPPAMATRIX");
1485 if (strcmp(gris_name,
"GRISM")==0)
1488 cpl_propertylist_update_string(qclist_all, CPL_DFS_PRO_CATG,
"MIDI_KAPPAMATRIX_GRISM");
1490 cpl_dfs_save_table(frameset, NULL, parlist, frameset, NULL, kappamatrix_table,
1491 qclist_all_extension,
"midi_kappamatrix",
1493 PACKAGE
"/" PACKAGE_VERSION,
1494 "midi_kappamatrix_grism.fits");
1495 cpl_table_delete(kappamatrix_table);
1498 if (strcmp(gris_name,
"PRISM")==0)
1500 cpl_propertylist_update_string(qclist_all, CPL_DFS_PRO_CATG,
"MIDI_KAPPAMATRIX_PRISM");
1501 cpl_dfs_save_table(frameset, NULL, parlist, frameset, NULL, kappamatrix_table,
1502 qclist_all_extension,
"midi_kappamatrix",
1504 PACKAGE
"/" PACKAGE_VERSION,
1505 "midi_kappamatrix_prism.fits");
1506 cpl_table_delete(kappamatrix_table);
1513 if (strcmp(gris_name,
"GRISM")==0)
1515 cubename = cpl_sprintf(
"%s_%s%s",
"transferRatios",
"GRISM",
".dat");
1516 kappa_to_ascii( kappamatrix11, kappamatrix12, kappamatrix21, kappamatrix22, cubename);
1519 cubename = cpl_sprintf(
"%s_%s%s",
"transferRatios",
"GRISM",
"_nomask.dat");
1520 kappa_to_ascii( kappamatrix11_nomask, kappamatrix12_nomask, kappamatrix21_nomask, kappamatrix22_nomask, cubename);
1523 cubename = cpl_sprintf(
"%s_%s%s",
"transferRatios",
"GRISM",
"_filtered.dat");
1524 kappa_to_ascii( kappamatrix11_filtered, kappamatrix12_filtered, kappamatrix21_filtered, kappamatrix22_filtered, cubename);
1530 if (strcmp(gris_name,
"PRISM")==0)
1532 cubename = cpl_sprintf(
"%s_%s%s",
"transferRatios",
"PRISM",
".dat");
1533 kappa_to_ascii( kappamatrix11, kappamatrix12, kappamatrix21, kappamatrix22, cubename);
1536 cubename = cpl_sprintf(
"%s_%s%s",
"transferRatios",
"PRISM",
"_nomask.dat");
1537 kappa_to_ascii( kappamatrix11_nomask, kappamatrix12_nomask, kappamatrix21_nomask, kappamatrix22_nomask, cubename);
1540 cubename = cpl_sprintf(
"%s_%s%s",
"transferRatios",
"PRISM",
"_filtered.dat");
1541 kappa_to_ascii( kappamatrix11_filtered, kappamatrix12_filtered, kappamatrix21_filtered, kappamatrix22_filtered, cubename);
1550 cpl_image_delete(kappamatrix11);
1551 cpl_image_delete(kappamatrix12);
1552 cpl_image_delete(kappamatrix21);
1553 cpl_image_delete(kappamatrix22);
1555 cpl_image_delete(kappamatrix11_nomask);
1556 cpl_image_delete(kappamatrix12_nomask);
1557 cpl_image_delete(kappamatrix21_nomask);
1558 cpl_image_delete(kappamatrix22_nomask);
1560 cpl_image_delete(kappamatrix11_filtered);
1561 cpl_image_delete(kappamatrix12_filtered);
1562 cpl_image_delete(kappamatrix21_filtered);
1563 cpl_image_delete(kappamatrix22_filtered);
1568 while(cpl_imagelist_get_size(imglst_mask_prism)>0){
1569 cpl_image_delete(cpl_imagelist_unset(imglst_mask_prism,0));
1572 while(cpl_imagelist_get_size(imglst_mask_grism)>0){
1573 cpl_image_delete(cpl_imagelist_unset(imglst_mask_grism,0));
1577 cpl_imagelist_delete(imglst_mask_prism);
1578 cpl_imagelist_delete(imglst_mask_grism);
1584 cpl_propertylist_delete(qclist11);
1585 cpl_propertylist_delete(qclist12);
1586 cpl_propertylist_delete(qclist21);
1587 cpl_propertylist_delete(qclist22);
1588 cpl_propertylist_delete(qclist11_nomask);
1589 cpl_propertylist_delete(qclist12_nomask);
1590 cpl_propertylist_delete(qclist21_nomask);
1591 cpl_propertylist_delete(qclist22_nomask);
1592 cpl_propertylist_delete(qclist11_filtered);
1593 cpl_propertylist_delete(qclist12_filtered);
1594 cpl_propertylist_delete(qclist21_filtered);
1595 cpl_propertylist_delete(qclist22_filtered);
1596 cpl_propertylist_delete(qclist_all);
1597 cpl_propertylist_delete(qclist_all_extension);
1600 return (
int)cpl_error_get_code();
1605 static int table_to_imglst_sky_target(
const char * columname,
1606 const char * columntype,
1607 cpl_imagelist * imglst_sky,
1608 cpl_imagelist * imglst_target,
1613 int i,csky=0, ctarget=0,csky_tmp=0, ctarget_tmp=0,first_unknown=0;
1614 cpl_array * array_data=NULL;
1615 cpl_image * image_data_int=NULL;
1616 cpl_errorstate prestate = cpl_errorstate_get();
1617 char ** target_type;
1620 int flag_istarget=0;
1622 cpl_imagelist * imglst_sky_tmp=NULL;
1623 cpl_imagelist * imglst_target_tmp=NULL;
1625 imglst_sky_tmp=cpl_imagelist_new();
1626 imglst_target_tmp=cpl_imagelist_new();
1630 dimenDATA=cpl_table_get_column_dimensions(table, columname);
1631 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
1632 if (dimenDATA != 2) {
1633 return (
int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
1634 "DATA has a wrong dimension");
1640 if (cpl_table_has_column(table, columntype))
1642 target_type=cpl_table_get_data_string(table, columntype);
1647 return (
int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
1648 "TYPE of the Column not found");
1654 ctype=cpl_table_get_column_type(table, columname);
1659 csky=cpl_imagelist_get_size(imglst_sky);
1661 ctarget=cpl_imagelist_get_size(imglst_target);
1672 for (i=0; i<cpl_table_get_nrow(table);i++){
1673 if(strcmp(target_type[i],
"U")== 0){
1681 for (i=first_unknown; i<cpl_table_get_nrow(table);i++){
1683 array_data=(cpl_array *)cpl_table_get_array(table,columname, i);
1684 if(ctype&CPL_TYPE_INT){
1685 image_data_int=cpl_image_wrap_int(cpl_table_get_column_dimension(table,columname,0 ), cpl_table_get_column_dimension(table,columname,1 ), cpl_array_get_data_int(array_data) );
1687 if(ctype&CPL_TYPE_FLOAT){
1688 image_data_int=cpl_image_wrap_float(cpl_table_get_column_dimension(table,columname,0 ), cpl_table_get_column_dimension(table,columname,1 ), cpl_array_get_data_float(array_data) );
1695 if(strcmp(target_type[i],
"S")== 0){
1696 cpl_imagelist_set(imglst_sky_tmp,cpl_image_cast(image_data_int, CPL_TYPE_FLOAT),csky_tmp++);
1698 cpl_image_unwrap(image_data_int);
1701 if(strcmp(target_type[i],
"T")== 0){
1702 cpl_imagelist_set(imglst_target_tmp,cpl_image_cast(image_data_int, CPL_TYPE_FLOAT),ctarget_tmp++);
1704 cpl_image_unwrap(image_data_int);
1709 if(image_data_int!=NULL){
1710 cpl_image_unwrap(image_data_int);
1712 if(flag_issky >0 && flag_istarget >0){
1714 cpl_imagelist_set(imglst_sky,cpl_imagelist_collapse_create(imglst_sky_tmp),csky++);
1715 cpl_imagelist_set(imglst_target,cpl_imagelist_collapse_create(imglst_target_tmp),ctarget++);
1722 while(cpl_imagelist_get_size(imglst_sky_tmp)>0){
1723 cpl_image_delete(cpl_imagelist_unset(imglst_sky_tmp,0));
1725 while(cpl_imagelist_get_size(imglst_target_tmp)>0){
1726 cpl_image_delete(cpl_imagelist_unset(imglst_target_tmp,0));
1735 while(cpl_imagelist_get_size(imglst_sky_tmp)>0){
1736 cpl_image_delete(cpl_imagelist_unset(imglst_sky_tmp,0));
1738 while(cpl_imagelist_get_size(imglst_target_tmp)>0){
1739 cpl_image_delete(cpl_imagelist_unset(imglst_target_tmp,0));
1742 cpl_imagelist_delete(imglst_sky_tmp);
1743 cpl_imagelist_delete(imglst_target_tmp);
1747 return (
int)cpl_error_get_code();
1756 static int table_to_imglst_mask(
const char * columname,
1757 cpl_imagelist * imglst,
1763 cpl_array * array_data=NULL;
1764 cpl_image * image_data_int=NULL;
1765 cpl_errorstate prestate = cpl_errorstate_get();
1770 dimenDATA=cpl_table_get_column_dimensions(table, columname);
1771 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
1772 if (dimenDATA != 2) {
1773 return (
int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
1774 "DATA has a wrong dimension");
1784 ctype=cpl_table_get_column_type(table, columname);
1789 counter=cpl_imagelist_get_size(imglst);
1792 for (i=0; i<cpl_table_get_nrow(table);i++){
1794 array_data=(cpl_array *)cpl_table_get_array(table,columname, i);
1795 if(ctype&CPL_TYPE_INT){
1796 image_data_int=cpl_image_wrap_int(cpl_table_get_column_dimension(table,columname,0 ), cpl_table_get_column_dimension(table,columname,1 ), cpl_array_get_data_int(array_data) );
1798 if(ctype&CPL_TYPE_FLOAT){
1799 image_data_int=cpl_image_wrap_float(cpl_table_get_column_dimension(table,columname,0 ), cpl_table_get_column_dimension(table,columname,1 ), cpl_array_get_data_float(array_data) );
1806 cpl_imagelist_set(imglst,cpl_image_cast(image_data_int, CPL_TYPE_FLOAT),counter++);
1809 if(image_data_int!=NULL){
1810 cpl_image_unwrap(image_data_int);
1818 return (
int)cpl_error_get_code();
1827 static void kappa_to_ascii(
const cpl_image * kappa11,
1828 const cpl_image * kappa12,
1829 const cpl_image * kappa21,
1830 const cpl_image * kappa22,
1831 const char * filename)
1836 if ( filename == NULL)
1838 cpl_msg_error(cpl_func,
"please give the filename!") ;
1842 if ( NULL == (fp = fopen ( filename,
"w" ) ) )
1844 cpl_msg_error(cpl_func,
"cannot open %s", filename) ;
1849 fprintf (fp,
"%d \n",cpl_image_get_size_x(kappa11));
1851 for ( i = 1 ; i <= cpl_image_get_size_x(kappa11) ; i++ )
1853 fprintf (fp,
"%f 0.05 %f 0.05 %f 0.05 %f 0.05 \n",
1854 cpl_image_get(kappa11, i, 1,&pis_rejected),
1855 cpl_image_get(kappa12, i, 1,&pis_rejected),
1856 cpl_image_get(kappa21, i, 1,&pis_rejected),
1857 cpl_image_get(kappa22, i, 1,&pis_rejected)) ;