utl_spectrum_wavelength_shift.c

00001 /* $Id: utl_spectrum_wavelength_shift.c,v 1.1 2005/10/14 16:14:46 amodigli Exp $
00002  *
00003  * This file is part of the IIINSTRUMENT 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: amodigli $
00023  * $Date: 2005/10/14 16:14:46 $
00024  * $Revision: 1.1 $
00025  * $Name:  $
00026  */
00027 
00028 
00029 /*-----------------------------------------------------------------------------
00030                                 Includes
00031  -----------------------------------------------------------------------------*/
00032 
00033 
00034 #include "utl_spectrum_wavelength_shift.h"
00035 #include <eclipse.h>
00036 #include <spectrum_ops.h>
00037 #include "sinfoni_key_names.h"
00038 #include <sinfoni_memory.h>
00039 
00040 /*-----------------------------------------------------------------------------
00041                             Functions prototypes
00042  -----------------------------------------------------------------------------*/
00043 /*-----------------------------------------------------------------------------
00044                             Static variables
00045  -----------------------------------------------------------------------------*/
00046 
00047 
00048 /*-----------------------------------------------------------------------------
00049                                 Functions code
00050  -----------------------------------------------------------------------------*/
00051 
00052 /*----------------------------------------------------------------------------*/
00059 /*----------------------------------------------------------------------------*/
00060 int si_utl_spectrum_wavelength_shift(
00061         cpl_parameterlist   *   parlist, 
00062         cpl_frameset        *   framelist)
00063 {
00064     const char          *   fctid = "si_utl_spectrum_wavelength_shift" ;
00065     cpl_parameter       *   param =NULL;
00066     const char          *   method =NULL;
00067     const char          *   name_i =NULL;
00068     const char          *   name_o =NULL;
00069 
00070     double                  shift=0 ;
00071 
00072     cpl_frame           *   frm_spct=NULL ;
00073 
00074     cpl_propertylist    *   plist=NULL ;
00075     cpl_image           *   image   =NULL;
00076     cpl_image           *   image_w   =NULL;
00077 
00078     cpl_frame           *   product_frame=NULL;
00079     OneImage * image_o=NULL;
00080     OneImage * image_i=NULL;
00081     OneImage * image_s=NULL;
00082 
00083     double* sub_shift=NULL;
00084     /* double * ker=NULL; */
00085 
00086     /* HOW TO RETRIEVE INPUT PARAMETERS */
00087     /* --stropt */
00088     name_o = "out_ima.fits";
00089 
00090     /* --doubleopt */
00091     param = cpl_parameterlist_find(parlist, "sinfoni.si_utl_spectrum_arith.method");
00092     method = cpl_parameter_get_string(param);
00093 
00094 
00095     param = cpl_parameterlist_find(parlist,"sinfoni.si_utl_spectrum_wavelength_shift.shift");
00096     shift = cpl_parameter_get_double(param) ;
00097   
00098    
00099     /* HOW TO ACCESS INPUT DATA */
00100     if ((frm_spct = cpl_frameset_find(framelist, SI_UTL_SPECTRUM_WAVELENGTH_SHIFT_SPECTRUM))==NULL) {
00101         cpl_msg_error(fctid, "SOF does not have a file tagged as %s",SI_UTL_SPECTRUM_WAVELENGTH_SHIFT_SPECTRUM);
00102         return -1 ;
00103     }
00104 
00105 
00106     if ((plist=cpl_propertylist_load(cpl_frame_get_filename(frm_spct), 
00107                     0)) == NULL) {
00108         cpl_msg_error(fctid, "Cannot read the FITS header") ;
00109         return -1 ;
00110     }
00111     /* Now performing the data reduction */
00112     /* Let's generate one image for the example */
00113     name_i = cpl_frame_get_filename(frm_spct);
00114     image_i= load_image ((char*)name_i);                                    
00115 
00116        sub_shift = new_double_array(1);
00117        doublearray_set_value(sub_shift, 0., 0);
00118        image_s = shiftImageInSpec (image_i, shift, sub_shift);
00119  
00120        if (image_s == NULL){
00121           cpl_msg_error(fctid,"error in shiftImageInSpec()");
00122           return -1;
00123        }
00124        shift = doublearray_get_value(sub_shift, 0);
00125  
00126        if (strcmp(method,"S")==0) {
00127            image_o = fineShiftImageInSpecCubicspline ( image_s, shift );
00128           if (image_o == NULL){
00129              cpl_msg_error(fctid,"error in fineShiftImageInSpecCubicSpline()");
00130              cpl_propertylist_delete(plist);
00131              return -1;
00132       }
00133        } else if (strcmp(method,"P")==0) {
00134           image_o = fineShiftImageInSpecPoly( image_s, shift, 2 );
00135           if (image_o == NULL) {
00136              cpl_msg_error(fctid,"error in fineShiftImageInSpecPoly()");
00137              destroy_doublearray(sub_shift);
00138              cpl_propertylist_delete(plist);
00139              return -1;
00140       }
00141       /*
00142        } else if (strcmp (method, "T")==0) {
00143       ker = generate_interpolation_kernel("tanh");
00144           image_o = shiftImage ( image_s, 0, shift, ker );
00145           if (image_o == NULL) {
00146              cpl_msg_error(fctid,"error in fineShiftImageInSpecPoly()");
00147              destroy_doublearray(sub_shift);
00148              cpl_propertylist_delete(plist);
00149              return -1;
00150       }
00151       */
00152           /* destroy_doublearray(ker); */
00153        }  else {
00154           cpl_msg_error(fctid,"wrong method %s",method);
00155           destroy_doublearray(sub_shift);
00156           cpl_propertylist_delete(plist);
00157           return -1;
00158        }
00159     
00160     /* HOW TO SAVE A PRODUCT ON DISK  */
00161     /* Set the file name */
00162     image_w=cpl_image_wrap_float(image_o->lx,image_o->ly,image_o->data);
00163     image=cpl_image_duplicate(image_w);
00164     cpl_image_unwrap(image_w);
00165 
00166     /* Create product frame */
00167     product_frame = cpl_frame_new();
00168     cpl_frame_set_filename(product_frame, name_o) ;
00169     cpl_frame_set_tag(product_frame, SI_UTL_SPECTRUM_WAVELENGTH_SHIFT_PROSPECTRUM) ;
00170     cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE) ;
00171     cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT) ;
00172     cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL) ;
00173     if (cpl_error_get_code()) {
00174         cpl_msg_error(fctid, "Error while initialising the product frame") ;
00175     cpl_propertylist_delete(plist) ;
00176         cpl_frame_delete(product_frame) ;
00177         cpl_image_delete(image) ;
00178     destroy_image(image_i);
00179     destroy_image(image_o);
00180     destroy_image(image_s);
00181     destroy_doublearray(sub_shift);
00182         sinfoni_memory_status();
00183         return -1 ;
00184     }
00185 
00186 
00187     /* Add DataFlow keywords */
00188     /*
00189     if (cpl_dfs_setup_product_header(plist, product_frame, framelist, parlist,
00190             "si_utl_spectrum_wavelength_shift", "SINFONI", KEY_VALUE_HPRO_DID) != CPL_ERROR_NONE) {
00191         cpl_msg_error(fctid, "Problem in the product DFS-compliance") ;
00192         cpl_propertylist_delete(plist) ;
00193         cpl_frame_delete(product_frame) ;
00194         cpl_image_delete(image) ;
00195         return -1 ;
00196     }
00197     */
00198    
00199     /* Save the file */
00200     if (cpl_image_save(image, name_o, CPL_BPP_DEFAULT, plist,
00201                        CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
00202         cpl_msg_error(fctid, "Could not save product");
00203         cpl_propertylist_delete(plist) ;
00204         cpl_frame_delete(product_frame) ;
00205         cpl_image_delete(image) ;
00206     destroy_image(image_i);
00207     destroy_image(image_o);
00208     destroy_image(image_s);
00209     destroy_doublearray(sub_shift);
00210         sinfoni_memory_status();
00211         return -1 ;
00212     }
00213     cpl_propertylist_delete(plist) ;
00214     cpl_image_delete(image) ;
00215 
00216 
00217 
00218     /* Log the saved file in the input frameset */
00219     cpl_frameset_insert(framelist, product_frame) ;
00220 
00221     destroy_image(image_i);
00222     destroy_image(image_o);
00223 
00224     destroy_image(image_s);
00225     destroy_doublearray(sub_shift);
00226     sinfoni_memory_status();
00227     /* Return */
00228     if (cpl_error_get_code()) 
00229         return -1 ;
00230     else 
00231         return 0 ;
00232 }

Generated on Wed Oct 26 13:08:56 2005 for SINFONI Pipeline Reference Manual by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001