midi_kappamatrix.c

00001 /* $Id: midi_kappamatrix.c,v 1.31 2012/04/10 14:01:39 agabasch Exp $
00002  *
00003  * This file is part of the MIDI Pipeline
00004  * Copyright (C) 2002,2003 European Southern Observatory
00005  *
00006  * This program is free software; you can redistribute it and/or modify
00007  * it under the terms of the GNU General Public License as published by
00008  * the Free Software Foundation; either version 2 of the License, or
00009  * (at your option) any later version.
00010  *
00011  * This program is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  * GNU General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU General Public License
00017  * along with this program; if not, write to the Free Software
00018  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019  */
00020 
00021 /*
00022  * $Author: agabasch $
00023  * $Date: 2012/04/10 14:01:39 $
00024  * $Revision: 1.31 $
00025  * $Name: midi-2_8_2 $
00026  */
00027 
00028 #ifdef HAVE_CONFIG_H
00029 #include <config.h>
00030 #endif
00031 
00032 /*-----------------------------------------------------------------------------
00033                                 Includes
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                             Private function prototypes
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                             Static variables
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                                 Function code
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     /* Do not create the recipe if an error code is already set */     
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     /* Verify plugin type */                                           
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     /* Get the recipe */                                               
00204     recipe = (cpl_recipe *)plugin;                                     
00205                                                                        
00206     /* Create the parameters list in the cpl_recipe object */          
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     /* Fill the parameters list */
00214 
00215     /* --stropt */
00216 /*     p = cpl_parameter_new_value("midi.midi_kappamatrix.outputfilename",  */
00217 /*             CPL_TYPE_STRING, "Output Filename (placeholder; not used for the moment!!)", "midi.midi_kappamatrix","kappamatrix.fits"); */
00218 /*     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "outfile"); */
00219 /*     cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); */
00220 /*     cpl_parameterlist_append(recipe->parameters, p); */
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 /*     /\* --boolopt *\/ */
00232 /*     p = cpl_parameter_new_value("midi.midi_kappamatrix.bool_option",  */
00233 /*             CPL_TYPE_BOOL, "a flag", "midi.midi_kappamatrix", TRUE); */
00234 /*     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "boolopt"); */
00235 /*     cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); */
00236 /*     cpl_parameterlist_append(recipe->parameters, p); */
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     /* Return immediately if an error code is already set */               
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     /* Verify plugin type */                                               
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     /* Get the recipe */                                                   
00274     recipe = (cpl_recipe *)plugin;                                         
00275                                                                            
00276     /* Verify parameter and frame lists */                                 
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     /* Invoke the recipe */                                                
00287     recipe_status = midi_kappamatrix(recipe->frames, recipe->parameters);
00288                                                                            
00289     /* Ensure DFS-compliance of the products */                            
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         /* Dump the error history since recipe execution start.            
00296            At this point the recipe cannot recover from the error */       
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     /* Verify plugin type */                                      
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     /* Get the recipe */                                          
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 /*   cpl_matrix            * kernel ;   */
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 /*    cpl_imagelist * imglst_AOPEN_DATA1_S; */
00498 /*    cpl_imagelist * imglst_AOPEN_DATA1_T; */
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 /*    cpl_imagelist * imglst_BOPEN_DATA4_S; */
00513 /*    cpl_imagelist * imglst_BOPEN_DATA4_T; */
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    /* Check if SOF is empty */
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 /*    imglst_AOPEN_DATA1_S=cpl_imagelist_new(); */
00531 /*    imglst_AOPEN_DATA1_T=cpl_imagelist_new(); */
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 /*    imglst_BOPEN_DATA4_S=cpl_imagelist_new(); */
00546 /*    imglst_BOPEN_DATA4_T=cpl_imagelist_new(); */
00547 
00548    imglst_mask_prism=cpl_imagelist_new();
00549    imglst_mask_grism=cpl_imagelist_new();
00550 
00551    
00552    
00553    /* RETRIEVE THE INPUT PARAMETERS */
00554 /*    param = cpl_parameterlist_find_const(parlist, "midi.midi_kappamatrix.outputfilename"); */
00555 /*    outputfilename = cpl_parameter_get_string(param); */
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)/*  even number  */
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    /* Identify the RAW and CALIB frames in the input frameset */
00589    cpl_ensure_code(midi_dfs_set_groups(frameset) == CPL_ERROR_NONE,
00590                    cpl_error_get_code());
00591    
00592    
00593    /* 
00594       Walk through the whole Set of Frames SOF and search for KAPPA_SP_SCIENCE and/or KAPPA_SP_CALIB 
00595    */
00596    
00597    
00598    
00599 /*    Start  1   */
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    /* Append the images from the tables to the various imagelists */     
00607    while(cur_frame)
00608    {
00609       /*      Check the right tags */
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 /*       Check if the file is AOPEN or BOPEN */
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 /*       Checking if PRISM or GRISM */
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 /*          PhotA Data found */
00640          isPHOTAdata=1;
00641          
00642          /* Load extension  Imaging Data  */ 
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 /*          No Signal in DATA1 for AOPEN */
00651          
00652          /*         cpl_msg_info(cpl_func, "Scanning for DATA2 ..."); */
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 /*          cpl_msg_info(cpl_func, "Scanning for DATA3 ..."); */
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 /*          cpl_msg_info(cpl_func, "Scanning for DATA4 ..."); */
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 /*          PhotB Data found */
00675          isPHOTBdata=1;
00676          
00677          /* Load extension  Imaging Data  */ 
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          /*         cpl_msg_info(cpl_func, "Scanning for DATA1 ..."); */
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 /*          cpl_msg_info(cpl_func, "Scanning for DATA2 ..."); */
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 /*          cpl_msg_info(cpl_func, "Scanning for DATA3 ..."); */
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 /*          No Signal in DATA4 for BOPEN */
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       /* Get next frame from SOF */
00715       cur_frame = cpl_frameset_get_next( frameset );   
00716       
00717    } /* while more frames */
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 /*    Subtract the sky frame from the target frame*/
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 /*    Collapse the sky-subtracted targets */
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 /*    END  1   */
00778    
00779    
00780 /* Extract the masks from the table and store them in a cpl_image */
00781    
00782 /*    The masks are stored in the two imagelists imglst_mask_grism and imglst_mask_prism */
00783 /*    !! DATA1 is read twice, therefore DATA1 is stored in imglst_mask_grism[1] and so on !! */
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       /*      Check the right tags */
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 /* Normalizing the mask to 1*/
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 /* Normalizing the mask to 1*/
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       /* Get next frame from SOF */
00982       cur_frame = cpl_frameset_get_next( frameset );   
00983       
00984    } /* while more frames */
00985 
00986 
00987 /*  Check if the mask is the right one    */
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 /* Multiply the image by the mask and collapse in the y-direction */
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 /*    Multiply the images by the Mask */
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 /*   Collapse the images in the y-direction */
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 /* Derive P^2 following Horne et al. */
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 /* Summing up P^2 in y direction*/
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 /* Free the memory */
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 /* Free the memory */
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 /*    Multiply the images by the Mask */
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 /*   Collapse the images in the y-direction */
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 /* Derive P^2 following Horne et al. */
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 /* Summing up P^2 in y direction*/
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 /* Free the memory */
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 /* Free the memory */
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 /* Derive the Kappa matrix as defined in the VINCI paper (A&A 425 1161)  */
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 /* Free the memory */
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 /* Smooth the kappa matrix */
01185 
01186 /* Create the kernel */
01187 
01188 
01189 /*
01190 kernel = cpl_matrix_new(1, medianwindow);
01191 cpl_matrix_fill(kernel, 1.0);
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 kappamatrix11_filtered=cpl_image_filter_median(kappamatrix11, kernel);
01214 kappamatrix12_filtered=cpl_image_filter_median(kappamatrix12, kernel);
01215 kappamatrix21_filtered=cpl_image_filter_median(kappamatrix21, kernel);
01216 kappamatrix22_filtered=cpl_image_filter_median(kappamatrix22, kernel);
01217 */
01218 
01219 
01220 /* Deriving QC Parameters  */
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    /* Derives the standard deviation */
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    /* Derives the median */
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     /* Save the KAPPA matrix(es) and add QC parameters  */
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    /* Adding the standard median */
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    /* Adding the standard deviation */
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    /* Propagate the error */
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    /* Propagate the error */
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    /* Propagate the error */
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    /* Propagate the error */
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    /* Propagate the error */
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    /* Propagate the error */
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    /* Propagate the error */
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    /* Propagate the error */
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    /* Propagate the error */
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    /* Propagate the error */
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    /* Propagate the error */
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    /* Propagate the error */
01446    (void)cpl_error_set_where(cpl_func);
01447 }
01448 
01449 
01450 /* Save it to a fits table */
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 /* Propertylist to write to the extension */
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 /* Save it to an ascii file */
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 /* Free the memory */
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 /*cpl_matrix_delete(kernel) ;*/
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    /* Load extension  Imaging Data  */ 
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    /* Read target type T(arget),S(ky),B(ackground) and store them in the image list */
01637    /* Loop over all "images" stored in DATA and add them to the imagelist */
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 /*    cpl_msg_info(cpl_func, "Number of images in the Table: %d",cpl_table_get_nrow(table)); */
01651 /*    cpl_msg_info(cpl_func, "Extracting %d images: please wait ...",cpl_table_get_nrow(table)); */
01652    
01653    
01654    ctype=cpl_table_get_column_type(table, columname);   
01655 /*    cpl_msg_info(cpl_func, "Type of the table column: %d",ctype); */
01656 
01657 
01658 
01659    csky=cpl_imagelist_get_size(imglst_sky);
01660    
01661    ctarget=cpl_imagelist_get_size(imglst_target);
01662    
01663 /*    cpl_msg_info(cpl_func, "Length of imagelist S T : %d %d",csky,ctarget ); */
01664 
01665 
01666 
01667    flag_issky=0;
01668    flag_istarget=0;
01669 
01670 /* Find the first "U" image and discard the images befor  */
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 /*    cpl_msg_info(cpl_func, "First unknown: %d",first_unknown); */
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       /* Cast the image to float */
01691 /*       image_data=cpl_image_cast(image_data_int, CPL_TYPE_FLOAT); */
01692       
01693 /*        Append the image to the imagelists */
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       /*Unwrap processed image manualy if nor Target nor Sky*/
01709       if(image_data_int!=NULL){
01710          cpl_image_unwrap(image_data_int);
01711       }
01712       if(flag_issky >0 && flag_istarget >0){
01713          /*Collapse the temporary imagelist and add the image to the "final" imagelist */
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          /*Empty imagelist and free the image buffer*/
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 /*          Empty imagelist and free the image buffer*/
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    /* Load extension  Imaging Data  */ 
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    /* Read target type T(arget),S(ky),B(ackground) and store them in the image list */
01777    /* Loop over all "images" stored in DATA and add them to the imagelist */
01778    
01779    
01780 /*    cpl_msg_info(cpl_func, "Number of images in the Table: %d",cpl_table_get_nrow(table)); */
01781 /*    cpl_msg_info(cpl_func, "Extracting %d images: please wait ...",cpl_table_get_nrow(table)); */
01782    
01783    
01784    ctype=cpl_table_get_column_type(table, columname);   
01785 /*    cpl_msg_info(cpl_func, "Type of the table column: %d",ctype); */
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       /* Cast the image to float */
01802 /*       image_data=cpl_image_cast(image_data_int, CPL_TYPE_FLOAT); */
01803       
01804 /*        Append the image to the imagelists */
01805       
01806       cpl_imagelist_set(imglst,cpl_image_cast(image_data_int, CPL_TYPE_FLOAT),counter++);
01807 
01808       /*Unwrap processed image manualy if nor Target nor Sky*/
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 

Generated on 5 Mar 2013 for MIDI Pipeline Reference Manual by  doxygen 1.6.1