sinfo_rec_utils.c

00001 /* $Id: sinfo_rec_utils.c,v 1.4 2006/12/18 08:11:54 amodigli Exp $
00002  *
00003  * This file is part of the SINFONI 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  * $Author: amodigli $
00022  * $Date: 2006/12/18 08:11:54 $
00023  * $Revision: 1.4 $
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 <stdio.h>
00039 #include <sinfo_rec_utils.h>
00040 #include <sinfo_functions.h>
00041 #include <sinfo_new_cubes_build.h>
00042 #include <sinfo_error.h>
00043 #include <sinfo_globals.h>
00044 #include <sinfo_utils_wrappers.h>
00045 /*-----------------------------------------------------------------------------
00046                             Functions prototypes
00047  ----------------------------------------------------------------------------*/
00048 /*---------------------------------------------------------------------------*/
00052 /*---------------------------------------------------------------------------*/
00054 static const char* sinfo_new_set_stk_procatg(const char* tag);
00055 /*
00056 static int 
00057 sinfo_get_obj_sky_frm_pair(cpl_frameset** obj_set,
00058                            const int i, 
00059                            cpl_frame** obj_frm, 
00060                            cpl_frame** sky_frm);
00061 */
00062 
00063 /*-----------------------------------------------------------------------------
00064                             Static variables
00065  ----------------------------------------------------------------------------*/
00066 
00067 /*-----------------------------------------------------------------------------
00068                                 Functions code
00069  ----------------------------------------------------------------------------*/
00070 
00071 int
00072 sinfo_new_stack_frames(cpl_parameterlist* cfg, 
00073                        cpl_frameset* set, 
00074                        const char* procatg,
00075                        const int id, 
00076                        fake* fk, 
00077                        const char* plugin_id)
00078 {
00079   int ind=0;
00080   sinfo_msg("------------------------------") ;
00081   sinfo_msg("PREPARE STACKED SET %d",id) ;
00082   sinfo_msg("------------------------------") ; 
00083   ck0(ind=sinfo_new_prepare_stacked_frames(plugin_id,cfg, set, procatg,
00084                        id,fk)," no: %d", ind) ;
00085   sinfo_msg("------------------------------") ;
00086   sinfo_msg("PREPARED STACKED SET %d",id) ; 
00087   sinfo_msg("------------------------------") ; 
00088   return 0;
00089 
00090  cleanup:
00091   return -1;
00092 
00093 }
00094 
00095 cpl_frame*
00096 sinfo_new_get_dummy_sky(cpl_frameset* obj_set)
00097 {
00098 
00099   cpl_imagelist* obj_list=NULL;
00100   cpl_image* fake_sky=NULL;
00101   cpl_frame* frame=NULL;
00102   cpl_frame* sky_frame=NULL;
00103 
00104   cpl_propertylist* plist=NULL;
00105   char filename[FILE_NAME_SZ];
00106 
00107   check_nomsg(obj_list=cpl_imagelist_load_frameset(obj_set,CPL_TYPE_FLOAT,0,0));
00108   check_nomsg(fake_sky = cpl_imagelist_collapse_median_create(obj_list));
00109 
00110   check_nomsg(frame = cpl_frameset_get_frame(obj_set,0));
00111   strcpy(filename,cpl_frame_get_filename(frame));
00112  
00113   check(plist = cpl_propertylist_load(filename, 0),
00114     "getting header from reference ima frame %s",filename);
00115 
00116   if (cpl_propertylist_contains(plist, KEY_NAME_DPR_TYPE)) {
00117     cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, "SKY");
00118   } else {
00119     cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,"SKY") ;
00120   }
00121        
00122   check(cpl_image_save(fake_sky, "out_fake_sky.fits", CPL_BPP_DEFAULT, 
00123                plist,CPL_IO_DEFAULT),
00124     "Cannot save the product %s","out_fake_sky.fits");
00125 
00126   sinfo_free_propertylist(&plist);
00127        
00128   check_nomsg(sky_frame = cpl_frame_new()) ;
00129   check_nomsg(cpl_frame_set_filename(sky_frame, "out_fake_sky.fits")) ;
00130   check_nomsg(cpl_frame_set_tag(sky_frame, PRO_SKY_DUMMY)) ;
00131   check_nomsg(cpl_frame_set_type(sky_frame, CPL_FRAME_TYPE_IMAGE));
00132   /*
00133   check_nomsg(cpl_frame_set_group(sky_frame, CPL_FRAME_GROUP_PRODUCT));
00134   */
00135   check_nomsg(cpl_frame_set_level(sky_frame, CPL_FRAME_LEVEL_FINAL));
00136   sinfo_free_image(&fake_sky);
00137   sinfo_free_imagelist(&obj_list);
00138 
00139   return sky_frame;
00140 
00141  cleanup:
00142 
00143   sinfo_free_propertylist(&plist) ;
00144 
00145   return NULL;
00146 
00147 }
00148 
00149 
00150 
00151 int
00152 sinfo_new_get_dummy_obj_sky_stacked(cpl_frameset* obj_set,cpl_frameset** set, 
00153 cpl_parameterlist* config,fake* fk, char* pro_ctg, const char* plugin_id)
00154 {
00155   int nobj=0;
00156   int ncdb=0;
00157   int ntot=0;
00158   int nstk=0;
00159   int nwrk=0;
00160   int i=0;
00161   int k=0;
00162 
00163   double mjd_obj=0;
00164   double mjd_sky_inf=0;
00165   double mjd_sky_sup=0;
00166   char sky_name[FILE_NAME_SZ];
00167   char out_name[FILE_NAME_SZ];
00168 
00169   char fake_sky_name[FILE_NAME_SZ];
00170 
00171   cpl_frame* obj_frm=NULL;
00172   cpl_frame* sky_frm=NULL;
00173   cpl_frame* cdb_frm=NULL;
00174   cpl_frame* wrk_frm=NULL;
00175   cpl_frame* tot_frm=NULL;
00176   cpl_frame* dup_frm=NULL;
00177 
00178   cpl_frame* sky_frm_inf=NULL;
00179   cpl_frame* sky_frm_sup=NULL;
00180 
00181   cpl_propertylist* plist=NULL;
00182   cpl_frameset* wrk_set=NULL;
00183   cpl_frameset* cdb_set=NULL;
00184   cpl_frameset* tot_set=NULL;
00185   cpl_frameset* stk_set=NULL;
00186   cpl_image* sky_ima=NULL;
00187   double obj_cumx=0;
00188   double obj_cumy=0;
00189 
00190   double sky_sup_cumx=0;
00191   double sky_sup_cumy=0;
00192 
00193   double sky_inf_cumx=0;
00194   double sky_inf_cumy=0;
00195   double cum_thres=0.5;
00196 
00197   check_nomsg(cdb_set=cpl_frameset_new());
00198   ck0(sinfo_extract_mst_frames(*set,cdb_set),"Error extracting CDB frames");
00199   nobj=cpl_frameset_get_size(obj_set);
00200   ncdb=cpl_frameset_get_size(cdb_set);
00201 
00202 
00203   check_nomsg(tot_set=cpl_frameset_new());
00204 
00205   for(i=0;i<nobj;i++) {
00206  
00207   
00208    
00209    
00210     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
00211     mjd_obj    = sinfo_get_mjd_obs(obj_frm);
00212     obj_cumx=sinfo_get_cumoffsetx(obj_frm);
00213     obj_cumy=sinfo_get_cumoffsety(obj_frm);
00214 
00215     if(i>0) {
00216        check_nomsg(sky_frm_inf=cpl_frameset_get_frame(obj_set,i-1));
00217        mjd_sky_inf = sinfo_get_mjd_obs(sky_frm_inf);
00218        sky_inf_cumx=sinfo_get_cumoffsetx(sky_frm_inf);
00219        sky_inf_cumy=sinfo_get_cumoffsety(sky_frm_inf);
00220     }
00221 
00222     if(i<nobj-1) {
00223       check_nomsg(sky_frm_sup=cpl_frameset_get_frame(obj_set,i+1));
00224       mjd_sky_sup = sinfo_get_mjd_obs(sky_frm_sup);
00225       sky_sup_cumx=sinfo_get_cumoffsetx(sky_frm_sup);
00226       sky_sup_cumy=sinfo_get_cumoffsety(sky_frm_sup);
00227     }
00228 
00229 
00230 
00231     if(i==0) {
00232          sky_frm = sky_frm_sup;
00233     }
00234     else if(i==(nobj-1)) {
00235          sky_frm = sky_frm_inf;
00236     } else {
00237        if( fabs( mjd_sky_inf - mjd_obj ) < 
00238            fabs( mjd_sky_sup - mjd_obj ) ) {
00239          if((fabs(sky_inf_cumx-obj_cumx) > cum_thres) ||
00240             (fabs(sky_inf_cumy-obj_cumy) > cum_thres)) {
00241        sky_frm = sky_frm_inf;
00242      } else {
00243        sky_frm = sky_frm_sup; 
00244      }
00245        } else {
00246          if((fabs(sky_sup_cumx-obj_cumx) > cum_thres) ||
00247             (fabs(sky_sup_cumy-obj_cumy) > cum_thres)) {
00248        sky_frm = sky_frm_sup;
00249      } else {
00250        sky_frm = sky_frm_inf;
00251      }
00252        }
00253     } 
00254     
00255     strcpy(sky_name,cpl_frame_get_filename(sky_frm));
00256 
00257     sinfo_msg("obj: %s",cpl_frame_get_filename(obj_frm)); 
00258     sinfo_msg("sky: %s",sky_name);
00259 
00260     if (strstr(sky_name, "." ) != NULL ) {
00261       /*snprintf(fake_sky_name,MAX_NAME_SIZE-1,"%s%s","fake_",basename(sky_name)); */
00262       snprintf(fake_sky_name,MAX_NAME_SIZE-1,"%s%d%s","out_fake_sky",i,".fits");
00263     } else {
00264        snprintf(fake_sky_name, MAX_NAME_SIZE-1,sky_name) ;
00265     }
00266 
00267     check_nomsg(sky_ima=cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0));
00268 
00269     cknull(plist = cpl_propertylist_load(sky_name, 0),
00270       "getting header from reference ima frame %s",sky_name);
00271 
00272 
00273     if (cpl_propertylist_contains(plist, KEY_NAME_DPR_TYPE)) {
00274       cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, "SKY");
00275     } else {
00276       cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,"SKY") ;
00277     }
00278 
00279     check(cpl_image_save(sky_ima, fake_sky_name, CPL_BPP_DEFAULT, 
00280                    plist,CPL_IO_DEFAULT),
00281                 "Cannot save the product %s",fake_sky_name);
00282 
00283     sinfo_free_propertylist(&plist);
00284     sinfo_free_image(&sky_ima);
00285 
00286     check_nomsg(cpl_frame_set_filename(sky_frm, fake_sky_name)) ;
00287     /* The following makes program crash
00288        check_nomsg(cpl_frame_set_tag(sky_frm, PRO_SKY_DUMMY)) ; 
00289     */
00290     check_nomsg(cpl_frame_set_type(sky_frm, CPL_FRAME_TYPE_IMAGE));
00291     /* check_nomsg(cpl_frame_set_group(sky_frm, CPL_FRAME_GROUP_PRODUCT)); */
00292     check_nomsg(cpl_frame_set_level(sky_frm, CPL_FRAME_LEVEL_FINAL));
00293    
00294 
00295     check_nomsg(wrk_set=cpl_frameset_new());
00296 
00297     check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
00298     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
00299 
00300     check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
00301     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
00302 
00303 
00304     for(k=0;k<ncdb;k++) {
00305       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
00306       check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
00307       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
00308     }
00309     snprintf(out_name,MAX_NAME_SIZE-1,"%s%d%s","out_stack",i,".fits");
00310     nwrk=cpl_frameset_get_size(wrk_set);
00311 
00312 
00313     ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg,i,fk,plugin_id),
00314         "Error stacking frames");
00315 
00316     check_nomsg(cpl_frame_set_filename(sky_frm, sky_name)) ;
00317     /* This commented as was screwing up the catalogue.
00318     check_nomsg(cpl_frame_set_tag(sky_frm, RAW_OBJECT_NODDING)) ;
00319     */
00320     check_nomsg(stk_set=cpl_frameset_new());
00321     sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
00322     nstk=cpl_frameset_get_size(stk_set);
00323     for(k=0;k<nstk;k++) {
00324       check_nomsg(wrk_frm=cpl_frameset_get_frame(stk_set,k));
00325       check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
00326       check_nomsg(cpl_frameset_insert(tot_set,dup_frm));
00327     }
00328     sinfo_free_frameset(&stk_set);
00329     sinfo_free_frameset(&wrk_set);
00330 
00331   }
00332   ntot=cpl_frameset_get_size(tot_set);
00333   for(k=0;k<ntot;k++) {
00334     check_nomsg(tot_frm=cpl_frameset_get_frame(tot_set,k));
00335     check_nomsg(dup_frm=cpl_frame_duplicate(tot_frm));
00336     check_nomsg(cpl_frameset_insert(*set,dup_frm));
00337   }
00338 
00339   sinfo_free_frameset(&cdb_set);
00340   sinfo_free_frameset(&tot_set);
00341     
00342   return 0;
00343 
00344  cleanup:
00345   sinfo_free_propertylist(&plist) ;
00346   sinfo_free_frameset(&cdb_set);
00347   sinfo_free_frameset(&tot_set);
00348   return -1;
00349 
00350 }
00351 
00352 int
00353 sinfo_get_dummy_obj_sky_stacked_and_cubes(cpl_frameset* obj_set,
00354                                           cpl_frameset** set, 
00355                                           cpl_parameterlist* config,
00356                                           fake* fk, 
00357                                           char* pro_ctg, 
00358                                           const char* plugin_id)
00359 {
00360   int nobj=0;
00361   int ncdb=0;
00362   int nwrk=0;
00363   int i=0;
00364   int k=0;
00365   int ind=0;
00366 
00367   double mjd_obj=0;
00368   double mjd_sky_inf=0;
00369   double mjd_sky_sup=0;
00370   char sky_name[FILE_NAME_SZ];
00371   char out_name[FILE_NAME_SZ];
00372 
00373   char fake_sky_name[FILE_NAME_SZ];
00374 
00375   cpl_frame* obj_frm=NULL;
00376   cpl_frame* sky_frm=NULL;
00377   cpl_frame* cdb_frm=NULL;
00378   cpl_frame* dup_frm=NULL;
00379 
00380   cpl_frame* sky_frm_inf=NULL;
00381   cpl_frame* sky_frm_sup=NULL;
00382 
00383   cpl_propertylist* plist=NULL;
00384   cpl_frameset* wrk_set=NULL;
00385   cpl_frameset* cdb_set=NULL;
00386   cpl_frameset* tot_set=NULL;
00387   cpl_frameset* pro_set=NULL;
00388   cpl_image* sky_ima=NULL;
00389   double obj_cumx=0;
00390   double obj_cumy=0;
00391 
00392   double sky_sup_cumx=0;
00393   double sky_sup_cumy=0;
00394 
00395   double sky_inf_cumx=0;
00396   double sky_inf_cumy=0;
00397   double cum_thres=0.5;
00398 
00399   check_nomsg(cdb_set=cpl_frameset_new());
00400   ck0(sinfo_extract_mst_frames(*set,cdb_set),"Error extracting CDB frames");
00401   nobj=cpl_frameset_get_size(obj_set);
00402   ncdb=cpl_frameset_get_size(cdb_set);
00403   
00404 
00405   check_nomsg(tot_set=cpl_frameset_new());
00406  
00407   for(i=0;i<nobj;i++) {
00408 
00409     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
00410     mjd_obj    = sinfo_get_mjd_obs(obj_frm);
00411     obj_cumx=sinfo_get_cumoffsetx(obj_frm);
00412     obj_cumy=sinfo_get_cumoffsety(obj_frm);
00413 
00414     if(i>0) {
00415        check_nomsg(sky_frm_inf=cpl_frameset_get_frame(obj_set,i-1));
00416        mjd_sky_inf = sinfo_get_mjd_obs(sky_frm_inf);
00417        sky_inf_cumx=sinfo_get_cumoffsetx(sky_frm_inf);
00418        sky_inf_cumy=sinfo_get_cumoffsety(sky_frm_inf);
00419     }
00420 
00421     if(i<nobj-1) {
00422       check_nomsg(sky_frm_sup=cpl_frameset_get_frame(obj_set,i+1));
00423       mjd_sky_sup = sinfo_get_mjd_obs(sky_frm_sup);
00424       sky_sup_cumx=sinfo_get_cumoffsetx(sky_frm_sup);
00425       sky_sup_cumy=sinfo_get_cumoffsety(sky_frm_sup);
00426     }
00427 
00428 
00429 
00430     if(i==0) {
00431          sky_frm = sky_frm_sup;
00432     }
00433     else if(i==(nobj-1)) {
00434          sky_frm = sky_frm_inf;
00435     } else {
00436        if( fabs( mjd_sky_inf - mjd_obj ) < 
00437            fabs( mjd_sky_sup - mjd_obj ) ) {
00438          if((fabs(sky_inf_cumx-obj_cumx) > cum_thres) ||
00439             (fabs(sky_inf_cumy-obj_cumy) > cum_thres)) {
00440        sky_frm = sky_frm_inf;
00441      } else {
00442        sky_frm = sky_frm_sup; 
00443      }
00444        } else {
00445          if((fabs(sky_sup_cumx-obj_cumx) > cum_thres) ||
00446             (fabs(sky_sup_cumy-obj_cumy) > cum_thres)) {
00447        sky_frm = sky_frm_sup;
00448      } else {
00449        sky_frm = sky_frm_inf;
00450      }
00451        }
00452     } 
00453   
00454  
00455     strcpy(sky_name,cpl_frame_get_filename(sky_frm));
00456     sinfo_msg("obj: %s",cpl_frame_get_filename(obj_frm)); 
00457     sinfo_msg("sky: %s",sky_name);
00458     if (strstr(sky_name, "." ) != NULL ) {
00459       /*snprintf(fake_sky_name,MAX_NAME_SIZE-1,"%s%s","fake_",basename(sky_name)); */
00460       snprintf(fake_sky_name,MAX_NAME_SIZE-1,"%s%d%s","out_fake_sky",i,".fits");
00461     } else {
00462        snprintf(fake_sky_name, MAX_NAME_SIZE-1,sky_name) ;
00463     }
00464 
00465     check_nomsg(sky_ima=cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0));
00466 
00467     cknull(plist = cpl_propertylist_load(sky_name, 0),
00468       "getting header from reference ima frame %s",sky_name);
00469 
00470 
00471     if (cpl_propertylist_contains(plist, KEY_NAME_DPR_TYPE)) {
00472       cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, "SKY");
00473     } else {
00474       cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,"SKY") ;
00475     }
00476 
00477     check(cpl_image_save(sky_ima, fake_sky_name, CPL_BPP_DEFAULT, 
00478                    plist,CPL_IO_DEFAULT),
00479                 "Cannot save the product %s",fake_sky_name);
00480 
00481     sinfo_free_propertylist(&plist);
00482     sinfo_free_image(&sky_ima);
00483 
00484     check_nomsg(cpl_frame_set_filename(sky_frm, fake_sky_name)) ;
00485     /* The following makes program crash
00486        check_nomsg(cpl_frame_set_tag(sky_frm, PRO_SKY_DUMMY)) ; 
00487     */
00488     check_nomsg(cpl_frame_set_type(sky_frm, CPL_FRAME_TYPE_IMAGE));
00489     /* check_nomsg(cpl_frame_set_group(sky_frm, CPL_FRAME_GROUP_PRODUCT)); */
00490     check_nomsg(cpl_frame_set_level(sky_frm, CPL_FRAME_LEVEL_FINAL));
00491    
00492 
00493     check_nomsg(wrk_set=cpl_frameset_new());
00494 
00495     check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
00496     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
00497 
00498     check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
00499     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
00500 
00501     for(k=0;k<ncdb;k++) {
00502       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
00503       check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
00504       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
00505     }
00506     snprintf(out_name,MAX_NAME_SIZE-1,"%s%d%s","out_stack",i,".fits");
00507     nwrk=cpl_frameset_get_size(wrk_set);
00508 
00509 
00510     ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg,i,fk,plugin_id),
00511         "Error stacking frames");
00512 
00513 
00514     check_nomsg(cpl_frame_set_filename(sky_frm, sky_name)) ;
00515     /* This commented as was screwing up the catalogue.
00516     check_nomsg(cpl_frame_set_tag(sky_frm, RAW_OBJECT_NODDING)) ;
00517     */
00518     sinfo_msg("--------------------------------------");
00519     sinfo_msg("BUILDING CUBE %d",i);
00520     sinfo_msg("--------------------------------------");
00521 
00522     /* cube generation */
00523     ck0(ind=sinfo_new_cubes_build(plugin_id,config,wrk_set,pro_ctg,i),
00524     "GENERATING CUBE no. %d\n", ind) ;
00525     sinfo_msg("--------------------------------------");
00526     sinfo_msg("BUILT CUBE %d",i);
00527     sinfo_msg("--------------------------------------");
00528 
00529 
00530     check_nomsg(sinfo_extract_frames_group_type(wrk_set,&pro_set,
00531                                                 CPL_FRAME_GROUP_PRODUCT));
00532     check_nomsg(sinfo_frameset_merge(tot_set,pro_set));
00533     sinfo_free_frameset(&pro_set);
00534     sinfo_free_frameset(&wrk_set);
00535 
00536   } /* end loop over object frames */
00537 
00538   check_nomsg(sinfo_extract_frames_group_type(tot_set,&pro_set,
00539                                               CPL_FRAME_GROUP_PRODUCT));
00540   check_nomsg(sinfo_frameset_merge(*set,pro_set));
00541   sinfo_free_frameset(&pro_set);
00542   sinfo_free_frameset(&tot_set);
00543   sinfo_free_frameset(&cdb_set);
00544 
00545   return 0;
00546 
00547  cleanup:
00548   sinfo_free_image(&sky_ima);
00549   sinfo_free_propertylist(&plist) ;
00550   sinfo_free_frameset(&wrk_set);
00551   sinfo_free_frameset(&pro_set);
00552   sinfo_free_frameset(&cdb_set);
00553   sinfo_free_frameset(&tot_set);
00554   return -1;
00555 
00556 }
00557 
00558 
00559 int sinfo_new_sci_stk_frames(cpl_parameterlist* config,
00560                                  cpl_frameset** set,
00561                                  const char* recipe_id,
00562                                  const char** pro_ctg_cube)
00563 {
00564   char tag[FILE_NAME_SZ];
00565   char pro_ctg_stack[FILE_NAME_SZ];
00566   char outname[FILE_NAME_SZ];
00567   char filename[FILE_NAME_SZ];
00568 
00569 
00570   cpl_frameset * obj_set=NULL;
00571   cpl_frameset * sky_set=NULL;
00572   cpl_frameset * cdb_set=NULL;
00573   cpl_frameset * wrk_set=NULL;
00574   cpl_frameset * stk_set=NULL;
00575   cpl_frameset * tot_set=NULL;
00576   cpl_frame     * obj_frm=NULL; 
00577   cpl_frame    * sky_frm=NULL;
00578   cpl_frame    * cdb_frm=NULL;
00579   cpl_frame    * wrk_frm=NULL;
00580   cpl_frame    * dup_frm=NULL;
00581 
00582   int nsky=0;
00583   int nobj=0;
00584   int ncdb=0;
00585   int ntot=0;
00586   int nstk=0;
00587 
00588   int i=0;
00589   int j=0;
00590   int k=0;
00591   int aj_meth=0;
00592 
00593 
00594   double mjd_obj=0;
00595   double mjd_sky=0;
00596   double mjd_sky_frm=0;
00597   cpl_parameter* p=NULL;
00598   fake* fk=sinfo_fake_new();
00599 
00600   check_nomsg(obj_set=cpl_frameset_new());
00601   check_nomsg(sky_set=cpl_frameset_new());
00602   check_nomsg(cdb_set=cpl_frameset_new());
00603 
00604   sinfo_extract_obj_frames(*set,obj_set);
00605   sinfo_extract_sky_frames(*set,sky_set);
00606   sinfo_extract_mst_frames(*set,cdb_set);
00607 
00608 
00609   cknull(obj_frm = cpl_frameset_get_frame(obj_set,0),
00610          "No object frames in input set.");
00611 
00612   strcpy(tag,cpl_frame_get_tag(obj_frm));
00613   if(NULL!=sinfo_new_set_obj_procatg(tag)){
00614     *pro_ctg_cube=sinfo_new_set_obj_procatg(tag);
00615   } else {
00616     sinfo_msg_error("Frame tag %s not supported.",tag);
00617     goto cleanup;
00618   }
00619 
00620 
00621   if(NULL!=sinfo_new_set_stk_procatg(tag)){
00622     strcpy(pro_ctg_stack,sinfo_new_set_stk_procatg(tag));
00623   } else {
00624     sinfo_msg_error("Frame tag %s not supported.",tag);
00625     goto cleanup;
00626   }
00627 
00628   nobj=cpl_frameset_get_size(obj_set);
00629   nsky=cpl_frameset_get_size(sky_set);
00630   ncdb=cpl_frameset_get_size(cdb_set);
00631 
00632   if ((nobj==0) && (nsky==0)) {
00633     sinfo_msg_error("Empty input set");
00634     goto cleanup;
00635   }
00636 
00637  
00638   if ( (nobj != 0) && (nsky != 0) ) {
00639     /* We have either OBJ and SKY: we need to create OBJ-SKY pairs */
00640     sinfo_msg("------------------------------") ; 
00641     sinfo_msg("generates OBJ-SKY pairs");
00642     sinfo_msg("------------------------------") ; 
00643     check_nomsg(tot_set=cpl_frameset_new());
00644     check_nomsg(p=cpl_parameterlist_find(config,
00645                                          "sinfoni.objnod.autojitter_method"));
00646     check_nomsg(cpl_parameter_set_int(p,0));
00647 
00648 
00649 
00650     for (i=0;i<nobj;i++) {
00651 
00652        check_nomsg(wrk_set=cpl_frameset_new());
00653      
00654        check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
00655        mjd_obj=sinfo_get_mjd_obs(obj_frm);
00656        check_nomsg(sky_frm=cpl_frameset_get_frame(sky_set,0));
00657        mjd_sky=sinfo_get_mjd_obs(sky_frm);
00658        strcpy(filename,cpl_frame_get_filename(obj_frm));
00659 
00660 
00661        for (j=1;j<nsky;j++) {
00662           check_nomsg(mjd_sky_frm=sinfo_get_mjd_obs(
00663                                   cpl_frameset_get_frame(sky_set,j)));
00664           if(1000.*(mjd_sky_frm-mjd_obj)*(mjd_sky_frm-mjd_obj) <
00665              1000.*(mjd_sky-    mjd_obj)*(mjd_sky-    mjd_obj) ) {
00666          mjd_sky=mjd_sky_frm;
00667              check_nomsg(sky_frm=cpl_frameset_get_frame(sky_set,j));
00668       }
00669        }
00670    
00671        strcpy(filename,cpl_frame_get_filename(sky_frm));
00672 
00673 
00674 
00675        /* monitors whih obj-sky frames are inserted in each wrk_set */
00676        check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
00677        check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
00678        check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
00679        check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
00680 
00681        /* merged CDB frames to work set */
00682           for(k=0;k<ncdb;k++) {
00683             check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
00684             check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
00685         check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
00686       }
00687 
00688 
00689        /* defines a new name for the output stacked frame */ 
00690        snprintf(outname,MAX_NAME_SIZE-1,"%s%d%s","out_stack",i,".fits");
00691        ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,i,fk,recipe_id),
00692      "Cannot stack frames");
00693 
00694        check_nomsg(stk_set=cpl_frameset_new());
00695        sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
00696        nstk=cpl_frameset_get_size(stk_set);
00697 
00698        for(k=0;k<nstk;k++) {
00699          check_nomsg(wrk_frm=cpl_frameset_get_frame(stk_set,k));
00700          check_nomsg(dup_frm = cpl_frame_duplicate(wrk_frm));
00701      check_nomsg(cpl_frameset_insert(tot_set,dup_frm));
00702        }
00703        sinfo_free_frameset(&stk_set);
00704        sinfo_free_frameset(&wrk_set);
00705 
00706      }
00707 
00708     ntot=cpl_frameset_get_size(tot_set);
00709     for(k=0;k<ntot;k++) {
00710       check_nomsg(wrk_frm=cpl_frameset_get_frame(tot_set,k));
00711       check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
00712       check_nomsg(cpl_frameset_insert(*set,dup_frm));
00713     }
00714     sinfo_free_frameset(&tot_set);
00715 
00716   }
00717 
00718  if ( (nobj == 0) && (nsky != 0) ) {
00719 
00720      /* =============================================================== 
00721         SKY FRAMES STACKING 
00722         =============================================================== */
00723 
00724     {
00725     sinfo_msg("------------------------------") ; 
00726     sinfo_msg("SKY ONLY FRAMES DATA REDUCTION NOT SUPPORTED") ; 
00727     sinfo_msg("------------------------------") ; 
00728         goto cleanup;
00729     }    
00730 
00731   }
00732 
00733 
00734 
00735   if ( (nobj != 0) && (nsky == 0) ) {
00736 
00737      /* =============================================================== 
00738         OBJ FRAMES STACKING 
00739         =============================================================== */
00740     check_nomsg(p = cpl_parameterlist_find(config,
00741                                            "sinfoni.objnod.autojitter_method"));
00742     check_nomsg(aj_meth =  cpl_parameter_get_int(p));
00743     if(strcmp(pro_ctg_stack,PRO_PUPIL_LAMP_STACKED) == 0) {
00744 
00745       aj_meth = 0;
00746 
00747     }
00748 
00749     if(aj_meth == 2) {
00750 
00751       sinfo_msg("Dummy sky case");
00752       sinfo_msg("fake sky is coming from median of all objects"); 
00753       cknull(sky_frm = sinfo_new_get_dummy_sky(obj_set),
00754          "Problem to get dummy frame");
00755 
00756       sinfo_msg("------------------------------") ;
00757       sinfo_msg("generates OBJ-SKY pairs");
00758       sinfo_msg("------------------------------") ; 
00759       check_nomsg(tot_set=cpl_frameset_new());
00760 
00761       
00762       for (i=0;i<nobj;i++) {
00763 
00764     check_nomsg(wrk_set=cpl_frameset_new());
00765     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
00766         check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
00767     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
00768         check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
00769     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
00770     for(k=0;k<ncdb;k++) {
00771       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
00772           check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
00773       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
00774     }
00775  
00776     snprintf(outname,MAX_NAME_SIZE-1,"%s%d%s","out_stack",i,".fits");
00777         ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,
00778                                    i,fk,recipe_id),
00779                                    "Error Stacking frame %d",i);
00780 
00781     check_nomsg(stk_set=cpl_frameset_new());
00782     sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
00783     nstk=cpl_frameset_get_size(stk_set);
00784     for(k=0;k<nstk;k++) {
00785       check_nomsg(wrk_frm=cpl_frameset_get_frame(stk_set,k));
00786           check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
00787       check_nomsg(cpl_frameset_insert(tot_set,dup_frm));
00788     }
00789         sinfo_free_frameset(&stk_set);
00790         sinfo_free_frameset(&wrk_set);
00791 
00792       }
00793       check_nomsg(ntot=cpl_frameset_get_size(tot_set));
00794       for(k=0;k<ntot;k++) {
00795     check_nomsg(wrk_frm=cpl_frameset_get_frame(tot_set,k));
00796         check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
00797     check_nomsg(cpl_frameset_insert(*set,dup_frm));
00798       }
00799       sinfo_free_frameset(&tot_set);
00800       sinfo_free_frame(&sky_frm);
00801     
00802     } else if(aj_meth == 1 ) {
00803 
00804         sinfo_msg("Dummy obj-sky case");  
00805         sinfo_msg("fake sky is coming from each next object");  
00806 
00807     if(nobj > 1) {
00808       
00809        ck0(sinfo_new_get_dummy_obj_sky_stacked(obj_set,&(*set),config,
00810                            fk,pro_ctg_stack,recipe_id),
00811            "Found error to get obj-sky-stacked frame");
00812     } else {
00813       sinfo_msg("Only one object frame, no sky");
00814           ck0(sinfo_new_stack_frames(config,*set,pro_ctg_stack,0,fk,recipe_id),
00815               "Error stacking frame");
00816     }
00817 
00818     } else {
00819 
00820       sinfo_msg("------------------------------") ;
00821       sinfo_msg("staks each OBJECT ");
00822       sinfo_msg("------------------------------") ; 
00823       tot_set=cpl_frameset_new();
00824 
00825       for (i=0;i<nobj;i++) {
00826 
00827     check_nomsg(wrk_set=cpl_frameset_new());
00828     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
00829         check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
00830     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
00831     for(k=0;k<ncdb;k++) {
00832       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
00833           check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
00834       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
00835     }
00836 
00837  
00838     snprintf(outname,MAX_NAME_SIZE-1,"%s%d%s","out_stack",i,".fits");
00839         ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,
00840                                    i,fk,recipe_id),"Error stacking frame %d",i);
00841 
00842     check_nomsg(stk_set=cpl_frameset_new());
00843     sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
00844     check_nomsg(nstk=cpl_frameset_get_size(stk_set));
00845     for(k=0;k<nstk;k++) {
00846       check_nomsg(wrk_frm=cpl_frameset_get_frame(stk_set,k));
00847       check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
00848       check_nomsg(cpl_frameset_insert(tot_set,dup_frm));
00849     }
00850         sinfo_free_frameset(&stk_set);
00851         sinfo_free_frameset(&wrk_set);
00852 
00853       }
00854 
00855       check_nomsg(ntot=cpl_frameset_get_size(tot_set));
00856       for(k=0;k<ntot;k++) {
00857     check_nomsg(wrk_frm=cpl_frameset_get_frame(tot_set,k));
00858     check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
00859     check_nomsg(cpl_frameset_insert(*set,dup_frm));
00860       }
00861       sinfo_free_frameset(&tot_set);
00862     }
00863   }
00864 
00865   sinfo_free_frameset(&obj_set);
00866   sinfo_free_frameset(&sky_set);
00867   sinfo_free_frameset(&cdb_set);
00868   sinfo_fake_delete(&fk);
00869 
00870   return 0;
00871 
00872 
00873 
00874  cleanup:
00875 
00876     sinfo_free_frame(&sky_frm);
00877     sinfo_free_frameset(&wrk_set);
00878     sinfo_free_frameset(&tot_set);
00879     sinfo_free_frameset(&obj_set);
00880     sinfo_free_frameset(&sky_set);
00881     sinfo_free_frameset(&cdb_set);
00882     sinfo_fake_delete(&fk);
00883     return -1;
00884 
00885 }
00886 
00887 
00888 
00889 
00890 
00891 
00892 
00893 int sinfo_cub_stk_frames(cpl_parameterlist* config,
00894                                  cpl_frameset** set,
00895                                  const char* recipe_id,
00896                                  const char** pro_ctg_cube)
00897 {
00898   cpl_frame     * obj_frm=NULL; 
00899   char tag[FILE_NAME_SZ];
00900   char pro_ctg_stack[FILE_NAME_SZ];
00901   char outname[FILE_NAME_SZ];
00902   char filename[FILE_NAME_SZ];
00903 
00904 
00905   cpl_frameset * obj_set=NULL;
00906   cpl_frameset * sky_set=NULL;
00907   cpl_frameset * cdb_set=NULL;
00908   cpl_frameset * wrk_set=NULL;
00909   cpl_frameset * tot_set=NULL;
00910   cpl_frameset * pro_set=NULL;
00911   cpl_frame    * sky_frm=NULL;
00912   cpl_frame    * cdb_frm=NULL;
00913   cpl_frame    * dup_frm=NULL;
00914 
00915   int nsky=0;
00916   int nobj=0;
00917   int ncdb=0;
00918 
00919   int i=0;
00920   int j=0;
00921   int k=0;
00922   int aj_meth=0;
00923   int ind=0;
00924 
00925   double mjd_obj=0;
00926   double mjd_sky=0;
00927   double mjd_sky_frm=0;
00928   cpl_parameter* p=NULL;
00929   fake* fk=sinfo_fake_new();
00930 
00931   obj_set=cpl_frameset_new();
00932   sky_set=cpl_frameset_new();
00933   cdb_set=cpl_frameset_new();
00934 
00935   sinfo_extract_obj_frames(*set,obj_set);
00936   sinfo_extract_sky_frames(*set,sky_set);
00937   sinfo_extract_mst_frames(*set,cdb_set);
00938 
00939   cknull(obj_frm = cpl_frameset_get_frame(obj_set,0),
00940          "No object frames in input set.");
00941 
00942 
00943   strcpy(tag,cpl_frame_get_tag(obj_frm));
00944   if(NULL!=sinfo_new_set_obj_procatg(tag)){
00945     *pro_ctg_cube=sinfo_new_set_obj_procatg(tag);
00946   } else {
00947     sinfo_msg_error("Frame tag %s not supported.",tag);
00948     goto cleanup;
00949   }
00950 
00951 
00952   if(NULL!=sinfo_new_set_stk_procatg(tag)){
00953     strcpy(pro_ctg_stack,sinfo_new_set_stk_procatg(tag));
00954   } else {
00955     sinfo_msg_error("Frame tag %s not supported.",tag);
00956     goto cleanup;
00957   }
00958 
00959   nobj=cpl_frameset_get_size(obj_set);
00960   nsky=cpl_frameset_get_size(sky_set);
00961   ncdb=cpl_frameset_get_size(cdb_set);
00962 
00963   if ((nobj==0) && (nsky==0)) {
00964     sinfo_msg_error("Empty input set");
00965     goto cleanup;
00966   }
00967 
00968  
00969   if ( (nobj != 0) && (nsky != 0) ) {
00970     /* We have either OBJ and SKY: we need to create OBJ-SKY pairs */
00971     sinfo_msg("------------------------------") ; 
00972     sinfo_msg("generates OBJ-SKY pairs");
00973     sinfo_msg("------------------------------") ; 
00974     check_nomsg(tot_set=cpl_frameset_new());
00975     check_nomsg(p = cpl_parameterlist_find(config,
00976                                            "sinfoni.objnod.autojitter_method"));
00977     check_nomsg(cpl_parameter_set_int(p,0));
00978 
00979     for (i=0;i<nobj;i++) {
00980 
00981        cknull_nomsg(wrk_set=cpl_frameset_new());
00982        check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
00983        mjd_obj=sinfo_get_mjd_obs(obj_frm);
00984        check_nomsg(sky_frm=cpl_frameset_get_frame(sky_set,0));
00985        mjd_sky=sinfo_get_mjd_obs(sky_frm);
00986        strcpy(filename,cpl_frame_get_filename(obj_frm));
00987 
00988 
00989        for (j=1;j<nsky;j++) {
00990           mjd_sky_frm = sinfo_get_mjd_obs(cpl_frameset_get_frame(sky_set,j));
00991           if(1000.*(mjd_sky_frm-mjd_obj)*(mjd_sky_frm-mjd_obj) <
00992              1000.*(mjd_sky-    mjd_obj)*(mjd_sky-    mjd_obj) ) {
00993          mjd_sky=mjd_sky_frm;
00994              check_nomsg(sky_frm=cpl_frameset_get_frame(sky_set,j));
00995       }
00996        }
00997        strcpy(filename,cpl_frame_get_filename(sky_frm));
00998 
00999 
01000 
01001        /* monitors whih obj-sky frames are inserted in each wrk_set */
01002        cknull_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
01003        check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
01004        cknull_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
01005        check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
01006 
01007        /* merged CDB frames to work set */
01008           for(k=0;k<ncdb;k++) {
01009             check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
01010             check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
01011         check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
01012       }
01013 
01014 
01015        /* defines a new name for the output stacked frame */ 
01016        snprintf(outname,MAX_NAME_SIZE-1,"%s%d%s","out_stack",i,".fits");
01017        ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,i,fk,recipe_id),
01018        "Cannot stack frames");
01019  
01020        /* cube generation */
01021        ck0(ind=sinfo_new_cubes_build(recipe_id,config,wrk_set,
01022                      *pro_ctg_cube,i),
01023        "GENERATING CUBE no. %d\n", ind) ;
01024 
01025        check_nomsg(sinfo_extract_frames_group_type(wrk_set,
01026                                                    &pro_set,
01027                                                    CPL_FRAME_GROUP_PRODUCT));
01028        check_nomsg(sinfo_frameset_merge(tot_set,pro_set));
01029        sinfo_free_frameset(&pro_set);
01030        sinfo_free_frameset(&wrk_set);
01031 
01032 
01033     }
01034 
01035     check_nomsg(sinfo_extract_frames_group_type(tot_set,
01036                                                 &pro_set,
01037                                                 CPL_FRAME_GROUP_PRODUCT));
01038     check_nomsg(sinfo_frameset_merge(*set,pro_set));
01039     sinfo_free_frameset(&pro_set);
01040     sinfo_free_frameset(&tot_set);
01041 
01042   }
01043 
01044 
01045  if ( (nobj == 0) && (nsky != 0) ) {
01046 
01047      /* =============================================================== 
01048         SKY FRAMES STACKING 
01049         =============================================================== */
01050 
01051     {
01052     sinfo_msg("------------------------------") ; 
01053     sinfo_msg("SKY ONLY FRAMES DATA REDUCTION NOT SUPPORTED") ; 
01054     sinfo_msg("------------------------------") ; 
01055         goto cleanup;
01056     }    
01057 
01058 
01059   }
01060 
01061 
01062 
01063   if ( (nobj != 0) && (nsky == 0) ) {
01064 
01065      /* =============================================================== 
01066         OBJ FRAMES STACKING 
01067         =============================================================== */
01068       check_nomsg(p=cpl_parameterlist_find(config,
01069                                            "sinfoni.objnod.autojitter_method"));
01070       check_nomsg(aj_meth =  cpl_parameter_get_int(p));
01071       if(strcmp(pro_ctg_stack,PRO_PUPIL_LAMP_STACKED) == 0) {
01072 
01073     aj_meth = 0;
01074 
01075       }
01076 
01077     if(aj_meth == 2) {
01078 
01079       sinfo_msg("Dummy sky case"); 
01080       sinfo_msg("fake sky is coming from median of all objects"); 
01081       if( (sky_frm = sinfo_new_get_dummy_sky(obj_set)) == NULL) {
01082 
01083      sinfo_msg_error("Problem to get dummy frame");
01084 
01085     return -1;
01086 
01087       }
01088       sinfo_msg("------------------------------") ;
01089       sinfo_msg("generates OBJ-SKY pairs");
01090       sinfo_msg("------------------------------") ; 
01091       check_nomsg(tot_set=cpl_frameset_new());
01092 
01093       
01094       for (i=0;i<nobj;i++) {
01095 
01096     check_nomsg(wrk_set=cpl_frameset_new());
01097     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
01098         check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
01099     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
01100         check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
01101     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
01102     for(k=0;k<ncdb;k++) {
01103       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
01104           check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
01105       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
01106     }
01107  
01108     snprintf(outname,MAX_NAME_SIZE-1,"%s%d%s","out_stack",i,".fits");
01109         ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,
01110                                    i,fk,recipe_id),"Error Stacking frame %d",i);
01111 
01112 
01113         /* cube generation */
01114         ck0(ind=sinfo_new_cubes_build(recipe_id,config,wrk_set,
01115                       *pro_ctg_cube,i),
01116         "Error GENERATING CUBE no. %d\n", ind) ;
01117 
01118 
01119 
01120 
01121         check_nomsg(sinfo_extract_frames_group_type(wrk_set,
01122                                                     &pro_set,
01123                                                     CPL_FRAME_GROUP_PRODUCT));
01124         check_nomsg(sinfo_frameset_merge(tot_set,pro_set));
01125         sinfo_free_frameset(&pro_set);
01126         sinfo_free_frameset(&wrk_set);
01127 
01128 
01129       }
01130       check_nomsg(sinfo_extract_frames_group_type(tot_set,
01131                                                   &pro_set,
01132                                                   CPL_FRAME_GROUP_PRODUCT));
01133       check_nomsg(sinfo_frameset_merge(*set,pro_set));
01134       sinfo_free_frameset(&pro_set);
01135       sinfo_free_frameset(&tot_set);
01136       sinfo_free_frame(&sky_frm);
01137     } else if(aj_meth == 1 ) {
01138 
01139 
01140         sinfo_msg("Dummy obj-sky case");  
01141         sinfo_msg("fake sky is coming from each next object");  
01142 
01143     if(nobj > 1) {
01144      
01145       ck0(sinfo_get_dummy_obj_sky_stacked_and_cubes(obj_set,&(*set),config,
01146                           fk,pro_ctg_stack,recipe_id),
01147          "Found error to get obj-sky-stacked frame");
01148   
01149     } else {
01150       sinfo_msg("Only one object frame, no sky");
01151       check_nomsg(p=cpl_parameterlist_find(config,
01152             "sinfoni.sinfo_utl_skycor.rot_cor"));
01153       check_nomsg(cpl_parameter_set_bool(p,FALSE));
01154 
01155           ck0(sinfo_new_stack_frames(config,*set,pro_ctg_stack,0,fk,recipe_id),
01156               "Error stacking frame");
01157 
01158       /* cube generation */
01159       sinfo_msg("------------------------------") ;
01160       sinfo_msg("BUILDING CUBE %d",i);
01161       sinfo_msg("------------------------------") ; 
01162       ck0(sinfo_new_cubes_build(recipe_id,config,*set,*pro_ctg_cube,i),
01163           "Error GENERATING CUBE %d", i) ;
01164 
01165       sinfo_msg("------------------------------") ;
01166       sinfo_msg("BUILT CUBE %d",i);
01167       sinfo_msg("------------------------------") ; 
01168 
01169     }
01170 
01171     } else { /* aj_meth == 0 */
01172 
01173       sinfo_msg("------------------------------") ;
01174       sinfo_msg("staks each OBJECT ");
01175       sinfo_msg("------------------------------") ; 
01176       check_nomsg(tot_set=cpl_frameset_new());
01177 
01178       for (i=0;i<nobj;i++) {
01179 
01180     check_nomsg(wrk_set=cpl_frameset_new());
01181     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
01182         check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
01183     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
01184     for(k=0;k<ncdb;k++) {
01185       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
01186           check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
01187       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
01188     }
01189 
01190  
01191     snprintf(outname,MAX_NAME_SIZE-1,"%s%d%s","out_stack",i,".fits");
01192         ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,
01193                                    i,fk,recipe_id),"Error stacking frame %d",i);
01194 
01195 
01196         /* cube generation */
01197       sinfo_msg("------------------------------") ;
01198       sinfo_msg("BUILDING CUBE %d",i);
01199       sinfo_msg("------------------------------") ; 
01200         ck0(ind=sinfo_new_cubes_build(recipe_id,config,wrk_set,
01201                       *pro_ctg_cube,i),
01202         "Error GENERATING CUBE no. %d\n", ind) ;
01203 
01204       sinfo_msg("------------------------------") ;
01205       sinfo_msg("BUILT CUBE %d",i);
01206       sinfo_msg("------------------------------") ; 
01207         check_nomsg(sinfo_extract_frames_group_type(wrk_set,
01208                                                     &pro_set,
01209                                                     CPL_FRAME_GROUP_PRODUCT));
01210         check_nomsg(sinfo_frameset_merge(tot_set,pro_set));
01211         sinfo_free_frameset(&pro_set);
01212         sinfo_free_frameset(&wrk_set);
01213 
01214 
01215       }
01216 
01217 
01218      check_nomsg(sinfo_extract_frames_group_type(tot_set,
01219                                                  &pro_set,
01220                                                  CPL_FRAME_GROUP_PRODUCT));
01221      check_nomsg(sinfo_frameset_merge(*set,pro_set));
01222      sinfo_free_frameset(&pro_set);
01223      sinfo_free_frameset(&tot_set);
01224 
01225     }
01226   }
01227   sinfo_free_frameset(&obj_set);
01228   sinfo_free_frameset(&sky_set);
01229   sinfo_free_frameset(&cdb_set);
01230   sinfo_fake_delete(&fk);
01231 
01232   return 0;
01233 
01234  cleanup:
01235 
01236     sinfo_free_frameset(&wrk_set);
01237     sinfo_free_frameset(&tot_set);
01238     sinfo_free_frameset(&obj_set);
01239     sinfo_free_frameset(&sky_set);
01240     sinfo_free_frameset(&cdb_set);
01241     sinfo_fake_delete(&fk);
01242     return -1;
01243 
01244 
01245 }
01246 
01247 
01248 
01249 static const char* sinfo_new_set_stk_procatg(const char* tag)
01250 {
01251 
01252   const char* pro_ctg_stack=NULL;
01253 
01254   if(strstr(tag,"OBJ") != NULL) {
01255     pro_ctg_stack=PRO_OBJECT_NODDING_STACKED;
01256   } else if(strstr(tag,"PSF") != NULL) {
01257     pro_ctg_stack=PRO_PSF_CALIBRATOR_STACKED;
01258   } else if(strstr(tag,"STD") != NULL) {
01259     pro_ctg_stack=PRO_STD_NODDING_STACKED;
01260   } else if(strstr(tag,"PUPIL") != NULL) {
01261     pro_ctg_stack=PRO_PUPIL_LAMP_STACKED;
01262   } else {
01263     sinfo_msg_error("frame tag %s not supported",tag);
01264     return NULL;
01265   }
01266 
01267   return pro_ctg_stack;
01268 
01269 }
01270 const char* sinfo_new_set_obj_procatg(const char* tag)
01271 {
01272   const char* pro_ctg_cube=NULL;
01273 
01274   if(strstr(tag,"OBJ") != NULL) {
01275     pro_ctg_cube=PRO_COADD_OBJ;
01276   } else if(strstr(tag,"PSF") != NULL) {
01277     pro_ctg_cube=PRO_COADD_PSF;
01278   } else if(strstr(tag,"STD") != NULL) {
01279     pro_ctg_cube=PRO_COADD_STD;
01280   } else if(strstr(tag,"PUPIL") != NULL) {
01281     pro_ctg_cube=PRO_COADD_PUPIL;
01282   } else {
01283     sinfo_msg_error("frame tag %s not supported",tag);
01284     return NULL;
01285   }
01286 
01287   return pro_ctg_cube;
01288 
01289 }
01290 
01291 /*
01292 static int 
01293 sinfo_get_obj_sky_frm_pair(
01294 cpl_frameset** obj_set,
01295 const int i, 
01296 cpl_frame** obj_frm, 
01297 cpl_frame** sky_frm)
01298 {
01299   double mjd_obj=0;
01300   double mjd_sky_inf=0;
01301   double mjd_sky_sup=0;
01302 
01303 
01304   double obj_cumx=0;
01305   double obj_cumy=0;
01306 
01307   double sky_sup_cumx=0;
01308   double sky_sup_cumy=0;
01309 
01310   double sky_inf_cumx=0;
01311   double sky_inf_cumy=0;
01312   double cum_thres=0.5;
01313   int nobj=0;
01314   sinfo_msg("ok1");
01315   cpl_frame* sky_frm_inf=NULL;
01316   cpl_frame* sky_frm_sup=NULL;
01317   sinfo_msg("ok2");
01318 
01319   check_nomsg(*obj_frm=cpl_frameset_get_frame(*obj_set,i));
01320   mjd_obj    = sinfo_get_mjd_obs(*obj_frm);
01321   obj_cumx=sinfo_get_cumoffsetx(*obj_frm);
01322   obj_cumy=sinfo_get_cumoffsety(*obj_frm);
01323   sinfo_msg("ok3");
01324 
01325   if(i>0) {
01326     check_nomsg(sky_frm_inf=cpl_frameset_get_frame(*obj_set,i-1));
01327     mjd_sky_inf = sinfo_get_mjd_obs(sky_frm_inf);
01328     sky_inf_cumx=sinfo_get_cumoffsetx(sky_frm_inf);
01329     sky_inf_cumy=sinfo_get_cumoffsety(sky_frm_inf);
01330   }
01331   sinfo_msg("ok4");
01332 
01333   if(i<nobj-1) {
01334     check_nomsg(sky_frm_sup=cpl_frameset_get_frame(*obj_set,i+1));
01335     mjd_sky_sup = sinfo_get_mjd_obs(sky_frm_sup);
01336     sky_sup_cumx=sinfo_get_cumoffsetx(sky_frm_sup);
01337     sky_sup_cumy=sinfo_get_cumoffsety(sky_frm_sup);
01338   }
01339 
01340   sinfo_msg("ok5");
01341 
01342 
01343   if(i==0) {
01344     *sky_frm = sky_frm_sup;
01345   } else if(i==(nobj-1)) {
01346     *sky_frm = sky_frm_inf;
01347   } else {
01348        if( fabs( mjd_sky_inf - mjd_obj ) <
01349            fabs( mjd_sky_sup - mjd_obj ) ) {
01350          if((fabs(sky_inf_cumx-obj_cumx) > cum_thres) ||
01351             (fabs(sky_inf_cumy-obj_cumy) > cum_thres)) {
01352        *sky_frm = sky_frm_inf;
01353      } else {
01354        *sky_frm = sky_frm_sup; 
01355      }
01356        } else {
01357          if((fabs(sky_sup_cumx-obj_cumx) > cum_thres) ||
01358             (fabs(sky_sup_cumy-obj_cumy) > cum_thres)) {
01359        *sky_frm = sky_frm_sup;
01360      } else {
01361        *sky_frm = sky_frm_inf;
01362      }
01363        }
01364   }
01365   sinfo_msg("ok6");
01366   return 0;
01367 
01368  cleanup:
01369   return -1;
01370 
01371 }
01372 */

Generated on Wed Jan 17 08:33:43 2007 for SINFONI Pipeline Reference Manual by  doxygen 1.4.4