00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifdef HAVE_CONFIG_H
00029 #include <config.h>
00030 #endif
00031
00032
00033
00034
00035
00036 #include <cpl.h>
00037
00038 #include "midi_utils.h"
00039 #include "midi_pfits.h"
00040 #include "midi_dfs.h"
00041 #include "string.h"
00042 #include "midiTableToFits.h"
00043
00044
00045
00046
00047 static int midi_kappamatrix_create(cpl_plugin *);
00048 static int midi_kappamatrix_exec(cpl_plugin *);
00049 static int midi_kappamatrix_destroy(cpl_plugin *);
00050 static int midi_kappamatrix(cpl_frameset *, const cpl_parameterlist *);
00051 static int table_to_imglst_sky_target(const char * ,
00052 const char * ,
00053 cpl_imagelist * ,
00054 cpl_imagelist * ,
00055 cpl_table *);
00056 static int table_to_imglst_mask(const char *,
00057 cpl_imagelist *,
00058 cpl_table *);
00059 static void kappa_to_ascii(const cpl_image * ,
00060 const cpl_image * ,
00061 const cpl_image * ,
00062 const cpl_image * ,
00063 const char * );
00064
00065
00066
00067
00068
00069
00070
00071
00072 static char midi_kappamatrix_description[] =
00073 "This recipe derives the Kappa Matrix in the SCI_PHOT mode following\n"
00074 "the definition in A&A 425 1161. It uses a set of AOPEN and BOPEN\n"
00075 "photometry files as well as a spatial profile of the spectrum. The\n"
00076 "spectrum is extracted using the Optimal Extraction algorithm\n"
00077 "(Horne 1986, PASP 98 209) adapted to NIR data, i.e. background dominated\n"
00078 "images. The errors of the kappa matrix are not calculated but set a\n"
00079 "priori to 5 per cent. "
00080 "The main output is a fits table with the PRO\n"
00081 "CATG keyword set to MIDI_KAPPAMATRIX_(G|P)RISM. For diagnostic reasons the\n"
00082 "different kappa matrixes are also saved as single fits images\n\n"
00083
00084
00085 "Input files:\n\n"
00086 " DO category: Type: Explanation: Required:\n"
00087 " PHOTOM_SP_CALIB Raw Raw data frame \n"
00088 " or Y\n"
00089 " PHOTOM_SP_SCIENCE Raw Raw data frame \n\n"
00090 " KAPPA_SP_MASK_PRISM Calib Spectral profile \n"
00091 " or Y\n"
00092 " KAPPA_SP_MASK_GRISM Calib Spectral profile \n\n"
00093 "Output files:\n\n"
00094 " DO category: Data type: Explanation:\n"
00095 " MIDI_KAPPAMATRIX_PRISM FITS table Kappa matrix: Main product \n"
00096 " or \n"
00097 " MIDI_KAPPAMATRIX_GRISM FITS table Kappa matrix: Main product \n\n"
00098 " MIDI_KAPPAMATRIX11 FITS image Kappa matrix: For diagnostics\n"
00099 " MIDI_KAPPAMATRIX11_FILTERED FITS image Kappa matrix: For diagnostics\n"
00100 " MIDI_KAPPAMATRIX11_NOMASK FITS image Kappa matrix: For diagnostics\n"
00101 " MIDI_KAPPAMATRIX12 FITS image Kappa matrix: For diagnostics\n"
00102 " MIDI_KAPPAMATRIX12_FILTERED FITS image Kappa matrix: For diagnostics\n"
00103 " MIDI_KAPPAMATRIX12_NOMASK FITS image Kappa matrix: For diagnostics\n"
00104 " MIDI_KAPPAMATRIX21 FITS image Kappa matrix: For diagnostics\n"
00105 " MIDI_KAPPAMATRIX21_FILTERED FITS image Kappa matrix: For diagnostics\n"
00106 " MIDI_KAPPAMATRIX21_NOMASK FITS image Kappa matrix: For diagnostics\n"
00107 " MIDI_KAPPAMATRIX22 FITS image Kappa matrix: For diagnostics\n"
00108 " MIDI_KAPPAMATRIX22_FILTERED FITS image Kappa matrix: For diagnostics\n"
00109 " MIDI_KAPPAMATRIX22_NOMASK FITS image Kappa matrix: For diagnostics\n\n";
00110
00111
00112
00113
00114
00115
00116
00117
00122
00123
00126
00136
00137 int cpl_plugin_get_info(cpl_pluginlist * list)
00138 {
00139 cpl_recipe * recipe = cpl_calloc(1, sizeof *recipe );
00140 cpl_plugin * plugin = &recipe->interface;
00141
00142 if (cpl_plugin_init(plugin,
00143 CPL_PLUGIN_API,
00144 MIDI_BINARY_VERSION,
00145 CPL_PLUGIN_TYPE_RECIPE,
00146 "midi_kappamatrix",
00147 "Derives the Kappamatrix for the SCI_PHOT mode",
00148 midi_kappamatrix_description,
00149 "Armin Gabasch",
00150 PACKAGE_BUGREPORT,
00151 midi_get_license(),
00152 midi_kappamatrix_create,
00153 midi_kappamatrix_exec,
00154 midi_kappamatrix_destroy)) {
00155 cpl_msg_error(cpl_func, "Plugin initialization failed");
00156 (void)cpl_error_set_where(cpl_func);
00157 return 1;
00158 }
00159
00160 if (cpl_pluginlist_append(list, plugin)) {
00161 cpl_msg_error(cpl_func, "Error adding plugin to list");
00162 (void)cpl_error_set_where(cpl_func);
00163 return 1;
00164 }
00165
00166 return 0;
00167 }
00168
00169
00177
00178 static int midi_kappamatrix_create(cpl_plugin * plugin)
00179 {
00180 cpl_recipe * recipe;
00181 cpl_parameter * p;
00182
00183
00184 if (cpl_error_get_code() != CPL_ERROR_NONE) {
00185 cpl_msg_error(cpl_func, "%s():%d: An error is already set: %s",
00186 cpl_func, __LINE__, cpl_error_get_where());
00187 return (int)cpl_error_get_code();
00188 }
00189
00190 if (plugin == NULL) {
00191 cpl_msg_error(cpl_func, "Null plugin");
00192 cpl_ensure_code(0, (int)CPL_ERROR_NULL_INPUT);
00193 }
00194
00195
00196 if (cpl_plugin_get_type(plugin) != CPL_PLUGIN_TYPE_RECIPE) {
00197 cpl_msg_error(cpl_func, "Plugin is not a recipe");
00198 cpl_ensure_code(0, (int)CPL_ERROR_TYPE_MISMATCH);
00199 }
00200
00201
00202 recipe = (cpl_recipe *)plugin;
00203
00204
00205 recipe->parameters = cpl_parameterlist_new();
00206 if (recipe->parameters == NULL) {
00207 cpl_msg_error(cpl_func, "Parameter list allocation failed");
00208 cpl_ensure_code(0, (int)CPL_ERROR_ILLEGAL_OUTPUT);
00209 }
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220 p = cpl_parameter_new_value("midi.midi_kappamatrix.medianwindow",
00221 CPL_TYPE_INT,
00222 "The window size of the median filter. No influence on the main product",
00223 "midi.midi_kappamatrix",9);
00224 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "medianwindow");
00225 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
00226 cpl_parameterlist_append(recipe->parameters, p);
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236 return 0;
00237 }
00238
00239
00245
00246 static int midi_kappamatrix_exec(cpl_plugin * plugin)
00247 {
00248
00249 cpl_recipe * recipe;
00250 int recipe_status;
00251 cpl_errorstate initial_errorstate = cpl_errorstate_get();
00252
00253
00254 if (cpl_error_get_code() != CPL_ERROR_NONE) {
00255 cpl_msg_error(cpl_func, "%s():%d: An error is already set: %s",
00256 cpl_func, __LINE__, cpl_error_get_where());
00257 return (int)cpl_error_get_code();
00258 }
00259
00260 if (plugin == NULL) {
00261 cpl_msg_error(cpl_func, "Null plugin");
00262 cpl_ensure_code(0, (int)CPL_ERROR_NULL_INPUT);
00263 }
00264
00265
00266 if (cpl_plugin_get_type(plugin) != CPL_PLUGIN_TYPE_RECIPE) {
00267 cpl_msg_error(cpl_func, "Plugin is not a recipe");
00268 cpl_ensure_code(0, (int)CPL_ERROR_TYPE_MISMATCH);
00269 }
00270
00271
00272 recipe = (cpl_recipe *)plugin;
00273
00274
00275 if (recipe->parameters == NULL) {
00276 cpl_msg_error(cpl_func, "Recipe invoked with NULL parameter list");
00277 cpl_ensure_code(0, (int)CPL_ERROR_NULL_INPUT);
00278 }
00279 if (recipe->frames == NULL) {
00280 cpl_msg_error(cpl_func, "Recipe invoked with NULL frame set");
00281 cpl_ensure_code(0, (int)CPL_ERROR_NULL_INPUT);
00282 }
00283
00284
00285 recipe_status = midi_kappamatrix(recipe->frames, recipe->parameters);
00286
00287
00288 if (cpl_dfs_update_product_header(recipe->frames)) {
00289 if (!recipe_status) recipe_status = (int)cpl_error_get_code();
00290 }
00291
00292 if (!cpl_errorstate_is_equal(initial_errorstate)) {
00293
00294
00295 cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
00296 }
00297
00298 return recipe_status;
00299 }
00300
00301
00307
00308 static int midi_kappamatrix_destroy(cpl_plugin * plugin)
00309 {
00310 cpl_recipe * recipe;
00311
00312 if (plugin == NULL) {
00313 cpl_msg_error(cpl_func, "Null plugin");
00314 cpl_ensure_code(0, (int)CPL_ERROR_NULL_INPUT);
00315 }
00316
00317
00318 if (cpl_plugin_get_type(plugin) != CPL_PLUGIN_TYPE_RECIPE) {
00319 cpl_msg_error(cpl_func, "Plugin is not a recipe");
00320 cpl_ensure_code(0, (int)CPL_ERROR_TYPE_MISMATCH);
00321 }
00322
00323
00324 recipe = (cpl_recipe *)plugin;
00325
00326 cpl_parameterlist_delete(recipe->parameters);
00327
00328 return 0;
00329 }
00330
00331
00338
00339 static int midi_kappamatrix(cpl_frameset * frameset,
00340 const cpl_parameterlist * parlist)
00341 {
00342 const cpl_parameter * param;
00343 cpl_frame * cur_frame;
00344 cpl_table * table=NULL;
00345 cpl_table * kappamatrix_table=NULL;
00346 cpl_propertylist * plist;
00347
00348 cpl_propertylist * qclist11;
00349 cpl_propertylist * qclist12;
00350 cpl_propertylist * qclist21;
00351 cpl_propertylist * qclist22;
00352 cpl_propertylist * qclist11_nomask;
00353 cpl_propertylist * qclist12_nomask;
00354 cpl_propertylist * qclist21_nomask;
00355 cpl_propertylist * qclist22_nomask;
00356 cpl_propertylist * qclist11_filtered;
00357 cpl_propertylist * qclist12_filtered;
00358 cpl_propertylist * qclist21_filtered;
00359 cpl_propertylist * qclist22_filtered;
00360 cpl_propertylist * qclist_all;
00361 cpl_propertylist * qclist_all_extension;
00362 cpl_mask * mask=NULL;
00363
00364 const char * shutter_id =NULL;
00365 cpl_errorstate prestate = cpl_errorstate_get();
00366 char * tag=NULL;
00367
00368 char * cubename;
00369
00370 char gris_name[100]= "";
00371 int ext_imaging_data;
00372 int isPHOTAdata=0;
00373 int isPHOTBdata=0;
00374 double * pmask_grism_DATA1=NULL;
00375 double * pmask_grism_DATA1_norm=NULL;
00376 double * pmask_grism_DATA2=NULL;
00377 double * pmask_grism_DATA2_norm=NULL;
00378 double * pmask_grism_DATA3=NULL;
00379 double * pmask_grism_DATA3_norm=NULL;
00380 double * pmask_grism_DATA4=NULL;
00381 double * pmask_grism_DATA4_norm=NULL;
00382
00383 double * pmask_prism_DATA1=NULL;
00384 double * pmask_prism_DATA1_norm=NULL;
00385 double * pmask_prism_DATA2=NULL;
00386 double * pmask_prism_DATA2_norm=NULL;
00387 double * pmask_prism_DATA3=NULL;
00388 double * pmask_prism_DATA3_norm=NULL;
00389 double * pmask_prism_DATA4=NULL;
00390 double * pmask_prism_DATA4_norm=NULL;
00391
00392 double kappamatrix11_stdev=0.;
00393 double kappamatrix11_stdev_nomask=0.;
00394 double kappamatrix11_stdev_filtered=0.;
00395 double kappamatrix12_stdev=0.;
00396 double kappamatrix12_stdev_nomask=0.;
00397 double kappamatrix12_stdev_filtered=0.;
00398 double kappamatrix21_stdev=0.;
00399 double kappamatrix21_stdev_nomask=0.;
00400 double kappamatrix21_stdev_filtered=0.;
00401 double kappamatrix22_stdev=0.;
00402 double kappamatrix22_stdev_nomask=0.;
00403 double kappamatrix22_stdev_filtered=0.;
00404
00405 double kappamatrix11_median=0.;
00406 double kappamatrix11_median_nomask=0.;
00407 double kappamatrix11_median_filtered=0.;
00408 double kappamatrix12_median=0.;
00409 double kappamatrix12_median_nomask=0.;
00410 double kappamatrix12_median_filtered=0.;
00411 double kappamatrix21_median=0.;
00412 double kappamatrix21_median_nomask=0.;
00413 double kappamatrix21_median_filtered=0.;
00414 double kappamatrix22_median=0.;
00415 double kappamatrix22_median_nomask=0.;
00416 double kappamatrix22_median_filtered=0.;
00417
00418
00419 int nx_DATA1=0,nx_DATA2=0,nx_DATA3=0,nx_DATA4=0;
00420 int ny_DATA1=0,ny_DATA2=0,ny_DATA3=0,ny_DATA4=0;
00421
00422
00423 int xpos=0, ypos=0;
00424
00425
00426 cpl_image * image_AOPEN_DATA2_T = NULL;
00427 cpl_image * image_AOPEN_DATA3_T = NULL;
00428 cpl_image * image_AOPEN_DATA4_T = NULL;
00429
00430 cpl_image * image_BOPEN_DATA1_T = NULL;
00431 cpl_image * image_BOPEN_DATA2_T = NULL;
00432 cpl_image * image_BOPEN_DATA3_T = NULL;
00433
00434 cpl_image * image_AOPEN_DATA2_T_collapsed = NULL;
00435 cpl_image * image_AOPEN_DATA3_T_collapsed = NULL;
00436 cpl_image * image_AOPEN_DATA4_T_collapsed = NULL;
00437 cpl_image * image_BOPEN_DATA1_T_collapsed = NULL;
00438 cpl_image * image_BOPEN_DATA2_T_collapsed = NULL;
00439 cpl_image * image_BOPEN_DATA3_T_collapsed = NULL;
00440
00441 cpl_image * image_AOPEN_DATA2_T_collapsed_nomask = NULL;
00442 cpl_image * image_AOPEN_DATA3_T_collapsed_nomask = NULL;
00443 cpl_image * image_AOPEN_DATA4_T_collapsed_nomask = NULL;
00444 cpl_image * image_BOPEN_DATA1_T_collapsed_nomask = NULL;
00445 cpl_image * image_BOPEN_DATA2_T_collapsed_nomask = NULL;
00446 cpl_image * image_BOPEN_DATA3_T_collapsed_nomask = NULL;
00447
00448
00449 cpl_image * mask_grism_DATA1_collapsed = NULL;
00450 cpl_image * mask_grism_DATA2_collapsed = NULL;
00451 cpl_image * mask_grism_DATA3_collapsed = NULL;
00452 cpl_image * mask_grism_DATA4_collapsed = NULL;
00453
00454 cpl_image * mask_prism_DATA1_collapsed = NULL;
00455 cpl_image * mask_prism_DATA2_collapsed = NULL;
00456 cpl_image * mask_prism_DATA3_collapsed = NULL;
00457 cpl_image * mask_prism_DATA4_collapsed = NULL;
00458
00459
00460
00461 cpl_image * kappamatrix11 = NULL;
00462 cpl_image * kappamatrix12 = NULL;
00463 cpl_image * kappamatrix21 = NULL;
00464 cpl_image * kappamatrix22 = NULL;
00465 cpl_image * kappamatrix11_nomask = NULL;
00466 cpl_image * kappamatrix12_nomask = NULL;
00467 cpl_image * kappamatrix21_nomask = NULL;
00468 cpl_image * kappamatrix22_nomask = NULL;
00469 cpl_image * kappamatrix11_filtered = NULL;
00470 cpl_image * kappamatrix12_filtered = NULL;
00471 cpl_image * kappamatrix21_filtered = NULL;
00472 cpl_image * kappamatrix22_filtered = NULL;
00473
00474 cpl_image * mask_grism_DATA1 = NULL;
00475 cpl_image * mask_grism_DATA2 = NULL;
00476 cpl_image * mask_grism_DATA3 = NULL;
00477 cpl_image * mask_grism_DATA4 = NULL;
00478
00479 cpl_image * mask_grism_DATA1_norm = NULL;
00480 cpl_image * mask_grism_DATA2_norm = NULL;
00481 cpl_image * mask_grism_DATA3_norm = NULL;
00482 cpl_image * mask_grism_DATA4_norm = NULL;
00483
00484 cpl_image * mask_prism_DATA1 = NULL;
00485 cpl_image * mask_prism_DATA2 = NULL;
00486 cpl_image * mask_prism_DATA3 = NULL;
00487 cpl_image * mask_prism_DATA4 = NULL;
00488
00489
00490 cpl_image * mask_prism_DATA1_norm = NULL;
00491 cpl_image * mask_prism_DATA2_norm = NULL;
00492 cpl_image * mask_prism_DATA3_norm = NULL;
00493 cpl_image * mask_prism_DATA4_norm = NULL;
00494
00495
00496
00497 cpl_imagelist * imglst_AOPEN_DATA2_S;
00498 cpl_imagelist * imglst_AOPEN_DATA2_T;
00499 cpl_imagelist * imglst_AOPEN_DATA3_S;
00500 cpl_imagelist * imglst_AOPEN_DATA3_T;
00501 cpl_imagelist * imglst_AOPEN_DATA4_S;
00502 cpl_imagelist * imglst_AOPEN_DATA4_T;
00503
00504 cpl_imagelist * imglst_BOPEN_DATA1_S;
00505 cpl_imagelist * imglst_BOPEN_DATA1_T;
00506 cpl_imagelist * imglst_BOPEN_DATA2_S;
00507 cpl_imagelist * imglst_BOPEN_DATA2_T;
00508 cpl_imagelist * imglst_BOPEN_DATA3_S;
00509 cpl_imagelist * imglst_BOPEN_DATA3_T;
00510
00511
00512
00513 cpl_imagelist * imglst_mask_prism;
00514 cpl_imagelist * imglst_mask_grism;
00515
00516 int medianwindow=0;
00517 int lowlimit=0;
00518 int highlimit=0;
00519
00520
00521
00522 imglst_AOPEN_DATA2_S=cpl_imagelist_new();
00523 imglst_AOPEN_DATA2_T=cpl_imagelist_new();
00524 imglst_AOPEN_DATA3_S=cpl_imagelist_new();
00525 imglst_AOPEN_DATA3_T=cpl_imagelist_new();
00526 imglst_AOPEN_DATA4_S=cpl_imagelist_new();
00527 imglst_AOPEN_DATA4_T=cpl_imagelist_new();
00528
00529 imglst_BOPEN_DATA1_S=cpl_imagelist_new();
00530 imglst_BOPEN_DATA1_T=cpl_imagelist_new();
00531 imglst_BOPEN_DATA2_S=cpl_imagelist_new();
00532 imglst_BOPEN_DATA2_T=cpl_imagelist_new();
00533 imglst_BOPEN_DATA3_S=cpl_imagelist_new();
00534 imglst_BOPEN_DATA3_T=cpl_imagelist_new();
00535
00536
00537
00538 imglst_mask_prism=cpl_imagelist_new();
00539 imglst_mask_grism=cpl_imagelist_new();
00540
00541
00542
00543
00544
00545
00546
00547 param = cpl_parameterlist_find_const(parlist,
00548 "midi.midi_kappamatrix.medianwindow");
00549 medianwindow = cpl_parameter_get_int(param);
00550
00551 if(medianwindow%2 == 0)
00552 {
00553 cpl_msg_warning(cpl_func, "The window size of the median filter is not odd,");
00554 cpl_msg_warning(cpl_func, "therefore the size is increased by unity");
00555 medianwindow=medianwindow+1;
00556 }
00557
00558 if(medianwindow > 81)
00559 {
00560 cpl_msg_warning(cpl_func, "The window size of the median filter exceeds the maximal supported value,");
00561 cpl_msg_warning(cpl_func, "therefore the size is reset to 81");
00562 medianwindow=81;
00563 }
00564
00565 if(medianwindow < 0)
00566 {
00567 cpl_msg_warning(cpl_func, "The window size of the median filter must be positive,");
00568 cpl_msg_warning(cpl_func, "therefore the size is reset to 1");
00569 medianwindow=1;
00570 }
00571
00572
00573
00574 if (!cpl_errorstate_is_equal(prestate)) {
00575 return (int)cpl_error_set_message(cpl_func, cpl_error_get_code(), "Could not retrieve the input parameters");
00576 }
00577
00578
00579 cpl_ensure_code(midi_dfs_set_groups(frameset) == CPL_ERROR_NONE,
00580 cpl_error_get_code());
00581
00582
00583
00584
00585
00586
00587
00588
00589
00590
00591 cur_frame = cpl_frameset_get_first(frameset);
00592 if (cur_frame == NULL) {
00593 return (int)cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
00594 "SOF does not have any file");
00595 }
00596
00597 while(cur_frame)
00598 {
00599
00600 tag = (char*)cpl_frame_get_tag(cur_frame);
00601 if (strcmp(tag, MIDI_PHOTOM_SP_CALIB) && strcmp(tag, MIDI_PHOTOM_SP_SCIENCE)) {
00602 cur_frame = cpl_frameset_get_next( frameset );
00603 continue;
00604 }
00605
00606 cpl_msg_info(cpl_func, "Processing file %s",cpl_frame_get_filename(cur_frame));
00607 ext_imaging_data=cpl_fits_find_extension(cpl_frame_get_filename(cur_frame),"IMAGING_DATA");
00608
00609
00610
00611 plist = cpl_propertylist_load(cpl_frame_get_filename(cur_frame), 0);
00612 if (cpl_propertylist_has(plist, "ESO INS SHUT ID") == 1)
00613 {
00614 shutter_id=(cpl_propertylist_get_string(plist, "ESO INS SHUT ID"));
00615 }
00616
00617
00618 if (cpl_propertylist_has(plist, "ESO INS GRIS NAME") == 1)
00619 {
00620 strcpy(gris_name,cpl_propertylist_get_string(plist, "ESO INS GRIS NAME"));
00621 }
00622
00623 if (!cpl_errorstate_is_equal(prestate)) {
00624 return (int)cpl_error_set_message(cpl_func, cpl_error_get_code(), "Could not ...");
00625 }
00626
00627 if (strcmp(shutter_id,"AOPEN")==0)
00628 {
00629
00630 isPHOTAdata=1;
00631
00632
00633 table = cpl_table_load(cpl_frame_get_filename(cur_frame), ext_imaging_data, 1);
00634 if (table == NULL) {
00635 return (int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
00636 "Could not load the table");
00637 }
00638 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
00639
00640
00641
00642
00643 if (cpl_table_has_column(table,"DATA2")){
00644 table_to_imglst_sky_target("DATA2","TARTYP2",imglst_AOPEN_DATA2_S,imglst_AOPEN_DATA2_T,table);
00645 }
00646
00647 if (cpl_table_has_column(table,"DATA3")){
00648 table_to_imglst_sky_target("DATA3","TARTYP2",imglst_AOPEN_DATA3_S,imglst_AOPEN_DATA3_T,table);
00649 }
00650
00651 if (cpl_table_has_column(table,"DATA4")){
00652 table_to_imglst_sky_target("DATA4","TARTYP2",imglst_AOPEN_DATA4_S,imglst_AOPEN_DATA4_T,table);
00653 }
00654
00655 cpl_msg_info(cpl_func, "Number of so far processed AOPEN patches: %d",cpl_imagelist_get_size(imglst_AOPEN_DATA2_T));
00656
00657 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
00658
00659 cpl_table_delete(table);
00660 }
00661
00662 if (strcmp(shutter_id,"BOPEN")==0)
00663 {
00664
00665 isPHOTBdata=1;
00666
00667
00668 table = cpl_table_load(cpl_frame_get_filename(cur_frame), ext_imaging_data, 1);
00669 if (table == NULL) {
00670 return (int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
00671 "Could not load the table");
00672 }
00673 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
00674
00675
00676
00677 if (cpl_table_has_column(table,"DATA1")){
00678 table_to_imglst_sky_target("DATA1","TARTYP2",imglst_BOPEN_DATA1_S,imglst_BOPEN_DATA1_T,table);
00679 }
00680
00681
00682 if (cpl_table_has_column(table,"DATA2")){
00683 table_to_imglst_sky_target("DATA2","TARTYP2",imglst_BOPEN_DATA2_S,imglst_BOPEN_DATA2_T,table);
00684 }
00685
00686 if (cpl_table_has_column(table,"DATA3")){
00687 table_to_imglst_sky_target("DATA3","TARTYP2",imglst_BOPEN_DATA3_S,imglst_BOPEN_DATA3_T,table);
00688 }
00689
00690
00691
00692
00693 cpl_msg_info(cpl_func, "Number of so far processed BOPEN patches: %d",cpl_imagelist_get_size(imglst_BOPEN_DATA2_T));
00694
00695
00696 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
00697
00698 cpl_table_delete(table);
00699 }
00700
00701
00702 cpl_propertylist_delete(plist);
00703
00704
00705 cur_frame = cpl_frameset_get_next( frameset );
00706
00707 }
00708
00709
00710 if (isPHOTAdata==0 || isPHOTBdata==0)
00711 {
00712 cpl_msg_error(cpl_func, "No suitable SetOfFrame fround");
00713 (void)cpl_error_set_where(cpl_func);
00714 return (int)cpl_error_set_message(cpl_func, cpl_error_get_code(), "Mask for filter name PRISM needed but not found");
00715
00716 }
00717
00718
00719
00720
00721 cpl_msg_info(cpl_func, "Doing sky subtraction ...");
00722
00723 if(cpl_imagelist_get_size(imglst_AOPEN_DATA2_T)==cpl_imagelist_get_size(imglst_AOPEN_DATA2_S)
00724 && cpl_imagelist_get_size(imglst_BOPEN_DATA1_T)==cpl_imagelist_get_size(imglst_BOPEN_DATA1_S)
00725 )
00726 {
00727 cpl_imagelist_subtract(imglst_AOPEN_DATA2_T,imglst_AOPEN_DATA2_S);
00728 cpl_imagelist_subtract(imglst_AOPEN_DATA3_T,imglst_AOPEN_DATA3_S);
00729 cpl_imagelist_subtract(imglst_AOPEN_DATA4_T,imglst_AOPEN_DATA4_S);
00730 cpl_imagelist_subtract(imglst_BOPEN_DATA1_T,imglst_BOPEN_DATA1_S);
00731 cpl_imagelist_subtract(imglst_BOPEN_DATA2_T,imglst_BOPEN_DATA2_S);
00732 cpl_imagelist_subtract(imglst_BOPEN_DATA3_T,imglst_BOPEN_DATA3_S);
00733 }
00734 else
00735 {
00736 cpl_msg_info(cpl_func, "The number of Skyframes and Targetframes differ");
00737 return (int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
00738 "The number of Skyframes and Targetframes differ");
00739 }
00740
00741
00742 cpl_msg_info(cpl_func, "Collapsing the images in the time domain ...");
00743
00744
00745 image_AOPEN_DATA2_T=cpl_imagelist_collapse_create(imglst_AOPEN_DATA2_T);
00746 image_AOPEN_DATA3_T=cpl_imagelist_collapse_create(imglst_AOPEN_DATA3_T);
00747 image_AOPEN_DATA4_T=cpl_imagelist_collapse_create(imglst_AOPEN_DATA4_T);
00748 image_BOPEN_DATA1_T=cpl_imagelist_collapse_create(imglst_BOPEN_DATA1_T);
00749 image_BOPEN_DATA2_T=cpl_imagelist_collapse_create(imglst_BOPEN_DATA2_T);
00750 image_BOPEN_DATA3_T=cpl_imagelist_collapse_create(imglst_BOPEN_DATA3_T);
00751
00752
00753 cpl_imagelist_delete(imglst_AOPEN_DATA2_T);
00754 cpl_imagelist_delete(imglst_AOPEN_DATA3_T);
00755 cpl_imagelist_delete(imglst_AOPEN_DATA4_T);
00756 cpl_imagelist_delete(imglst_AOPEN_DATA2_S);
00757 cpl_imagelist_delete(imglst_AOPEN_DATA3_S);
00758 cpl_imagelist_delete(imglst_AOPEN_DATA4_S);
00759
00760 cpl_imagelist_delete(imglst_BOPEN_DATA1_T);
00761 cpl_imagelist_delete(imglst_BOPEN_DATA2_T);
00762 cpl_imagelist_delete(imglst_BOPEN_DATA3_T);
00763 cpl_imagelist_delete(imglst_BOPEN_DATA1_S);
00764 cpl_imagelist_delete(imglst_BOPEN_DATA2_S);
00765 cpl_imagelist_delete(imglst_BOPEN_DATA3_S);
00766
00767
00768
00769
00770
00771
00772
00773
00774
00775 cpl_msg_info(cpl_func, "Extracting the masks ...");
00776
00777 cur_frame = cpl_frameset_get_first(frameset);
00778 if (cur_frame == NULL) {
00779 return (int)cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
00780 "SOF does not have any file");
00781 }
00782
00783 while(cur_frame)
00784 {
00785 ext_imaging_data=cpl_fits_find_extension(cpl_frame_get_filename(cur_frame),"IMAGING_DATA");
00786
00787
00788 tag = (char*)cpl_frame_get_tag(cur_frame);
00789
00790 if (!strcmp(tag, MIDI_KAPPA_SP_MASK_GRISM)) {
00791 table = cpl_table_load(cpl_frame_get_filename(cur_frame), ext_imaging_data, 1);
00792 if (table == NULL) {
00793 return (int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
00794 "Could not load the table");
00795 }
00796 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
00797
00798 table_to_imglst_mask("DATA1",imglst_mask_grism,table);
00799 table_to_imglst_mask("DATA1",imglst_mask_grism,table);
00800 table_to_imglst_mask("DATA2",imglst_mask_grism,table);
00801 table_to_imglst_mask("DATA3",imglst_mask_grism,table);
00802 table_to_imglst_mask("DATA4",imglst_mask_grism,table);
00803
00804
00805
00806 cpl_msg_info(cpl_func, "Normalizing the integral of the masks (GRISM) to unity ...");
00807 mask_grism_DATA1=cpl_image_cast(cpl_imagelist_get(imglst_mask_grism, 1),CPL_TYPE_DOUBLE);
00808 mask_grism_DATA2=cpl_image_cast(cpl_imagelist_get(imglst_mask_grism, 2),CPL_TYPE_DOUBLE);
00809 mask_grism_DATA3=cpl_image_cast(cpl_imagelist_get(imglst_mask_grism, 3),CPL_TYPE_DOUBLE);
00810 mask_grism_DATA4=cpl_image_cast(cpl_imagelist_get(imglst_mask_grism, 4),CPL_TYPE_DOUBLE);
00811
00812 mask_grism_DATA1_norm=cpl_image_collapse_create(mask_grism_DATA1,0);
00813 mask_grism_DATA2_norm=cpl_image_collapse_create(mask_grism_DATA2,0);
00814 mask_grism_DATA3_norm=cpl_image_collapse_create(mask_grism_DATA3,0);
00815 mask_grism_DATA4_norm=cpl_image_collapse_create(mask_grism_DATA4,0);
00816
00817 nx_DATA1=cpl_image_get_size_x(mask_grism_DATA1);
00818 ny_DATA1=cpl_image_get_size_y(mask_grism_DATA1);
00819 nx_DATA2=cpl_image_get_size_x(mask_grism_DATA2);
00820 ny_DATA2=cpl_image_get_size_y(mask_grism_DATA2);
00821 nx_DATA3=cpl_image_get_size_x(mask_grism_DATA3);
00822 ny_DATA3=cpl_image_get_size_y(mask_grism_DATA3);
00823 nx_DATA4=cpl_image_get_size_x(mask_grism_DATA4);
00824 ny_DATA4=cpl_image_get_size_y(mask_grism_DATA4);
00825
00826 pmask_grism_DATA1 = cpl_image_get_data_double(mask_grism_DATA1);
00827 pmask_grism_DATA1_norm= cpl_image_get_data_double(mask_grism_DATA1_norm);
00828 pmask_grism_DATA2 = cpl_image_get_data_double(mask_grism_DATA2);
00829 pmask_grism_DATA2_norm= cpl_image_get_data_double(mask_grism_DATA2_norm);
00830 pmask_grism_DATA3 = cpl_image_get_data_double(mask_grism_DATA3);
00831 pmask_grism_DATA3_norm= cpl_image_get_data_double(mask_grism_DATA3_norm);
00832 pmask_grism_DATA4 = cpl_image_get_data_double(mask_grism_DATA4);
00833 pmask_grism_DATA4_norm= cpl_image_get_data_double(mask_grism_DATA4_norm);
00834
00835
00836
00837 for (xpos=0; xpos<nx_DATA1; ++xpos)
00838 {
00839 for(ypos=0; ypos<ny_DATA1;++ypos)
00840 {
00841 pmask_grism_DATA1[xpos+nx_DATA1*ypos] /= pmask_grism_DATA1_norm[xpos];
00842 }
00843 }
00844
00845 for (xpos=0; xpos<nx_DATA2; ++xpos)
00846 {
00847 for(ypos=0; ypos<ny_DATA2;++ypos)
00848 {
00849 pmask_grism_DATA2[xpos+nx_DATA2*ypos] /= pmask_grism_DATA2_norm[xpos];
00850 }
00851 }
00852
00853
00854 for (xpos=0; xpos<nx_DATA3; ++xpos)
00855 {
00856 for(ypos=0; ypos<ny_DATA3;++ypos)
00857 {
00858 pmask_grism_DATA3[xpos+nx_DATA3*ypos] /= pmask_grism_DATA3_norm[xpos];
00859 }
00860 }
00861
00862
00863 for (xpos=0; xpos<nx_DATA4; ++xpos)
00864 {
00865 for(ypos=0; ypos<ny_DATA4;++ypos)
00866 {
00867 pmask_grism_DATA4[xpos+nx_DATA4*ypos] /= pmask_grism_DATA4_norm[xpos];
00868 }
00869 }
00870
00871 cpl_image_delete(mask_grism_DATA1_norm);
00872 cpl_image_delete(mask_grism_DATA2_norm);
00873 cpl_image_delete(mask_grism_DATA3_norm);
00874 cpl_image_delete(mask_grism_DATA4_norm);
00875
00876 cpl_table_delete(table);
00877
00878 }
00879
00880 if (!strcmp(tag, MIDI_KAPPA_SP_MASK_PRISM)) {
00881 table = cpl_table_load(cpl_frame_get_filename(cur_frame), ext_imaging_data, 1);
00882 if (table == NULL) {
00883 return (int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
00884 "Could not load the table");
00885 }
00886 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
00887
00888 table_to_imglst_mask("DATA1",imglst_mask_prism,table);
00889 table_to_imglst_mask("DATA1",imglst_mask_prism,table);
00890 table_to_imglst_mask("DATA2",imglst_mask_prism,table);
00891 table_to_imglst_mask("DATA3",imglst_mask_prism,table);
00892 table_to_imglst_mask("DATA4",imglst_mask_prism,table);
00893
00894
00895
00896
00897 cpl_msg_info(cpl_func, "Normalizing the integral of the masks (PRISM) to unity ...");
00898 mask_prism_DATA1=cpl_image_cast(cpl_imagelist_get(imglst_mask_prism, 1),CPL_TYPE_DOUBLE);
00899 mask_prism_DATA2=cpl_image_cast(cpl_imagelist_get(imglst_mask_prism, 2),CPL_TYPE_DOUBLE);
00900 mask_prism_DATA3=cpl_image_cast(cpl_imagelist_get(imglst_mask_prism, 3),CPL_TYPE_DOUBLE);
00901 mask_prism_DATA4=cpl_image_cast(cpl_imagelist_get(imglst_mask_prism, 4),CPL_TYPE_DOUBLE);
00902
00903 mask_prism_DATA1_norm=cpl_image_collapse_create(mask_prism_DATA1,0);
00904 mask_prism_DATA2_norm=cpl_image_collapse_create(mask_prism_DATA2,0);
00905 mask_prism_DATA3_norm=cpl_image_collapse_create(mask_prism_DATA3,0);
00906 mask_prism_DATA4_norm=cpl_image_collapse_create(mask_prism_DATA4,0);
00907
00908 nx_DATA1=cpl_image_get_size_x(mask_prism_DATA1);
00909 ny_DATA1=cpl_image_get_size_y(mask_prism_DATA1);
00910 nx_DATA2=cpl_image_get_size_x(mask_prism_DATA2);
00911 ny_DATA2=cpl_image_get_size_y(mask_prism_DATA2);
00912 nx_DATA3=cpl_image_get_size_x(mask_prism_DATA3);
00913 ny_DATA3=cpl_image_get_size_y(mask_prism_DATA3);
00914 nx_DATA4=cpl_image_get_size_x(mask_prism_DATA4);
00915 ny_DATA4=cpl_image_get_size_y(mask_prism_DATA4);
00916
00917 pmask_prism_DATA1 = cpl_image_get_data_double(mask_prism_DATA1);
00918 pmask_prism_DATA1_norm= cpl_image_get_data_double(mask_prism_DATA1_norm);
00919 pmask_prism_DATA2 = cpl_image_get_data_double(mask_prism_DATA2);
00920 pmask_prism_DATA2_norm= cpl_image_get_data_double(mask_prism_DATA2_norm);
00921 pmask_prism_DATA3 = cpl_image_get_data_double(mask_prism_DATA3);
00922 pmask_prism_DATA3_norm= cpl_image_get_data_double(mask_prism_DATA3_norm);
00923 pmask_prism_DATA4 = cpl_image_get_data_double(mask_prism_DATA4);
00924 pmask_prism_DATA4_norm= cpl_image_get_data_double(mask_prism_DATA4_norm);
00925
00926
00927
00928 for (xpos=0; xpos<nx_DATA1; ++xpos)
00929 {
00930 for(ypos=0; ypos<ny_DATA1;++ypos)
00931 {
00932 pmask_prism_DATA1[xpos+nx_DATA1*ypos] /= pmask_prism_DATA1_norm[xpos];
00933 }
00934 }
00935
00936 for (xpos=0; xpos<nx_DATA2; ++xpos)
00937 {
00938 for(ypos=0; ypos<ny_DATA2;++ypos)
00939 {
00940 pmask_prism_DATA2[xpos+nx_DATA2*ypos] /= pmask_prism_DATA2_norm[xpos];
00941 }
00942 }
00943
00944
00945 for (xpos=0; xpos<nx_DATA3; ++xpos)
00946 {
00947 for(ypos=0; ypos<ny_DATA3;++ypos)
00948 {
00949 pmask_prism_DATA3[xpos+nx_DATA3*ypos] /= pmask_prism_DATA3_norm[xpos];
00950 }
00951 }
00952
00953
00954 for (xpos=0; xpos<nx_DATA4; ++xpos)
00955 {
00956 for(ypos=0; ypos<ny_DATA4;++ypos)
00957 {
00958 pmask_prism_DATA4[xpos+nx_DATA4*ypos] /= pmask_prism_DATA4_norm[xpos];
00959 }
00960 }
00961
00962 cpl_image_delete(mask_prism_DATA1_norm);
00963 cpl_image_delete(mask_prism_DATA2_norm);
00964 cpl_image_delete(mask_prism_DATA3_norm);
00965 cpl_image_delete(mask_prism_DATA4_norm);
00966
00967
00968 cpl_table_delete(table);
00969 }
00970
00971
00972 cur_frame = cpl_frameset_get_next( frameset );
00973
00974 }
00975
00976
00977
00978
00979 if (strcmp(gris_name,"GRISM")==0 && cpl_imagelist_get_size(imglst_mask_grism) <1)
00980 {
00981 cpl_msg_error(cpl_func, "Mask for GRISM needed but not found");
00982 (void)cpl_error_set_where(cpl_func);
00983 return (int)cpl_error_set_message(cpl_func, cpl_error_get_code(), "Mask for filter name GRISM needed but not found");
00984 }
00985
00986 else if (strcmp(gris_name,"PRISM")==0 && cpl_imagelist_get_size(imglst_mask_prism) <1)
00987 {
00988 cpl_msg_error(cpl_func, "Mask for PRISM needed but not found");
00989 (void)cpl_error_set_where(cpl_func);
00990 return (int)cpl_error_set_message(cpl_func, cpl_error_get_code(), "Mask for filter name PRISM needed but not found");
00991 }
00992
00993
00994 cpl_msg_info(cpl_func, "Extracting the signal without using a mask ...");
00995
00996 image_AOPEN_DATA2_T_collapsed_nomask=cpl_image_collapse_create(image_AOPEN_DATA2_T,0);
00997 image_AOPEN_DATA3_T_collapsed_nomask=cpl_image_collapse_create(image_AOPEN_DATA3_T,0);
00998 image_AOPEN_DATA4_T_collapsed_nomask=cpl_image_collapse_create(image_AOPEN_DATA4_T,0);
00999 image_BOPEN_DATA1_T_collapsed_nomask=cpl_image_collapse_create(image_BOPEN_DATA1_T,0);
01000 image_BOPEN_DATA2_T_collapsed_nomask=cpl_image_collapse_create(image_BOPEN_DATA2_T,0);
01001 image_BOPEN_DATA3_T_collapsed_nomask=cpl_image_collapse_create(image_BOPEN_DATA3_T,0);
01002
01003
01004
01005
01006
01007 cpl_msg_info(cpl_func, "Extracting the signal using Horne 1986, PASP 98 209 ...");
01008 cpl_msg_info(cpl_func, "and assuming that the frames are sky-dominated: V(x)-> V0 ...");
01009
01010
01011 if (strcmp(gris_name,"GRISM")==0){
01012 cpl_msg_info(cpl_func, "Calculating the kappa matrix for the GRISM Data...");
01013
01014
01015 cpl_msg_info(cpl_func, "1) Multiplying the images by the mask ...");
01016 cpl_image_multiply(image_AOPEN_DATA2_T,mask_grism_DATA2);
01017 cpl_image_multiply(image_AOPEN_DATA3_T,mask_grism_DATA3);
01018 cpl_image_multiply(image_AOPEN_DATA4_T,mask_grism_DATA4);
01019 cpl_image_multiply(image_BOPEN_DATA1_T,mask_grism_DATA1);
01020 cpl_image_multiply(image_BOPEN_DATA2_T,mask_grism_DATA2);
01021 cpl_image_multiply(image_BOPEN_DATA3_T,mask_grism_DATA3);
01022
01023
01024 cpl_msg_info(cpl_func, "2) Integrating the images perpendicular to the dispersion direction ...");
01025 image_AOPEN_DATA2_T_collapsed=cpl_image_collapse_create(image_AOPEN_DATA2_T,0);
01026 image_AOPEN_DATA3_T_collapsed=cpl_image_collapse_create(image_AOPEN_DATA3_T,0);
01027 image_AOPEN_DATA4_T_collapsed=cpl_image_collapse_create(image_AOPEN_DATA4_T,0);
01028 image_BOPEN_DATA1_T_collapsed=cpl_image_collapse_create(image_BOPEN_DATA1_T,0);
01029 image_BOPEN_DATA2_T_collapsed=cpl_image_collapse_create(image_BOPEN_DATA2_T,0);
01030 image_BOPEN_DATA3_T_collapsed=cpl_image_collapse_create(image_BOPEN_DATA3_T,0);
01031
01032
01033
01034 cpl_msg_info(cpl_func, "3) Deriving mask^2 ");
01035
01036 cpl_image_power(mask_grism_DATA1,2.0);
01037 cpl_image_power(mask_grism_DATA2,2.0);
01038 cpl_image_power(mask_grism_DATA3,2.0);
01039 cpl_image_power(mask_grism_DATA4,2.0);
01040
01041
01042
01043 cpl_msg_info(cpl_func, "4) Integrating mask^2 perpendicular to the dispersion direction");
01044 mask_grism_DATA1_collapsed=cpl_image_collapse_create(mask_grism_DATA1,0);
01045 mask_grism_DATA2_collapsed=cpl_image_collapse_create(mask_grism_DATA2,0);
01046 mask_grism_DATA3_collapsed=cpl_image_collapse_create(mask_grism_DATA3,0);
01047 mask_grism_DATA4_collapsed=cpl_image_collapse_create(mask_grism_DATA4,0);
01048
01049
01050 cpl_msg_info(cpl_func, "5) Extracting the final flux by dividing 2) through 4)");
01051 cpl_image_divide(image_AOPEN_DATA2_T_collapsed,mask_grism_DATA2_collapsed);
01052 cpl_image_divide(image_AOPEN_DATA3_T_collapsed,mask_grism_DATA3_collapsed);
01053 cpl_image_divide(image_AOPEN_DATA4_T_collapsed,mask_grism_DATA4_collapsed);
01054 cpl_image_divide(image_BOPEN_DATA1_T_collapsed,mask_grism_DATA1_collapsed);
01055 cpl_image_divide(image_BOPEN_DATA2_T_collapsed,mask_grism_DATA2_collapsed);
01056 cpl_image_divide(image_BOPEN_DATA3_T_collapsed,mask_grism_DATA3_collapsed);
01057
01058
01059 cpl_image_delete(mask_grism_DATA1_collapsed);
01060 cpl_image_delete(mask_grism_DATA2_collapsed);
01061 cpl_image_delete(mask_grism_DATA3_collapsed);
01062 cpl_image_delete(mask_grism_DATA4_collapsed);
01063
01064 }
01065
01066 if(mask_grism_DATA1 != NULL)cpl_image_delete(mask_grism_DATA1);
01067 if(mask_grism_DATA2 != NULL)cpl_image_delete(mask_grism_DATA2);
01068 if(mask_grism_DATA3 != NULL)cpl_image_delete(mask_grism_DATA3);
01069 if(mask_grism_DATA4 != NULL)cpl_image_delete(mask_grism_DATA4);
01070
01071
01072
01073 if (strcmp(gris_name,"PRISM")==0){
01074 cpl_msg_info(cpl_func, "Calculating the kappa matrix for the PRISM Data...");
01075
01076
01077 cpl_msg_info(cpl_func, "1) Multiplying the images by the mask ...");
01078 cpl_image_multiply(image_AOPEN_DATA2_T,mask_prism_DATA2);
01079 cpl_image_multiply(image_AOPEN_DATA3_T,mask_prism_DATA3);
01080 cpl_image_multiply(image_AOPEN_DATA4_T,mask_prism_DATA4);
01081 cpl_image_multiply(image_BOPEN_DATA1_T,mask_prism_DATA1);
01082 cpl_image_multiply(image_BOPEN_DATA2_T,mask_prism_DATA2);
01083 cpl_image_multiply(image_BOPEN_DATA3_T,mask_prism_DATA3);
01084
01085
01086 cpl_msg_info(cpl_func, "2) Integrating the images perpendicular to the dispersion direction ...");
01087 image_AOPEN_DATA2_T_collapsed=cpl_image_collapse_create(image_AOPEN_DATA2_T,0);
01088 image_AOPEN_DATA3_T_collapsed=cpl_image_collapse_create(image_AOPEN_DATA3_T,0);
01089 image_AOPEN_DATA4_T_collapsed=cpl_image_collapse_create(image_AOPEN_DATA4_T,0);
01090 image_BOPEN_DATA1_T_collapsed=cpl_image_collapse_create(image_BOPEN_DATA1_T,0);
01091 image_BOPEN_DATA2_T_collapsed=cpl_image_collapse_create(image_BOPEN_DATA2_T,0);
01092 image_BOPEN_DATA3_T_collapsed=cpl_image_collapse_create(image_BOPEN_DATA3_T,0);
01093
01094
01095
01096 cpl_msg_info(cpl_func, "3) Deriving mask^2 ");
01097
01098 cpl_image_power(mask_prism_DATA1,2.0);
01099 cpl_image_power(mask_prism_DATA2,2.0);
01100 cpl_image_power(mask_prism_DATA3,2.0);
01101 cpl_image_power(mask_prism_DATA4,2.0);
01102
01103
01104
01105
01106 cpl_msg_info(cpl_func, "4) Integrating mask^2 perpendicular to the dispersion direction");
01107 mask_prism_DATA1_collapsed=cpl_image_collapse_create(mask_prism_DATA1,0);
01108 mask_prism_DATA2_collapsed=cpl_image_collapse_create(mask_prism_DATA2,0);
01109 mask_prism_DATA3_collapsed=cpl_image_collapse_create(mask_prism_DATA3,0);
01110 mask_prism_DATA4_collapsed=cpl_image_collapse_create(mask_prism_DATA4,0);
01111
01112 cpl_msg_info(cpl_func, "5) Extracting the final flux by dividing 2) through 4)");
01113 cpl_image_divide(image_AOPEN_DATA2_T_collapsed,mask_prism_DATA2_collapsed);
01114 cpl_image_divide(image_AOPEN_DATA3_T_collapsed,mask_prism_DATA3_collapsed);
01115 cpl_image_divide(image_AOPEN_DATA4_T_collapsed,mask_prism_DATA4_collapsed);
01116 cpl_image_divide(image_BOPEN_DATA1_T_collapsed,mask_prism_DATA1_collapsed);
01117 cpl_image_divide(image_BOPEN_DATA2_T_collapsed,mask_prism_DATA2_collapsed);
01118 cpl_image_divide(image_BOPEN_DATA3_T_collapsed,mask_prism_DATA3_collapsed);
01119
01120
01121 cpl_image_delete(mask_prism_DATA1_collapsed);
01122 cpl_image_delete(mask_prism_DATA2_collapsed);
01123 cpl_image_delete(mask_prism_DATA3_collapsed);
01124 cpl_image_delete(mask_prism_DATA4_collapsed);
01125 }
01126
01127
01128 if(mask_prism_DATA1 != NULL)cpl_image_delete(mask_prism_DATA1);
01129 if(mask_prism_DATA2 != NULL)cpl_image_delete(mask_prism_DATA2);
01130 if(mask_prism_DATA3 != NULL)cpl_image_delete(mask_prism_DATA3);
01131 if(mask_prism_DATA4 != NULL)cpl_image_delete(mask_prism_DATA4);
01132
01133
01134
01135 cpl_msg_info(cpl_func, "Deriving the KAPPA matrix following A&A 425 1161 ...");
01136
01137 kappamatrix11=cpl_image_divide_create (image_BOPEN_DATA2_T_collapsed, image_BOPEN_DATA1_T_collapsed);
01138 kappamatrix12=cpl_image_divide_create (image_AOPEN_DATA2_T_collapsed, image_AOPEN_DATA4_T_collapsed);
01139 kappamatrix21=cpl_image_divide_create (image_BOPEN_DATA3_T_collapsed, image_BOPEN_DATA1_T_collapsed);
01140 kappamatrix22=cpl_image_divide_create (image_AOPEN_DATA3_T_collapsed, image_AOPEN_DATA4_T_collapsed);
01141
01142 kappamatrix11_nomask=cpl_image_divide_create (image_BOPEN_DATA2_T_collapsed_nomask, image_BOPEN_DATA1_T_collapsed_nomask);
01143 kappamatrix12_nomask=cpl_image_divide_create (image_AOPEN_DATA2_T_collapsed_nomask, image_AOPEN_DATA4_T_collapsed_nomask);
01144 kappamatrix21_nomask=cpl_image_divide_create (image_BOPEN_DATA3_T_collapsed_nomask, image_BOPEN_DATA1_T_collapsed_nomask);
01145 kappamatrix22_nomask=cpl_image_divide_create (image_AOPEN_DATA3_T_collapsed_nomask, image_AOPEN_DATA4_T_collapsed_nomask);
01146
01147
01148
01149
01150 cpl_image_delete(image_AOPEN_DATA2_T);
01151 cpl_image_delete(image_AOPEN_DATA3_T);
01152 cpl_image_delete(image_AOPEN_DATA4_T);
01153
01154 cpl_image_delete(image_BOPEN_DATA1_T);
01155 cpl_image_delete(image_BOPEN_DATA2_T);
01156 cpl_image_delete(image_BOPEN_DATA3_T);
01157
01158 cpl_image_delete(image_AOPEN_DATA2_T_collapsed);
01159 cpl_image_delete(image_AOPEN_DATA3_T_collapsed);
01160 cpl_image_delete(image_AOPEN_DATA4_T_collapsed);
01161
01162 cpl_image_delete(image_BOPEN_DATA1_T_collapsed);
01163 cpl_image_delete(image_BOPEN_DATA2_T_collapsed);
01164 cpl_image_delete(image_BOPEN_DATA3_T_collapsed);
01165
01166 cpl_image_delete(image_AOPEN_DATA2_T_collapsed_nomask);
01167 cpl_image_delete(image_AOPEN_DATA3_T_collapsed_nomask);
01168 cpl_image_delete(image_AOPEN_DATA4_T_collapsed_nomask);
01169
01170 cpl_image_delete(image_BOPEN_DATA1_T_collapsed_nomask);
01171 cpl_image_delete(image_BOPEN_DATA2_T_collapsed_nomask);
01172 cpl_image_delete(image_BOPEN_DATA3_T_collapsed_nomask);
01173
01174
01175
01176
01177
01178
01179
01180
01181
01182
01183
01184 cpl_msg_info(cpl_func, "Smoothing the KAPPA matrix ...");
01185
01186 mask = cpl_mask_new(medianwindow,1);
01187 cpl_mask_not(mask);
01188
01189 kappamatrix11_filtered=cpl_image_duplicate(kappamatrix11);
01190 kappamatrix12_filtered=cpl_image_duplicate(kappamatrix12);
01191 kappamatrix21_filtered=cpl_image_duplicate(kappamatrix21);
01192 kappamatrix22_filtered=cpl_image_duplicate(kappamatrix22);
01193
01194
01195 cpl_image_filter_mask(kappamatrix11_filtered,kappamatrix11, mask,CPL_FILTER_MEDIAN ,CPL_BORDER_FILTER);
01196 cpl_image_filter_mask(kappamatrix12_filtered,kappamatrix12, mask,CPL_FILTER_MEDIAN ,CPL_BORDER_FILTER);
01197 cpl_image_filter_mask(kappamatrix21_filtered,kappamatrix21, mask,CPL_FILTER_MEDIAN ,CPL_BORDER_FILTER);
01198 cpl_image_filter_mask(kappamatrix22_filtered,kappamatrix22, mask,CPL_FILTER_MEDIAN ,CPL_BORDER_FILTER);
01199
01200 cpl_mask_delete(mask);
01201
01202
01203
01204
01205
01206
01207
01208
01209
01210
01211
01212 if (strcmp(gris_name,"GRISM")==0)
01213 {
01214 lowlimit=140;
01215 highlimit=160;
01216 }
01217
01218 else
01219 {
01220 lowlimit=65;
01221 highlimit=85;
01222 }
01223
01224
01225
01226
01227 kappamatrix11_stdev=cpl_image_get_stdev_window (kappamatrix11,lowlimit,1,highlimit,1);
01228 kappamatrix11_stdev_nomask=cpl_image_get_stdev_window (kappamatrix11_nomask,lowlimit,1,highlimit,1);
01229 kappamatrix11_stdev_filtered=cpl_image_get_stdev_window (kappamatrix11_filtered,lowlimit,1,highlimit,1);
01230
01231 kappamatrix12_stdev=cpl_image_get_stdev_window (kappamatrix12,lowlimit,1,highlimit,1);
01232 kappamatrix12_stdev_nomask=cpl_image_get_stdev_window (kappamatrix12_nomask,lowlimit,1,highlimit,1);
01233 kappamatrix12_stdev_filtered=cpl_image_get_stdev_window (kappamatrix12_filtered,lowlimit,1,highlimit,1);
01234
01235 kappamatrix21_stdev=cpl_image_get_stdev_window (kappamatrix21,lowlimit,1,highlimit,1);
01236 kappamatrix21_stdev_nomask=cpl_image_get_stdev_window (kappamatrix21_nomask,lowlimit,1,highlimit,1);
01237 kappamatrix21_stdev_filtered=cpl_image_get_stdev_window (kappamatrix21_filtered,lowlimit,1,highlimit,1);
01238
01239 kappamatrix22_stdev=cpl_image_get_stdev_window (kappamatrix22,lowlimit,1,highlimit,1);
01240 kappamatrix22_stdev_nomask=cpl_image_get_stdev_window (kappamatrix22_nomask,lowlimit,1,highlimit,1);
01241 kappamatrix22_stdev_filtered=cpl_image_get_stdev_window (kappamatrix22_filtered,lowlimit,1,highlimit,1);
01242
01243
01244 kappamatrix11_median=cpl_image_get_median_window (kappamatrix11,lowlimit,1,highlimit,1);
01245 kappamatrix11_median_nomask=cpl_image_get_median_window (kappamatrix11_nomask,lowlimit,1,highlimit,1);
01246 kappamatrix11_median_filtered=cpl_image_get_median_window (kappamatrix11_filtered,lowlimit,1,highlimit,1);
01247
01248 kappamatrix12_median=cpl_image_get_median_window (kappamatrix12,lowlimit,1,highlimit,1);
01249 kappamatrix12_median_nomask=cpl_image_get_median_window (kappamatrix12_nomask,lowlimit,1,highlimit,1);
01250 kappamatrix12_median_filtered=cpl_image_get_median_window (kappamatrix12_filtered,lowlimit,1,highlimit,1);
01251
01252 kappamatrix21_median=cpl_image_get_median_window (kappamatrix21,lowlimit,1,highlimit,1);
01253 kappamatrix21_median_nomask=cpl_image_get_median_window (kappamatrix21_nomask,lowlimit,1,highlimit,1);
01254 kappamatrix21_median_filtered=cpl_image_get_median_window (kappamatrix21_filtered,lowlimit,1,highlimit,1);
01255
01256 kappamatrix22_median=cpl_image_get_median_window (kappamatrix22,lowlimit,1,highlimit,1);
01257 kappamatrix22_median_nomask=cpl_image_get_median_window (kappamatrix22_nomask,lowlimit,1,highlimit,1);
01258 kappamatrix22_median_filtered=cpl_image_get_median_window (kappamatrix22_filtered,lowlimit,1,highlimit,1);
01259
01260
01261
01262
01263
01264 cpl_msg_info(cpl_func, "Saving the KAPPA matrix(es) ...");
01265
01266
01267
01268 qclist11 = cpl_propertylist_new();
01269 qclist12 = cpl_propertylist_new();
01270 qclist21 = cpl_propertylist_new();
01271 qclist22 = cpl_propertylist_new();
01272
01273 qclist11_nomask = cpl_propertylist_new();
01274 qclist12_nomask = cpl_propertylist_new();
01275 qclist21_nomask = cpl_propertylist_new();
01276 qclist22_nomask = cpl_propertylist_new();
01277
01278 qclist11_filtered = cpl_propertylist_new();
01279 qclist12_filtered = cpl_propertylist_new();
01280 qclist21_filtered = cpl_propertylist_new();
01281 qclist22_filtered = cpl_propertylist_new();
01282
01283
01284 cpl_propertylist_append_double(qclist11, "ESO QC KAPPA MEDIAN 11", kappamatrix11_median);
01285 cpl_propertylist_append_double(qclist12, "ESO QC KAPPA MEDIAN 12", kappamatrix12_median);
01286 cpl_propertylist_append_double(qclist21, "ESO QC KAPPA MEDIAN 21", kappamatrix21_median);
01287 cpl_propertylist_append_double(qclist22, "ESO QC KAPPA MEDIAN 22", kappamatrix22_median);
01288
01289 cpl_propertylist_append_double(qclist11_nomask, "ESO QC KAPPA NOMASK MEDIAN 11", kappamatrix11_median_nomask);
01290 cpl_propertylist_append_double(qclist12_nomask, "ESO QC KAPPA NOMASK MEDIAN 12", kappamatrix12_median_nomask);
01291 cpl_propertylist_append_double(qclist21_nomask, "ESO QC KAPPA NOMASK MEDIAN 21", kappamatrix21_median_nomask);
01292 cpl_propertylist_append_double(qclist22_nomask, "ESO QC KAPPA NOMASK MEDIAN 22", kappamatrix22_median_nomask);
01293
01294 cpl_propertylist_append_double(qclist11_filtered, "ESO QC KAPPA FILTERED MEDIAN 11", kappamatrix11_median_filtered);
01295 cpl_propertylist_append_double(qclist12_filtered, "ESO QC KAPPA FILTERED MEDIAN 12", kappamatrix12_median_filtered);
01296 cpl_propertylist_append_double(qclist21_filtered, "ESO QC KAPPA FILTERED MEDIAN 21", kappamatrix21_median_filtered);
01297 cpl_propertylist_append_double(qclist22_filtered, "ESO QC KAPPA FILTERED MEDIAN 22", kappamatrix22_median_filtered);
01298
01299
01300 cpl_propertylist_append_double(qclist11, "ESO QC KAPPA STDEV 11", kappamatrix11_stdev);
01301 cpl_propertylist_append_double(qclist12, "ESO QC KAPPA STDEV 12", kappamatrix12_stdev);
01302 cpl_propertylist_append_double(qclist21, "ESO QC KAPPA STDEV 21", kappamatrix21_stdev);
01303 cpl_propertylist_append_double(qclist22, "ESO QC KAPPA STDEV 22", kappamatrix22_stdev);
01304
01305 cpl_propertylist_append_double(qclist11_nomask, "ESO QC KAPPA NOMASK STDEV 11", kappamatrix11_stdev_nomask);
01306 cpl_propertylist_append_double(qclist12_nomask, "ESO QC KAPPA NOMASK STDEV 12", kappamatrix12_stdev_nomask);
01307 cpl_propertylist_append_double(qclist21_nomask, "ESO QC KAPPA NOMASK STDEV 21", kappamatrix21_stdev_nomask);
01308 cpl_propertylist_append_double(qclist22_nomask, "ESO QC KAPPA NOMASK STDEV 22", kappamatrix22_stdev_nomask);
01309
01310 cpl_propertylist_append_double(qclist11_filtered, "ESO QC KAPPA FILTERED STDEV 11", kappamatrix11_stdev_filtered);
01311 cpl_propertylist_append_double(qclist12_filtered, "ESO QC KAPPA FILTERED STDEV 12", kappamatrix12_stdev_filtered);
01312 cpl_propertylist_append_double(qclist21_filtered, "ESO QC KAPPA FILTERED STDEV 21", kappamatrix21_stdev_filtered);
01313 cpl_propertylist_append_double(qclist22_filtered, "ESO QC KAPPA FILTERED STDEV 22", kappamatrix22_stdev_filtered);
01314
01315
01316
01317 cpl_propertylist_update_string(qclist11, CPL_DFS_PRO_CATG, "MIDI_KAPPAMATRIX11");
01318 cpl_propertylist_update_string(qclist12, CPL_DFS_PRO_CATG, "MIDI_KAPPAMATRIX12");
01319 cpl_propertylist_update_string(qclist21, CPL_DFS_PRO_CATG, "MIDI_KAPPAMATRIX21");
01320 cpl_propertylist_update_string(qclist22, CPL_DFS_PRO_CATG, "MIDI_KAPPAMATRIX22");
01321
01322 cpl_propertylist_update_string(qclist11_nomask, CPL_DFS_PRO_CATG, "MIDI_KAPPAMATRIX11_NOMASK");
01323 cpl_propertylist_update_string(qclist12_nomask, CPL_DFS_PRO_CATG, "MIDI_KAPPAMATRIX12_NOMASK");
01324 cpl_propertylist_update_string(qclist21_nomask, CPL_DFS_PRO_CATG, "MIDI_KAPPAMATRIX21_NOMASK");
01325 cpl_propertylist_update_string(qclist22_nomask, CPL_DFS_PRO_CATG, "MIDI_KAPPAMATRIX22_NOMASK");
01326
01327 cpl_propertylist_update_string(qclist11_filtered, CPL_DFS_PRO_CATG, "MIDI_KAPPAMATRIX11_FILTERED");
01328 cpl_propertylist_update_string(qclist12_filtered, CPL_DFS_PRO_CATG, "MIDI_KAPPAMATRIX12_FILTERED");
01329 cpl_propertylist_update_string(qclist21_filtered, CPL_DFS_PRO_CATG, "MIDI_KAPPAMATRIX21_FILTERED");
01330 cpl_propertylist_update_string(qclist22_filtered, CPL_DFS_PRO_CATG, "MIDI_KAPPAMATRIX22_FILTERED");
01331
01332
01333
01334
01335
01336
01337
01338 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix11,
01339 CPL_BPP_IEEE_FLOAT, "midi_kappamatrix",
01340 qclist11, NULL,
01341 PACKAGE "/" PACKAGE_VERSION,
01342 "midi_kappamatrix11.fits")) {
01343
01344 (void)cpl_error_set_where(cpl_func);
01345 }
01346 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix12,
01347 CPL_BPP_IEEE_FLOAT, "midi_kappamatrix",
01348 qclist12, NULL,
01349 PACKAGE "/" PACKAGE_VERSION,
01350 "midi_kappamatrix12.fits")) {
01351
01352 (void)cpl_error_set_where(cpl_func);
01353 }
01354 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix21,
01355 CPL_BPP_IEEE_FLOAT, "midi_kappamatrix",
01356 qclist21, NULL,
01357 PACKAGE "/" PACKAGE_VERSION,
01358 "midi_kappamatrix21.fits")) {
01359
01360 (void)cpl_error_set_where(cpl_func);
01361 }
01362 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix22,
01363 CPL_BPP_IEEE_FLOAT, "midi_kappamatrix",
01364 qclist22, NULL,
01365 PACKAGE "/" PACKAGE_VERSION,
01366 "midi_kappamatrix22.fits")) {
01367
01368 (void)cpl_error_set_where(cpl_func);
01369 }
01370
01371
01372 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix11_nomask,
01373 CPL_BPP_IEEE_FLOAT, "midi_kappamatrix",
01374 qclist11_nomask, NULL,
01375 PACKAGE "/" PACKAGE_VERSION,
01376 "midi_kappamatrix11_nomask.fits")) {
01377
01378 (void)cpl_error_set_where(cpl_func);
01379 }
01380 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix12_nomask,
01381 CPL_BPP_IEEE_FLOAT, "midi_kappamatrix",
01382 qclist12_nomask, NULL,
01383 PACKAGE "/" PACKAGE_VERSION,
01384 "midi_kappamatrix12_nomask.fits")) {
01385
01386 (void)cpl_error_set_where(cpl_func);
01387 }
01388 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix21_nomask,
01389 CPL_BPP_IEEE_FLOAT, "midi_kappamatrix",
01390 qclist21_nomask, NULL,
01391 PACKAGE "/" PACKAGE_VERSION,
01392 "midi_kappamatrix21_nomask.fits")) {
01393
01394 (void)cpl_error_set_where(cpl_func);
01395 }
01396 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix22_nomask,
01397 CPL_BPP_IEEE_FLOAT, "midi_kappamatrix",
01398 qclist22_nomask, NULL,
01399 PACKAGE "/" PACKAGE_VERSION,
01400 "midi_kappamatrix22_nomask.fits")) {
01401
01402 (void)cpl_error_set_where(cpl_func);
01403 }
01404
01405
01406 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix11_filtered,
01407 CPL_BPP_IEEE_FLOAT, "midi_kappamatrix",
01408 qclist11_filtered, NULL,
01409 PACKAGE "/" PACKAGE_VERSION,
01410 "midi_kappamatrix11_filtered.fits")) {
01411
01412 (void)cpl_error_set_where(cpl_func);
01413 }
01414 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix12_filtered,
01415 CPL_BPP_IEEE_FLOAT, "midi_kappamatrix",
01416 qclist12_filtered, NULL,
01417 PACKAGE "/" PACKAGE_VERSION,
01418 "midi_kappamatrix12_filtered.fits")) {
01419
01420 (void)cpl_error_set_where(cpl_func);
01421 }
01422 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix21_filtered,
01423 CPL_BPP_IEEE_FLOAT, "midi_kappamatrix",
01424 qclist21_filtered, NULL,
01425 PACKAGE "/" PACKAGE_VERSION,
01426 "midi_kappamatrix21_filtered.fits")) {
01427
01428 (void)cpl_error_set_where(cpl_func);
01429 }
01430 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, kappamatrix22_filtered,
01431 CPL_BPP_IEEE_FLOAT, "midi_kappamatrix",
01432 qclist22_filtered, NULL,
01433 PACKAGE "/" PACKAGE_VERSION,
01434 "midi_kappamatrix22_filtered.fits")) {
01435
01436 (void)cpl_error_set_where(cpl_func);
01437 }
01438
01439
01440
01441
01442 kappamatrix_table=cpl_table_new(cpl_image_get_size_x(kappamatrix11));
01443 cpl_table_new_column(kappamatrix_table, "kappam11", CPL_TYPE_FLOAT);
01444 cpl_table_new_column(kappamatrix_table, "kappam11_error", CPL_TYPE_FLOAT);
01445 cpl_table_new_column(kappamatrix_table, "kappam12", CPL_TYPE_FLOAT);
01446 cpl_table_new_column(kappamatrix_table, "kappam12_error", CPL_TYPE_FLOAT);
01447 cpl_table_new_column(kappamatrix_table, "kappam21", CPL_TYPE_FLOAT);
01448 cpl_table_new_column(kappamatrix_table, "kappam21_error", CPL_TYPE_FLOAT);
01449 cpl_table_new_column(kappamatrix_table, "kappam22", CPL_TYPE_FLOAT);
01450 cpl_table_new_column(kappamatrix_table, "kappam22_error", CPL_TYPE_FLOAT);
01451
01452 cpl_table_copy_data_float(kappamatrix_table, "kappam11", cpl_image_get_data_float((kappamatrix11)));
01453 cpl_table_copy_data_float(kappamatrix_table, "kappam12", cpl_image_get_data_float((kappamatrix12)));
01454 cpl_table_copy_data_float(kappamatrix_table, "kappam21", cpl_image_get_data_float((kappamatrix21)));
01455 cpl_table_copy_data_float(kappamatrix_table, "kappam22", cpl_image_get_data_float((kappamatrix22)));
01456
01457 cpl_table_fill_column_window_float (kappamatrix_table, "kappam11_error", 0, cpl_image_get_size_x(kappamatrix11), 0.05);
01458 cpl_table_fill_column_window_float (kappamatrix_table, "kappam12_error", 0, cpl_image_get_size_x(kappamatrix12), 0.05);
01459 cpl_table_fill_column_window_float (kappamatrix_table, "kappam21_error", 0, cpl_image_get_size_x(kappamatrix21), 0.05);
01460 cpl_table_fill_column_window_float (kappamatrix_table, "kappam22_error", 0, cpl_image_get_size_x(kappamatrix22), 0.05);
01461
01462 qclist_all = cpl_propertylist_new();
01463 cpl_propertylist_append(qclist_all,qclist11);
01464 cpl_propertylist_append(qclist_all,qclist12);
01465 cpl_propertylist_append(qclist_all,qclist21);
01466 cpl_propertylist_append(qclist_all,qclist22);
01467 cpl_propertylist_erase_regexp(qclist_all, CPL_DFS_PRO_CATG,0);
01468
01469
01470
01471 qclist_all_extension = cpl_propertylist_new();
01472 cpl_propertylist_append_string (qclist_all_extension, "EXTNAME", "MIDI_KAPPAMATRIX");
01473
01474
01475 if (strcmp(gris_name,"GRISM")==0)
01476 {
01477
01478 cpl_propertylist_update_string(qclist_all, CPL_DFS_PRO_CATG, "MIDI_KAPPAMATRIX_GRISM");
01479
01480 cpl_dfs_save_table(frameset, NULL, parlist, frameset, NULL, kappamatrix_table,
01481 qclist_all_extension, "midi_kappamatrix",
01482 qclist_all, NULL,
01483 PACKAGE "/" PACKAGE_VERSION,
01484 "midi_kappamatrix_grism.fits");
01485 cpl_table_delete(kappamatrix_table);
01486 }
01487
01488 if (strcmp(gris_name,"PRISM")==0)
01489 {
01490 cpl_propertylist_update_string(qclist_all, CPL_DFS_PRO_CATG, "MIDI_KAPPAMATRIX_PRISM");
01491 cpl_dfs_save_table(frameset, NULL, parlist, frameset, NULL, kappamatrix_table,
01492 qclist_all_extension, "midi_kappamatrix",
01493 qclist_all, NULL,
01494 PACKAGE "/" PACKAGE_VERSION,
01495 "midi_kappamatrix_prism.fits");
01496 cpl_table_delete(kappamatrix_table);
01497 }
01498
01499
01500
01501
01502
01503 if (strcmp(gris_name,"GRISM")==0)
01504 {
01505 cubename = cpl_sprintf("%s_%s%s", "transferRatios", "GRISM", ".dat");
01506 kappa_to_ascii( kappamatrix11, kappamatrix12, kappamatrix21, kappamatrix22, cubename);
01507 cpl_free(cubename);
01508
01509 cubename = cpl_sprintf("%s_%s%s", "transferRatios", "GRISM", "_nomask.dat");
01510 kappa_to_ascii( kappamatrix11_nomask, kappamatrix12_nomask, kappamatrix21_nomask, kappamatrix22_nomask, cubename);
01511 cpl_free(cubename);
01512
01513 cubename = cpl_sprintf("%s_%s%s", "transferRatios", "GRISM", "_filtered.dat");
01514 kappa_to_ascii( kappamatrix11_filtered, kappamatrix12_filtered, kappamatrix21_filtered, kappamatrix22_filtered, cubename);
01515 cpl_free(cubename);
01516
01517
01518 }
01519
01520 if (strcmp(gris_name,"PRISM")==0)
01521 {
01522 cubename = cpl_sprintf("%s_%s%s", "transferRatios", "PRISM", ".dat");
01523 kappa_to_ascii( kappamatrix11, kappamatrix12, kappamatrix21, kappamatrix22, cubename);
01524 cpl_free(cubename);
01525
01526 cubename = cpl_sprintf("%s_%s%s", "transferRatios", "PRISM", "_nomask.dat");
01527 kappa_to_ascii( kappamatrix11_nomask, kappamatrix12_nomask, kappamatrix21_nomask, kappamatrix22_nomask, cubename);
01528 cpl_free(cubename);
01529
01530 cubename = cpl_sprintf("%s_%s%s", "transferRatios", "PRISM", "_filtered.dat");
01531 kappa_to_ascii( kappamatrix11_filtered, kappamatrix12_filtered, kappamatrix21_filtered, kappamatrix22_filtered, cubename);
01532 cpl_free(cubename);
01533
01534 }
01535
01536
01537
01538
01539
01540 cpl_image_delete(kappamatrix11);
01541 cpl_image_delete(kappamatrix12);
01542 cpl_image_delete(kappamatrix21);
01543 cpl_image_delete(kappamatrix22);
01544
01545 cpl_image_delete(kappamatrix11_nomask);
01546 cpl_image_delete(kappamatrix12_nomask);
01547 cpl_image_delete(kappamatrix21_nomask);
01548 cpl_image_delete(kappamatrix22_nomask);
01549
01550 cpl_image_delete(kappamatrix11_filtered);
01551 cpl_image_delete(kappamatrix12_filtered);
01552 cpl_image_delete(kappamatrix21_filtered);
01553 cpl_image_delete(kappamatrix22_filtered);
01554
01555
01556
01557
01558 while(cpl_imagelist_get_size(imglst_mask_prism)>0){
01559 cpl_image_delete(cpl_imagelist_unset(imglst_mask_prism,0));
01560 }
01561
01562 while(cpl_imagelist_get_size(imglst_mask_grism)>0){
01563 cpl_image_delete(cpl_imagelist_unset(imglst_mask_grism,0));
01564 }
01565
01566
01567 cpl_imagelist_delete(imglst_mask_prism);
01568 cpl_imagelist_delete(imglst_mask_grism);
01569
01570
01571
01572
01573
01574 cpl_propertylist_delete(qclist11);
01575 cpl_propertylist_delete(qclist12);
01576 cpl_propertylist_delete(qclist21);
01577 cpl_propertylist_delete(qclist22);
01578 cpl_propertylist_delete(qclist11_nomask);
01579 cpl_propertylist_delete(qclist12_nomask);
01580 cpl_propertylist_delete(qclist21_nomask);
01581 cpl_propertylist_delete(qclist22_nomask);
01582 cpl_propertylist_delete(qclist11_filtered);
01583 cpl_propertylist_delete(qclist12_filtered);
01584 cpl_propertylist_delete(qclist21_filtered);
01585 cpl_propertylist_delete(qclist22_filtered);
01586 cpl_propertylist_delete(qclist_all);
01587 cpl_propertylist_delete(qclist_all_extension);
01588
01589
01590 return (int)cpl_error_get_code();
01591 }
01592
01593
01594
01595 static int table_to_imglst_sky_target(const char * columname,
01596 const char * columntype,
01597 cpl_imagelist * imglst_sky,
01598 cpl_imagelist * imglst_target,
01599 cpl_table * table)
01600 {
01601
01602 int dimenDATA;
01603 int i,csky=0, ctarget=0,csky_tmp=0, ctarget_tmp=0,first_unknown=0;
01604 cpl_array * array_data=NULL;
01605 cpl_image * image_data_int=NULL;
01606 cpl_errorstate prestate = cpl_errorstate_get();
01607 char ** target_type;
01608 cpl_type ctype;
01609 int flag_issky=0;
01610 int flag_istarget=0;
01611
01612 cpl_imagelist * imglst_sky_tmp=NULL;
01613 cpl_imagelist * imglst_target_tmp=NULL;
01614
01615 imglst_sky_tmp=cpl_imagelist_new();
01616 imglst_target_tmp=cpl_imagelist_new();
01617
01618
01619
01620 dimenDATA=cpl_table_get_column_dimensions(table, columname);
01621 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
01622 if (dimenDATA != 2) {
01623 return (int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
01624 "DATA has a wrong dimension");
01625 }
01626
01627
01628
01629
01630 if (cpl_table_has_column(table, columntype))
01631 {
01632 target_type=cpl_table_get_data_string(table, columntype);
01633
01634 }
01635 else
01636 {
01637 return (int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
01638 "TYPE of the Column not found");
01639 }
01640
01641
01642
01643
01644 ctype=cpl_table_get_column_type(table, columname);
01645
01646
01647
01648
01649 csky=cpl_imagelist_get_size(imglst_sky);
01650
01651 ctarget=cpl_imagelist_get_size(imglst_target);
01652
01653
01654
01655
01656
01657 flag_issky=0;
01658 flag_istarget=0;
01659
01660
01661
01662 for (i=0; i<cpl_table_get_nrow(table);i++){
01663 if(strcmp(target_type[i],"U")== 0){
01664 first_unknown=i;
01665 break;
01666 }
01667 }
01668
01669
01670
01671 for (i=first_unknown; i<cpl_table_get_nrow(table);i++){
01672
01673 array_data=(cpl_array *)cpl_table_get_array(table,columname, i);
01674 if(ctype&CPL_TYPE_INT){
01675 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) );
01676 }
01677 if(ctype&CPL_TYPE_FLOAT){
01678 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) );
01679 }
01680
01681
01682
01683
01684
01685 if(strcmp(target_type[i],"S")== 0){
01686 cpl_imagelist_set(imglst_sky_tmp,cpl_image_cast(image_data_int, CPL_TYPE_FLOAT),csky_tmp++);
01687 flag_issky=1;
01688 cpl_image_unwrap(image_data_int);
01689 continue;
01690 }
01691 if(strcmp(target_type[i],"T")== 0){
01692 cpl_imagelist_set(imglst_target_tmp,cpl_image_cast(image_data_int, CPL_TYPE_FLOAT),ctarget_tmp++);
01693 flag_istarget=1;
01694 cpl_image_unwrap(image_data_int);
01695 continue;
01696 }
01697
01698
01699 if(image_data_int!=NULL){
01700 cpl_image_unwrap(image_data_int);
01701 }
01702 if(flag_issky >0 && flag_istarget >0){
01703
01704 cpl_imagelist_set(imglst_sky,cpl_imagelist_collapse_create(imglst_sky_tmp),csky++);
01705 cpl_imagelist_set(imglst_target,cpl_imagelist_collapse_create(imglst_target_tmp),ctarget++);
01706 csky_tmp=0;
01707 ctarget_tmp=0;
01708 flag_issky=0;
01709 flag_istarget=0;
01710
01711
01712 while(cpl_imagelist_get_size(imglst_sky_tmp)>0){
01713 cpl_image_delete(cpl_imagelist_unset(imglst_sky_tmp,0));
01714 }
01715 while(cpl_imagelist_get_size(imglst_target_tmp)>0){
01716 cpl_image_delete(cpl_imagelist_unset(imglst_target_tmp,0));
01717 }
01718
01719 }
01720
01721 }
01722
01723
01724
01725 while(cpl_imagelist_get_size(imglst_sky_tmp)>0){
01726 cpl_image_delete(cpl_imagelist_unset(imglst_sky_tmp,0));
01727 }
01728 while(cpl_imagelist_get_size(imglst_target_tmp)>0){
01729 cpl_image_delete(cpl_imagelist_unset(imglst_target_tmp,0));
01730 }
01731
01732 cpl_imagelist_delete(imglst_sky_tmp);
01733 cpl_imagelist_delete(imglst_target_tmp);
01734
01735
01736
01737 return (int)cpl_error_get_code();
01738 }
01739
01740
01741
01742
01743
01744
01745
01746 static int table_to_imglst_mask(const char * columname,
01747 cpl_imagelist * imglst,
01748 cpl_table * table)
01749 {
01750
01751 int dimenDATA;
01752 int i=0, counter=0;
01753 cpl_array * array_data=NULL;
01754 cpl_image * image_data_int=NULL;
01755 cpl_errorstate prestate = cpl_errorstate_get();
01756 cpl_type ctype;
01757
01758
01759
01760 dimenDATA=cpl_table_get_column_dimensions(table, columname);
01761 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
01762 if (dimenDATA != 2) {
01763 return (int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
01764 "DATA has a wrong dimension");
01765 }
01766
01767
01768
01769
01770
01771
01772
01773
01774 ctype=cpl_table_get_column_type(table, columname);
01775
01776
01777
01778
01779 counter=cpl_imagelist_get_size(imglst);
01780
01781
01782 for (i=0; i<cpl_table_get_nrow(table);i++){
01783
01784 array_data=(cpl_array *)cpl_table_get_array(table,columname, i);
01785 if(ctype&CPL_TYPE_INT){
01786 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) );
01787 }
01788 if(ctype&CPL_TYPE_FLOAT){
01789 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) );
01790 }
01791
01792
01793
01794
01795
01796 cpl_imagelist_set(imglst,cpl_image_cast(image_data_int, CPL_TYPE_FLOAT),counter++);
01797
01798
01799 if(image_data_int!=NULL){
01800 cpl_image_unwrap(image_data_int);
01801 }
01802
01803
01804 }
01805
01806
01807
01808 return (int)cpl_error_get_code();
01809 }
01810
01811
01812
01813
01814
01815
01816
01817 static void kappa_to_ascii(const cpl_image * kappa11,
01818 const cpl_image * kappa12,
01819 const cpl_image * kappa21,
01820 const cpl_image * kappa22,
01821 const char * filename)
01822 {
01823 FILE * fp ;
01824 int pis_rejected;
01825 int i;
01826 if ( filename == NULL)
01827 {
01828 cpl_msg_error(cpl_func,"please give the filename!") ;
01829 return ;
01830 }
01831
01832 if ( NULL == (fp = fopen ( filename, "w" ) ) )
01833 {
01834 cpl_msg_error(cpl_func,"cannot open %s", filename) ;
01835 return ;
01836 }
01837
01838
01839 fprintf (fp, "%d \n",cpl_image_get_size_x(kappa11));
01840
01841 for ( i = 1 ; i <= cpl_image_get_size_x(kappa11) ; i++ )
01842 {
01843 fprintf (fp, "%f 0.05 %f 0.05 %f 0.05 %f 0.05 \n",
01844 cpl_image_get(kappa11, i, 1,&pis_rejected),
01845 cpl_image_get(kappa12, i, 1,&pis_rejected),
01846 cpl_image_get(kappa21, i, 1,&pis_rejected),
01847 cpl_image_get(kappa22, i, 1,&pis_rejected)) ;
01848 }
01849 fclose (fp ) ;
01850 }
01851
01852