midi_kappamatrix.c

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

Generated on 11 Feb 2011 for MIDI Pipeline Reference Manual by  doxygen 1.6.1