si_rec_utils.c

00001 /* $Id: si_rec_utils.c,v 1.5 2005/10/11 12:28:17 amodigli Exp $
00002  *
00003  * This file is part of the CPL (Common Pipeline Library)
00004  * Copyright (C) 2002 European Southern Observatory
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU Lesser General Public
00008  * License as published by the Free Software Foundation; either
00009  * version 2.1 of the License, or (at your option) any later version.
00010  *
00011  * This library 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 GNU
00014  * Lesser General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU Lesser General Public
00017  * License along with this library; if not, write to the Free Software
00018  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019  */
00020 /*
00021  * $Author: amodigli $
00022  * $Date: 2005/10/11 12:28:17 $
00023  * $Revision: 1.5 $
00024  * $Name:  $
00025  */
00026 
00027  /****************************************************************
00028   *           Object Data reduction                              *
00029   ****************************************************************/
00030 
00031 #ifdef HAVE_CONFIG_H
00032 #include <config.h>          /* allows the program compilation */
00033 #endif
00034 
00035 /*-----------------------------------------------------------------------------
00036                                 Includes
00037 -----------------------------------------------------------------------------*/
00038 #include "si_rec_utils.h"
00039 #include <sinfoni_memory.h>
00040 
00041 /*-----------------------------------------------------------------------------
00042                             Functions prototypes
00043  ----------------------------------------------------------------------------*/
00044 int
00045 stack_frames(cpl_parameterlist* cfg, cpl_frameset* set, const char* procatg,
00046              const int id, fake* fk, const char* plugin_id)
00047 {
00048   int ind=0;
00049   const char* _id="stack_frames";
00050     cpl_msg_info (_id,"------------------------------") ;
00051     cpl_msg_info (_id,"PREPARE STACKED SET %d",id) ;
00052     cpl_msg_info (_id,"------------------------------") ; 
00053         if ( -1 == (ind = prepare_stacked_frames(plugin_id,cfg, set, procatg,
00054                           id,fk)))
00055         {
00056       cpl_msg_error(_id," no: %d\n", ind) ;
00057           sinfoni_memory_status();
00058       return -1 ;
00059     }
00060     cpl_msg_info (_id,"------------------------------") ; 
00061     cpl_msg_info (_id,"PREPARED STACKED SET %d",id) ; 
00062     cpl_msg_info (_id,"------------------------------") ; 
00063         return 0;
00064 }
00065 
00066 cpl_frame*
00067 get_dummy_sky(cpl_frameset* obj_set)
00068 {
00069 
00070   cpl_imagelist* obj_list=NULL;
00071   cpl_image* fake_sky=NULL;
00072   char filename[FILE_NAME_SZ];
00073   cpl_frame* frame=NULL;
00074   cpl_frame* sky_frame=NULL;
00075 
00076   cpl_propertylist* plist=NULL;
00077   const char* _id="get_dummy_sky";
00078   obj_list = cpl_imagelist_load_frameset(obj_set,CPL_TYPE_FLOAT,0,0);
00079   fake_sky = cpl_imagelist_collapse_median_create(obj_list);
00080 
00081   frame = cpl_frameset_get_frame(obj_set,0);
00082   strcpy(filename,cpl_frame_get_filename(frame));
00083  
00084   if ((cpl_error_code)((plist = cpl_propertylist_load(filename, 0)) == NULL)) {
00085     cpl_msg_error(_id, "getting header from reference ima frame %s",filename);
00086     cpl_propertylist_delete(plist) ;
00087     return NULL ;
00088   }
00089 
00090   if (cpl_propertylist_contains(plist, KEY_NAME_DPR_TYPE)) {
00091     cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, "SKY");
00092   } else {
00093     cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,"SKY") ;
00094   }
00095        
00096   if (cpl_image_save(fake_sky, "fake_sky.fits", CPL_BPP_DEFAULT, 
00097                    plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
00098     cpl_msg_error(_id, "Cannot save the product %s","fake_sky.fits");
00099     cpl_propertylist_delete(plist) ;
00100     return NULL ;
00101   }
00102   cpl_propertylist_delete(plist);
00103        
00104   sky_frame = cpl_frame_new() ;
00105   cpl_frame_set_filename(sky_frame, "fake_sky.fits") ;
00106   cpl_frame_set_tag(sky_frame, PRO_SKY_DUMMY) ;
00107   cpl_frame_set_type(sky_frame, CPL_FRAME_TYPE_IMAGE);
00108   /*
00109   cpl_frame_set_group(sky_frame, CPL_FRAME_GROUP_PRODUCT);
00110   */
00111   cpl_frame_set_level(sky_frame, CPL_FRAME_LEVEL_FINAL);
00112   cpl_image_delete(fake_sky);
00113   cpl_imagelist_delete(obj_list);
00114 
00115   return sky_frame;
00116 }
00117 
00118 
00119 
00120 int
00121 get_dummy_obj_sky_stacked(cpl_frameset* obj_set,cpl_frameset** set, 
00122 cpl_parameterlist* config,fake* fk, char* pro_ctg, const char* plugin_id)
00123 {
00124   int nobj=0;
00125   int ncdb=0;
00126   int ntot=0;
00127   int nstk=0;
00128   int nwrk=0;
00129   int i=0;
00130   int k=0;
00131 
00132   double mjd_obj=0;
00133   double mjd_sky_inf=0;
00134   double mjd_sky_sup=0;
00135   char sky_name[FILE_NAME_SZ];
00136   char out_name[FILE_NAME_SZ];
00137 
00138   char fake_sky_name[FILE_NAME_SZ];
00139   const char* _id= "get_dummy_obj_sky_stacked";
00140 
00141   cpl_frame* obj_frm=NULL;
00142   cpl_frame* sky_frm=NULL;
00143   cpl_frame* cdb_frm=NULL;
00144   cpl_frame* wrk_frm=NULL;
00145   cpl_frame* tot_frm=NULL;
00146   cpl_frame* dup_frm=NULL;
00147 
00148   cpl_frame* sky_frm_inf=NULL;
00149   cpl_frame* sky_frm_sup=NULL;
00150 
00151   cpl_propertylist* plist=NULL;
00152   cpl_frameset* wrk_set=NULL;
00153   cpl_frameset* cdb_set=NULL;
00154   cpl_frameset* tot_set=NULL;
00155   cpl_frameset* stk_set=NULL;
00156   cpl_image* sky_ima=NULL;
00157 
00158 
00159   cdb_set=cpl_frameset_new();
00160   sinfoni_extract_mst_frames(*set,cdb_set);
00161   nobj=cpl_frameset_get_size(obj_set);
00162   ncdb=cpl_frameset_get_size(cdb_set);
00163 
00164 
00165   tot_set=cpl_frameset_new();
00166 
00167   for(i=0;i<nobj;i++) {
00168 
00169     obj_frm=cpl_frameset_get_frame(obj_set,i);
00170     /* cpl_msg_info(_id,"obj=%s",cpl_frame_get_filename(obj_frm)); */
00171     mjd_obj    = sinfoni_get_mjd_obs(obj_frm);
00172 
00173 
00174     if(i>0) {
00175        sky_frm_inf=cpl_frameset_get_frame(obj_set,i-1);
00176        mjd_sky_inf = sinfoni_get_mjd_obs(sky_frm_inf);
00177     }
00178 
00179     if(i<nobj-1) {
00180       sky_frm_sup=cpl_frameset_get_frame(obj_set,i+1);
00181       mjd_sky_sup = sinfoni_get_mjd_obs(sky_frm_sup);
00182     }
00183 
00184 
00185 
00186     if(i==0) {
00187          sky_frm = sky_frm_sup;
00188     }
00189     else if(i==(nobj-1)) {
00190          sky_frm = sky_frm_inf;
00191     } else {
00192        if( fabs( mjd_sky_inf - mjd_obj ) < 
00193            fabs( mjd_sky_sup - mjd_obj ) ) {
00194          sky_frm = sky_frm_inf;
00195        } else {
00196          sky_frm = sky_frm_sup;
00197        }
00198     }  
00199     /*
00200     printf("sky=%s\n",cpl_frame_get_filename(sky_frm));
00201     */
00202     strcpy(sky_name,cpl_frame_get_filename(sky_frm));
00203 
00204     if (strstr(sky_name, "." ) != NULL ) {
00205       /*sprintf(fake_sky_name,"%s%s","fake_",basename(sky_name)); */
00206       sprintf(fake_sky_name,"%s%d%s","fake_sky",i,".fits");
00207     } else {
00208        sprintf(fake_sky_name, sky_name) ;
00209     }
00210 
00211     sky_ima=cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0);
00212 
00213     if ((cpl_error_code)((plist = cpl_propertylist_load(sky_name, 0))==NULL)){
00214       cpl_msg_error(_id,"getting header from reference ima frame %s",sky_name);
00215       cpl_propertylist_delete(plist) ;
00216       return -1 ;
00217     }
00218 
00219     if (cpl_propertylist_contains(plist, KEY_NAME_DPR_TYPE)) {
00220       cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, "SKY");
00221     } else {
00222       cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,"SKY") ;
00223     }
00224 
00225     if (cpl_image_save(sky_ima, fake_sky_name, CPL_BPP_DEFAULT, 
00226                plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
00227       cpl_msg_error(_id, "Cannot save the product %s",fake_sky_name);
00228       cpl_propertylist_delete(plist) ;
00229       return -1;
00230     }
00231     cpl_propertylist_delete(plist);
00232     cpl_image_delete(sky_ima);
00233 
00234 
00235     cpl_frame_set_filename(sky_frm, fake_sky_name) ;
00236     /* The following makes program crash
00237        cpl_frame_set_tag(sky_frm, PRO_SKY_DUMMY) ; 
00238     */
00239     cpl_frame_set_type(sky_frm, CPL_FRAME_TYPE_IMAGE);
00240     /* cpl_frame_set_group(sky_frm, CPL_FRAME_GROUP_PRODUCT); */
00241     cpl_frame_set_level(sky_frm, CPL_FRAME_LEVEL_FINAL);
00242    
00243 
00244     wrk_set=cpl_frameset_new();
00245 
00246     dup_frm=cpl_frame_duplicate(obj_frm);
00247     cpl_frameset_insert(wrk_set,dup_frm);
00248 
00249 
00250 
00251     dup_frm=cpl_frame_duplicate(sky_frm);
00252     cpl_frameset_insert(wrk_set,dup_frm);
00253 
00254 
00255     for(k=0;k<ncdb;k++) {
00256       cdb_frm=cpl_frameset_get_frame(cdb_set,k);
00257       dup_frm=cpl_frame_duplicate(cdb_frm);
00258       cpl_frameset_insert(wrk_set,dup_frm);
00259     }
00260     sprintf(out_name,"%s%d%s","out_stack",i,".fits");
00261     nwrk=cpl_frameset_get_size(wrk_set);
00262 
00263 
00264     if(-1==stack_frames(config,wrk_set,pro_ctg,i,fk,plugin_id)) {
00265       cpl_msg_error(_id,"Error stacking frames");
00266       cpl_frameset_delete(wrk_set);
00267       cpl_frameset_delete(cdb_set);
00268       cpl_frameset_delete(tot_set);
00269 
00270       return -1;
00271     }
00272 
00273     cpl_frame_set_filename(sky_frm, sky_name) ;
00274     cpl_frame_set_tag(sky_frm, RAW_OBJECT_NODDING) ;
00275     stk_set=cpl_frameset_new();
00276     sinfoni_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
00277     nstk=cpl_frameset_get_size(stk_set);
00278     for(k=0;k<nstk;k++) {
00279       wrk_frm=cpl_frameset_get_frame(stk_set,k);
00280       dup_frm=cpl_frame_duplicate(wrk_frm);
00281       cpl_frameset_insert(tot_set,dup_frm);
00282     }
00283     cpl_frameset_delete(stk_set);
00284     cpl_frameset_delete(wrk_set);
00285 
00286   }
00287   ntot=cpl_frameset_get_size(tot_set);
00288   for(k=0;k<ntot;k++) {
00289     tot_frm=cpl_frameset_get_frame(tot_set,k);
00290     dup_frm=cpl_frame_duplicate(tot_frm);
00291     cpl_frameset_insert(*set,dup_frm);
00292   }
00293 
00294   cpl_frameset_delete(cdb_set);
00295   cpl_frameset_delete(tot_set);
00296     
00297   return 0;
00298 }

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