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