sinfo_rec_utils.c

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

Generated on 8 Mar 2011 for SINFONI Pipeline Reference Manual by  doxygen 1.6.1