utl_genlookup.c

00001 /* $Id: utl_genlookup.c,v 1.2 2005/03/18 14:06:26 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/03/18 14:06:26 $
00024  * $Revision: 1.2 $
00025  * $Name:  $
00026  */
00027 
00028 
00029 /*-----------------------------------------------------------------------------
00030                                 Includes
00031  -----------------------------------------------------------------------------*/
00032 
00033 
00034 #include "utl_genlookup.h"
00035 #include <eclipse.h>
00036 #include <spectrum_ops.h>
00037 #include "sinfoni_key_names.h"
00038 
00039 /*-----------------------------------------------------------------------------
00040                             Functions prototypes
00041  -----------------------------------------------------------------------------*/
00042 /*-----------------------------------------------------------------------------
00043                             Static variables
00044  -----------------------------------------------------------------------------*/
00045 
00046 
00047 /*-----------------------------------------------------------------------------
00048                                 Functions code
00049  -----------------------------------------------------------------------------*/
00050 
00051 /*----------------------------------------------------------------------------*/
00058 /*----------------------------------------------------------------------------*/
00059 int si_utl_genlookup(
00060         cpl_parameterlist   *   parlist, 
00061         cpl_frameset        *   framelist)
00062 {
00063     const char          *   fctid = "si_utl_genlookup" ;
00064     cpl_parameter       *   param =NULL;
00065     char          *   name_o=NULL ;
00066     char          *   name_o1=NULL ;
00067     char          *   name_o2=NULL ;
00068     char          *   name_o3=NULL ;
00069     char          *   name_o4=NULL ;
00070     char          *   name1=NULL ;
00071     char          *   name2=NULL ;
00072 
00073     double                     value ;
00074     cpl_frame           *   frm_cube1=NULL ;
00075     cpl_frame           *   frm_cube2=NULL ;
00076 
00077     cpl_propertylist    *   plist ;
00078     cpl_image           *   image ;
00079     cpl_frame           *   product_frame;
00080 
00081     
00082     OneCube * iCube;
00083     OneCube * jCube;
00084     Lookup * lookup;
00085     int rc=0;
00086 
00087     /* HOW TO RETRIEVE INPUT PARAMETERS */
00088     param = cpl_parameterlist_find(parlist, "sinfoni.si_utl_genlookup.name_o");
00089     name_o = (char*) cpl_parameter_get_string(param);
00090 
00091     /* --doubleopt */
00092     param = cpl_parameterlist_find(parlist,"sinfoni.si_utl_genlookup.value");
00093     value = cpl_parameter_get_double(param) ;
00094   
00095   
00096     /* HOW TO ACCESS INPUT DATA */
00097     if ((frm_cube1 = cpl_frameset_find(framelist, SI_UTL_GENLOOKUP_CUBE1))==NULL) {
00098         cpl_msg_error(fctid, "SOF does not have a file tagged as %s",SI_UTL_GENLOOKUP_CUBE1);
00099         return -1 ;
00100     }
00101     if ((frm_cube2 = cpl_frameset_find(framelist, SI_UTL_GENLOOKUP_CUBE1))==NULL) {
00102         cpl_msg_error(fctid, "SOF does not have a file tagged as %s",SI_UTL_GENLOOKUP_CUBE1);
00103         return -1 ;
00104     }
00105 
00106     /* Now performing the data reduction */
00107     /* Let's generate one image for the example */
00108     name1 = (char*)cpl_frame_get_filename(frm_cube1);
00109     name2 = (char*)cpl_frame_get_filename(frm_cube2);
00110 
00111 
00112     iCube = load_cube(name1);
00113     jCube = load_cube(name2);
00114 
00115     lookup = newLookup();
00116 
00117     lookup->id = iCube;
00118     lookup->jd = jCube;
00119 
00120     rc = cCreateXYZ (lookup);
00121   
00122     name_o1=strcat(name_o,"X.fits");
00123     name_o2=strcat(name_o,"Y.fits");
00124     name_o3=strcat(name_o,"Z.fits");
00125     name_o4=strcat(name_o,"cX.fits");
00126 
00127     save_image_to_fits ( lookup->X , name_o1, -32 );    
00128     save_image_to_fits ( lookup->Y , name_o2, -32 );    
00129     save_image_to_fits ( lookup->Z , name_o3, -32 );    
00130     save_image_to_fits ( lookup->hX, name_o4, -32 );    
00131 
00132     destroy_cube(iCube);
00133     destroy_cube(jCube);
00134 
00135     destroy_image(lookup->X);
00136     destroy_image(lookup->Y);
00137     destroy_image(lookup->Z);
00138     destroy_image(lookup->hX);
00139 
00140     destroyLookup(lookup);
00141 
00142 
00143     
00144     /* HOW TO SAVE A PRODUCT ON DISK  */
00145     /* Set the file name */
00146 
00147     /* Create product frame */
00148     product_frame = cpl_frame_new();
00149     cpl_frame_set_filename(product_frame, name_o1) ;
00150     cpl_frame_set_tag(product_frame, SI_UTL_GENLOOKUP_PROIMA1) ;
00151     cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE) ;
00152     cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT) ;
00153     cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL) ;
00154     if (cpl_error_get_code()) {
00155         cpl_msg_error(fctid, "Error while initialising the product frame") ;
00156         cpl_propertylist_delete(plist) ;
00157         cpl_frame_delete(product_frame) ;
00158         cpl_image_delete(image) ;
00159         return -1 ;
00160     }
00161 
00162 
00163     product_frame = cpl_frame_new();
00164     cpl_frame_set_filename(product_frame, name_o2) ;
00165     cpl_frame_set_tag(product_frame, SI_UTL_GENLOOKUP_PROIMA2) ;
00166     cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE) ;
00167     cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT) ;
00168     cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL) ;
00169     if (cpl_error_get_code()) {
00170         cpl_msg_error(fctid, "Error while initialising the product frame") ;
00171         cpl_propertylist_delete(plist) ;
00172         cpl_frame_delete(product_frame) ;
00173         cpl_image_delete(image) ;
00174         return -1 ;
00175     }
00176 
00177 
00178     product_frame = cpl_frame_new();
00179     cpl_frame_set_filename(product_frame, name_o3) ;
00180     cpl_frame_set_tag(product_frame, SI_UTL_GENLOOKUP_PROIMA3) ;
00181     cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE) ;
00182     cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT) ;
00183     cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL) ;
00184     if (cpl_error_get_code()) {
00185         cpl_msg_error(fctid, "Error while initialising the product frame") ;
00186         cpl_propertylist_delete(plist) ;
00187         cpl_frame_delete(product_frame) ;
00188         cpl_image_delete(image) ;
00189         return -1 ;
00190     }
00191 
00192 
00193     product_frame = cpl_frame_new();
00194     cpl_frame_set_filename(product_frame, name_o4) ;
00195     cpl_frame_set_tag(product_frame, SI_UTL_GENLOOKUP_PROIMA4) ;
00196     cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE) ;
00197     cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT) ;
00198     cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL) ;
00199     if (cpl_error_get_code()) {
00200         cpl_msg_error(fctid, "Error while initialising the product frame") ;
00201         cpl_propertylist_delete(plist) ;
00202         cpl_frame_delete(product_frame) ;
00203         cpl_image_delete(image) ;
00204         return -1 ;
00205     }
00206     
00207 
00208     /* Add DataFlow keywords */
00209     if (cpl_dfs_setup_product_header(plist, product_frame, framelist, parlist,
00210             "si_utl_genlookup", "SINFONI", KEY_VALUE_HPRO_DID) != CPL_ERROR_NONE) {
00211         cpl_msg_error(fctid, "Problem in the product DFS-compliance") ;
00212         cpl_propertylist_delete(plist) ;
00213         cpl_frame_delete(product_frame) ;
00214         cpl_image_delete(image) ;
00215         return -1 ;
00216     }
00217     
00218     /* Save the file */
00219     if (cpl_image_save(image, name_o, CPL_BPP_DEFAULT, plist,
00220                        CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
00221         cpl_msg_error(fctid, "Could not save product");
00222         cpl_propertylist_delete(plist) ;
00223         cpl_frame_delete(product_frame) ;
00224         cpl_image_delete(image) ;
00225         return -1 ;
00226     }
00227     cpl_propertylist_delete(plist) ;
00228     cpl_image_delete(image) ;
00229 
00230     /* Log the saved file in the input frameset */
00231     cpl_frameset_insert(framelist, product_frame) ;
00232     
00233     /* Return */
00234     if (cpl_error_get_code()) 
00235         return -1 ;
00236     else 
00237         return 0 ;
00238 }

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