si_rec_jitter.c

00001 /* $Id: si_rec_jitter.c,v 1.7 2005/10/08 10:34:50 amodigli Exp $
00002  *
00003  * This file is part of the CPL (Common Pipeline Library)
00004  * Copyright (C) 2002 European Southern Observatory
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU Lesser General Public
00008  * License as published by the Free Software Foundation; either
00009  * version 2.1 of the License, or (at your option) any later version.
00010  *
00011  * This library is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014  * Lesser General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU Lesser General Public
00017  * License along with this library; if not, write to the Free Software
00018  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019  */
00020 /*
00021  * $Author: amodigli $
00022  * $Date: 2005/10/08 10:34:50 $
00023  * $Revision: 1.7 $
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 
00039 /* std */
00040 #include <strings.h>
00041 #include <string.h>
00042 #include <stdio.h>
00043 #include <math.h>
00044 #include <libgen.h>
00045 
00046 /* cx */
00047 #include <cxmacros.h>
00048 #include <cxtypes.h>
00049 #include <cxmessages.h>  
00050 #include <cpl_memory.h>    
00051 
00052 /* cpl */
00053 #include <cpl.h>  
00054 
00055 /* qfits */
00056 #include <xmemory.h>
00057 
00058 /* sinfoni */
00059 #include <sinfoni_pro_types.h>
00060 #include <sinfoni_prepare_stacked_frames_config.h>
00061 #include <sinfoni_objnod_config.h>
00062 #include <sinfoni_standard_star_config.h>
00063 #include <objnod.h>
00064 #include <objnod_rel.h>
00065 #include <stdstar.h>
00066 #include <psf.h>
00067 #include <prepare_stacked_frames.h>
00068 #include <sinfoni_key_names.h>
00069 #include <sinfoni_raw_types.h>
00070 #include <sinfoni_functions.h>
00071 #include <sinfoni_tpl_utils.h>
00072 #include <sinfoni_tpl_dfs.h>
00073 #include <sinfoni_hidden.h>
00074 #include <sinfoni_globals.h>
00075 #include "si_rec_utils.h"
00076 #include <sinfoni_memory.h>
00077 
00078 
00079 
00080 
00081 
00082 #define EPSILON      1.e-6
00083 /*-----------------------------------------------------------------------------
00084                             Functions prototypes
00085  -----------------------------------------------------------------------------*/
00086 static cxint
00087 si_rec_jitter(cpl_parameterlist *config, cpl_frameset *set);
00088 /*-----------------------------------------------------------------------------
00089                             Static variables
00090  -----------------------------------------------------------------------------*/
00091 
00092 static char si_rec_jitter_description1[] =
00093 "This recipe performs science data reduction.\n"
00094 "The input files are:\n"
00095 "science object and sky frames with tags OBJECT_NODDING and SKY_NODDING or\n"
00096 "Telluric standard star frames and sky frames with tags STD and SKY_STD or\n"
00097 "PSF standard star and sky frames with tags PSF_CALIBRATOR and SKY_PSF_CALIBRATOR\n"
00098 "and Master calibration frames:\n";
00099 
00100 
00101 static char si_rec_jitter_description2[] =
00102 "A corresponding (band,preoptics) wavelength map image with tag WAVE_MAP\n"
00103 "A corresponding (band,preoptics) master flat field with tag MASTER_FLAT_LAMP\n"
00104 "A corresponding (band,preoptics) master bad pixel map with tag MASTER_BP_MAP\n"
00105 "A corresponding (band,preoptics) slitlets position frame with tag SLIT_POS\n"
00106 "A corresponding (band) distortion table with tag DISTORTION\n"
00107 "A corresponding (band) slitlet distance table with tag SLITLETS_DISTANCE\n";
00108 
00109 
00110 static char si_rec_jitter_description3[] =
00111 "The output is an image resulting from the IMA1 op IMA2 where op indicates\n"
00112 "A reference table with the position of the first  column with tag FIRST_COLUMN\n"
00113 "Relevant outputs are:\n"
00114 "combined cubes (PRO.CATG=x_OBS x=STD,OBJ,PSF)\n"
00115 "reconstructed cube (PRO.CATG=COADD_x_OBS x=STD,OBJ,PSF)\n"
00116 "An average along Z of the reconstructed cube (PRO.CATG=MED_x_OBS x=STD,OBJ,PSF)\n"
00117 "The bad pixel map associated to the cube (PRO.CATG=BP_MAP_COADD_x_OBS x=STD,OBJ,PSF)\n";
00118 
00119 
00120 static char si_rec_jitter_description4[] =
00121 "Information on relevant parameters can be found with\n"
00122 "esorex --params si_rec_jitter\n"
00123 "esorex --help si_rec_jitter\n"
00124 "\n";
00125 
00126 static char si_rec_jitter_description[1300];
00127 
00128 /*-----------------------------------------------------------------------------
00129                                 Functions code
00130  -----------------------------------------------------------------------------*/
00131 
00132 
00133 cxint
00134 si_rec_jitter_create(cpl_plugin *plugin)
00135 {
00136 
00137   /*
00138    * We have to provide the option we accept to the application.
00139    * We need to setup our parameter list and hook it into the recipe
00140    * interface.
00141    */
00142   cpl_recipe *recipe = (cpl_recipe *)plugin;
00143   recipe->parameters = cpl_parameterlist_new();
00144   if(recipe->parameters == NULL) {
00145     return 1;
00146   }
00147 
00148   /*
00149    * Fill the parameter list.
00150    */
00151 
00152   sinfoni_prepare_stacked_frames_config_add(recipe->parameters);
00153   sinfoni_objnod_config_add(recipe->parameters); 
00154   sinfoni_standard_star_config_add(recipe->parameters);
00155 
00156   return 0;
00157 
00158 }
00159 
00160 cxint
00161 si_rec_jitter_exec(cpl_plugin *plugin)
00162 {
00163  
00164   cpl_recipe *recipe = (cpl_recipe *) plugin;
00165   if(recipe->parameters == NULL) {
00166     return 1;
00167   }
00168   if(recipe->frames == NULL) {
00169     return 1;
00170   }
00171   cpl_error_reset();
00172   return si_rec_jitter(recipe->parameters, recipe->frames);
00173 
00174 }
00175 
00176 cxint
00177 si_rec_jitter_destroy(cpl_plugin *plugin)
00178 {
00179   cpl_recipe *recipe = (cpl_recipe *) plugin;
00180   /*
00181    * We just destroy what was created during the plugin initializzation phase
00182    * i.e. the parameter list. The frame set is managed by the application which
00183    * called us, so that we must not touch it.
00184    */
00185 
00186   cpl_parameterlist_delete(recipe->parameters);
00187 
00188   return 0;
00189 
00190 }
00191 
00192 
00193 int
00194 cpl_plugin_get_info(cpl_pluginlist *list)
00195 {
00196 
00197   cpl_recipe *recipe = cpl_calloc(1, sizeof *recipe);
00198   cpl_plugin *plugin = &recipe->interface;
00199 
00200   strcpy(si_rec_jitter_description,si_rec_jitter_description1);
00201   strcat(si_rec_jitter_description,si_rec_jitter_description2);
00202   strcat(si_rec_jitter_description,si_rec_jitter_description3);
00203   strcat(si_rec_jitter_description,si_rec_jitter_description4);
00204 
00205   cpl_plugin_init(plugin,
00206           CPL_PLUGIN_API,
00207           SINFONI_BINARY_VERSION,
00208           CPL_PLUGIN_TYPE_RECIPE,
00209           "si_rec_jitter",
00210           "Object or STD star or PSF star data reduction",
00211            si_rec_jitter_description,
00212           "Andrea Modigliani",
00213           "Andrea.Mdigliani@eso.org",
00214           sinfoni_get_license(),
00215           si_rec_jitter_create,
00216           si_rec_jitter_exec,
00217           si_rec_jitter_destroy);
00218 
00219   cpl_pluginlist_append(list, plugin);
00220 
00221   return 0;
00222 
00223 }
00224 /*
00225  * The actual recipe actually start here.
00226  */
00227 
00228 static cxint
00229 si_rec_jitter(cpl_parameterlist *config, cpl_frameset *set)
00230 {
00231   const char *_id = "si_rec_jitter";
00232   char filename[FILE_NAME_SZ];
00233   char outname[FILE_NAME_SZ];
00234   char tag[FILE_NAME_SZ];
00235   char pro_ctg_cube[FILE_NAME_SZ];
00236   char pro_ctg_stack[FILE_NAME_SZ];
00237 
00238   int i=0;
00239   int j=0;
00240   int k=0;
00241 
00242   int ind=0;
00243   int nsky=0;
00244   int nobj=0;
00245   int ncdb=0;
00246   int nstk=0;
00247   int ntot=0;
00248 
00249   int aj_meth=0;
00250 
00251   double mjd_obj=0;
00252   double mjd_sky=0;
00253   double mjd_sky_frm=0;
00254 
00255   cpl_frameset  * obj_set=NULL;
00256   cpl_frameset  * sky_set=NULL;
00257   cpl_frameset  * cdb_set=NULL;
00258   cpl_frameset  * wrk_set=NULL;
00259   cpl_frameset  * stk_set=NULL;
00260   cpl_frameset  * tot_set=NULL;
00261   cpl_frame     * sky_frm=NULL;
00262 
00263   cpl_frame     * dup_frm=NULL; 
00264   cpl_frame     * obj_frm=NULL; 
00265   cpl_frame     * cdb_frm=NULL;
00266   cpl_frame     * wrk_frm=NULL;
00267   cpl_frameset* ref_set=NULL;
00268 
00269 
00270   cpl_parameter * p=NULL;       
00271   fake* fk=fake_new();
00272 
00273 
00274   /* cpl_parameterlist_dump(config); */
00275 
00276    if(sinfoni_dfs_set_groups(set)) {
00277        cpl_msg_error(_id, "Cannot indentify RAW and CALIB frames") ;
00278        return -1;
00279     }
00280    ref_set=cpl_frameset_duplicate(set);
00281      /* =============================================================== 
00282         Defines several framesets each with a pair obj-sky 
00283         =============================================================== */
00284   obj_set=cpl_frameset_new();
00285   sky_set=cpl_frameset_new();
00286   cdb_set=cpl_frameset_new();
00287 
00288   sinfoni_extract_obj_frames(set,obj_set);
00289   sinfoni_extract_sky_frames(set,sky_set);
00290   sinfoni_extract_mst_frames(set,cdb_set);
00291 
00292    if(NULL == (obj_frm = cpl_frameset_get_frame(obj_set,0))) {
00293      cpl_msg_error(_id,"No object frames in input set.");
00294      cpl_frameset_delete(ref_set);
00295      cpl_frameset_delete(obj_set);
00296      cpl_frameset_delete(sky_set);
00297      cpl_frameset_delete(cdb_set);
00298      fake_delete(fk);
00299      sinfoni_memory_status();
00300      return -1;
00301 
00302    }
00303   strcpy(tag,cpl_frame_get_tag(obj_frm));
00304 
00305   if(strstr(tag,"OBJ") != NULL) {
00306     strcpy(pro_ctg_cube,PRO_COADD_OBJ);
00307     strcpy(pro_ctg_stack,PRO_OBJECT_NODDING_STACKED);
00308   } else if(strstr(tag,"PSF") != NULL) {
00309     strcpy(pro_ctg_cube,PRO_COADD_PSF);
00310     strcpy(pro_ctg_stack,PRO_PSF_CALIBRATOR_STACKED);
00311 
00312   } else if(strstr(tag,"STD") != NULL) {
00313     strcpy(pro_ctg_cube,PRO_COADD_STD);
00314     strcpy(pro_ctg_stack,PRO_STD_NODDING_STACKED);
00315   } else {
00316     cpl_msg_error(_id,"frame tag %s not supported",tag);
00317     cpl_frameset_delete(obj_set);
00318     cpl_frameset_delete(sky_set);
00319     cpl_frameset_delete(cdb_set);
00320     cpl_frameset_delete(ref_set);
00321     fake_delete(fk);
00322      sinfoni_memory_status();    
00323     return -1;
00324   }
00325   /*extract_ao_info(obj_set,&set,_id,config);*/
00326 
00327 
00328   nobj=cpl_frameset_get_size(obj_set);
00329   nsky=cpl_frameset_get_size(sky_set);
00330   ncdb=cpl_frameset_get_size(cdb_set);
00331 
00332   if ((nobj==0) && (nsky==0)) {
00333     cpl_msg_error(_id,"Empty input set");
00334     cpl_frameset_delete(obj_set);
00335     cpl_frameset_delete(sky_set);
00336     cpl_frameset_delete(cdb_set);
00337     cpl_frameset_delete(ref_set);
00338     fake_delete(fk);
00339      sinfoni_memory_status();    
00340     return -1;
00341   }
00342 
00343 
00344 
00345   if ( (nobj != 0) && (nsky != 0) ) {
00346     /* We have either OBJ and SKY: we need to create OBJ-SKY pairs */
00347     cpl_msg_info (_id,"------------------------------") ; 
00348     cpl_msg_info(_id,"generates OBJ-SKY pairs");
00349     cpl_msg_info (_id,"------------------------------") ; 
00350     tot_set=cpl_frameset_new();
00351     p = cpl_parameterlist_find(config,"sinfoni.objnod.autojitter_method");
00352     cpl_parameter_set_int(p,0);
00353 
00354 
00355 
00356     for (i=0;i<nobj;i++) {
00357 
00358        wrk_set=cpl_frameset_new();
00359        obj_frm=cpl_frameset_get_frame(obj_set,i);
00360        mjd_obj=sinfoni_get_mjd_obs(obj_frm);
00361        sky_frm=cpl_frameset_get_frame(sky_set,0);
00362        mjd_sky=sinfoni_get_mjd_obs(sky_frm);
00363        strcpy(filename,cpl_frame_get_filename(obj_frm));
00364 
00365 
00366        for (j=1;j<nsky;j++) {
00367           mjd_sky_frm = sinfoni_get_mjd_obs(cpl_frameset_get_frame(sky_set,j));
00368           if(1000.*(mjd_sky_frm-mjd_obj)*(mjd_sky_frm-mjd_obj) <
00369              1000.*(mjd_sky-    mjd_obj)*(mjd_sky-    mjd_obj) ) {
00370          mjd_sky=mjd_sky_frm;
00371              sky_frm=cpl_frameset_get_frame(sky_set,j);
00372       }
00373        }
00374        strcpy(filename,cpl_frame_get_filename(sky_frm));
00375 
00376 
00377 
00378        /* monitors whih obj-sky frames are inserted in each wrk_set */
00379        dup_frm=cpl_frame_duplicate(obj_frm);
00380        cpl_frameset_insert(wrk_set,dup_frm);
00381        dup_frm=cpl_frame_duplicate(sky_frm);
00382        cpl_frameset_insert(wrk_set,dup_frm);
00383 
00384        /* merged CDB frames to work set */
00385           for(k=0;k<ncdb;k++) {
00386             cdb_frm=cpl_frameset_get_frame(cdb_set,k);
00387             dup_frm=cpl_frame_duplicate(cdb_frm);
00388         cpl_frameset_insert(wrk_set,dup_frm);
00389       }
00390 
00391 
00392        /* defines a new name for the output stacked frame */ 
00393        sprintf(outname,"%s%d%s","out_stack",i,".fits");
00394        if (-1==stack_frames(config,wrk_set,pro_ctg_stack,i,fk,_id)){
00395 
00396      cpl_msg_error(_id,"Cannot stack frames");
00397           cpl_frameset_delete(wrk_set);
00398           cpl_frameset_delete(tot_set);
00399 
00400 
00401           cpl_frameset_delete(obj_set);
00402           cpl_frameset_delete(sky_set);
00403           cpl_frameset_delete(cdb_set);
00404           cpl_frameset_delete(ref_set);
00405 
00406           fake_delete(fk);
00407           sinfoni_memory_status();
00408          return -1;
00409 
00410        }
00411 
00412        stk_set=cpl_frameset_new();
00413        sinfoni_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
00414        nstk=cpl_frameset_get_size(stk_set);
00415 
00416        for(k=0;k<nstk;k++) {
00417          wrk_frm=cpl_frameset_get_frame(stk_set,k);
00418          dup_frm = cpl_frame_duplicate(wrk_frm);
00419      cpl_frameset_insert(tot_set,dup_frm);
00420        }
00421        cpl_frameset_delete(stk_set);
00422        cpl_frameset_delete(wrk_set);
00423 
00424 
00425 
00426 
00427     }
00428 
00429     
00430     ntot=cpl_frameset_get_size(tot_set);
00431     for(k=0;k<ntot;k++) {
00432       wrk_frm=cpl_frameset_get_frame(tot_set,k);
00433       dup_frm = cpl_frame_duplicate(wrk_frm);
00434       cpl_frameset_insert(set,dup_frm);
00435     }
00436     cpl_frameset_delete(tot_set);
00437   }
00438 
00439   if ( (nobj == 0) && (nsky != 0) ) {
00440 
00441      /* =============================================================== 
00442         SKY FRAMES STACKING 
00443         =============================================================== */
00444 
00445     {
00446     cpl_msg_info (_id,"------------------------------") ; 
00447     cpl_msg_info (_id,"SKY ONLY FRAMES DATA REDUCTION NOT SUPPORTED") ; 
00448     cpl_msg_info (_id,"------------------------------") ; 
00449         cpl_frameset_delete(obj_set);
00450         cpl_frameset_delete(sky_set);
00451         cpl_frameset_delete(cdb_set);
00452         cpl_frameset_delete(ref_set);
00453         fake_delete(fk);
00454         return 0;
00455     }    
00456 
00457 
00458   }
00459 
00460 
00461   if ( (nobj != 0) && (nsky == 0) ) {
00462 
00463      /* =============================================================== 
00464         OBJ FRAMES STACKING 
00465         =============================================================== */
00466       p = cpl_parameterlist_find(config,"sinfoni.objnod.autojitter_method");
00467       aj_meth =  cpl_parameter_get_int(p);
00468     if(aj_meth == 2) {
00469 
00470       cpl_msg_info(_id,"Dummy sky case"); 
00471       cpl_msg_info(_id,"fake sky is coming from median of all objects"); 
00472       if( (sky_frm = get_dummy_sky(obj_set)) == NULL) {
00473 
00474     cpl_msg_error(_id,"Problem to get dummy frame");
00475     sinfoni_memory_status();
00476 
00477     return -1;
00478 
00479       }
00480       cpl_msg_info (_id,"------------------------------") ;
00481       cpl_msg_info(_id,"generates OBJ-SKY pairs");
00482       cpl_msg_info (_id,"------------------------------") ; 
00483       tot_set=cpl_frameset_new();
00484 
00485       
00486       for (i=0;i<nobj;i++) {
00487 
00488     wrk_set=cpl_frameset_new();
00489     obj_frm=cpl_frameset_get_frame(obj_set,i);
00490         dup_frm=cpl_frame_duplicate(obj_frm);
00491     cpl_frameset_insert(wrk_set,dup_frm);
00492         dup_frm=cpl_frame_duplicate(sky_frm);
00493     cpl_frameset_insert(wrk_set,dup_frm);
00494     for(k=0;k<ncdb;k++) {
00495       cdb_frm=cpl_frameset_get_frame(cdb_set,k);
00496           dup_frm=cpl_frame_duplicate(cdb_frm);
00497       cpl_frameset_insert(wrk_set,dup_frm);
00498     }
00499  
00500     sprintf(outname,"%s%d%s","out_stack",i,".fits");
00501         if(-1==stack_frames(config,wrk_set,pro_ctg_stack,i,fk,_id)) {
00502           cpl_frame_delete(sky_frm);
00503           cpl_frameset_delete(wrk_set);
00504           cpl_frameset_delete(tot_set);
00505 
00506 
00507           cpl_frameset_delete(obj_set);
00508           cpl_frameset_delete(sky_set);
00509           cpl_frameset_delete(cdb_set);
00510           cpl_frameset_delete(ref_set);
00511 
00512           fake_delete(fk);
00513           sinfoni_memory_status();
00514       return -1;
00515 
00516 
00517     }
00518 
00519     stk_set=cpl_frameset_new();
00520     sinfoni_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
00521     nstk=cpl_frameset_get_size(stk_set);
00522     for(k=0;k<nstk;k++) {
00523       wrk_frm=cpl_frameset_get_frame(stk_set,k);
00524           dup_frm=cpl_frame_duplicate(wrk_frm);
00525       cpl_frameset_insert(tot_set,dup_frm);
00526     }
00527         cpl_frameset_delete(stk_set);
00528         cpl_frameset_delete(wrk_set);
00529 
00530       }
00531       ntot=cpl_frameset_get_size(tot_set);
00532       for(k=0;k<ntot;k++) {
00533     wrk_frm=cpl_frameset_get_frame(tot_set,k);
00534         dup_frm=cpl_frame_duplicate(wrk_frm);
00535     cpl_frameset_insert(set,dup_frm);
00536       }
00537       cpl_frameset_delete(tot_set);
00538       cpl_frame_delete(sky_frm);
00539     } else if(aj_meth == 1 ) {
00540 
00541 
00542         cpl_msg_info(_id,"Dummy obj-sky case");  
00543         cpl_msg_info(_id,"fake sky is coming from each next object");  
00544 
00545     if(nobj > 1) {
00546       
00547        if( get_dummy_obj_sky_stacked(obj_set,&set,config,fk,pro_ctg_stack,_id) == -1 ) {
00548          cpl_msg_error(_id,"Found error to get obj-sky-stacked frame");
00549          cpl_frameset_delete(obj_set);
00550          cpl_frameset_delete(sky_set);
00551          cpl_frameset_delete(cdb_set);
00552          cpl_frameset_delete(ref_set);
00553          fake_delete(fk);
00554          sinfoni_memory_status();
00555          return -1;
00556        }
00557      
00558     } else {
00559       cpl_msg_info (_id,"Only one object frame, no sky");
00560           if(-1==stack_frames(config,set,pro_ctg_stack,0,fk,_id)) {
00561         cpl_frameset_delete(obj_set);
00562         cpl_frameset_delete(sky_set);
00563         cpl_frameset_delete(cdb_set);
00564         cpl_frameset_delete(ref_set);
00565         fake_delete(fk);
00566         sinfoni_memory_status();
00567         return -1;
00568 
00569       }
00570     }
00571 
00572     } else {
00573 
00574       cpl_msg_info (_id,"------------------------------") ;
00575       cpl_msg_info (_id,"staks each OBJECT ");
00576       cpl_msg_info (_id,"------------------------------") ; 
00577       tot_set=cpl_frameset_new();
00578 
00579       for (i=0;i<nobj;i++) {
00580 
00581     wrk_set=cpl_frameset_new();
00582     obj_frm=cpl_frameset_get_frame(obj_set,i);
00583         dup_frm=cpl_frame_duplicate(obj_frm);
00584     cpl_frameset_insert(wrk_set,dup_frm);
00585     for(k=0;k<ncdb;k++) {
00586       cdb_frm=cpl_frameset_get_frame(cdb_set,k);
00587           dup_frm=cpl_frame_duplicate(cdb_frm);
00588       cpl_frameset_insert(wrk_set,dup_frm);
00589     }
00590 
00591  
00592     sprintf(outname,"%s%d%s","out_stack",i,".fits");
00593         if(-1==stack_frames(config,wrk_set,pro_ctg_stack,i,fk,_id)) {
00594         cpl_frameset_delete(wrk_set);
00595         cpl_frameset_delete(obj_set);
00596         cpl_frameset_delete(sky_set);
00597         cpl_frameset_delete(cdb_set);
00598         cpl_frameset_delete(ref_set);
00599         cpl_frameset_delete(tot_set);
00600         fake_delete(fk);
00601         sinfoni_memory_status();
00602 
00603         return -1;
00604 
00605     }
00606 
00607     stk_set=cpl_frameset_new();
00608     sinfoni_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
00609     nstk=cpl_frameset_get_size(stk_set);
00610     for(k=0;k<nstk;k++) {
00611       wrk_frm=cpl_frameset_get_frame(stk_set,k);
00612       dup_frm=cpl_frame_duplicate(wrk_frm);
00613       cpl_frameset_insert(tot_set,dup_frm);
00614     }
00615         cpl_frameset_delete(stk_set);
00616         cpl_frameset_delete(wrk_set);
00617 
00618       }
00619 
00620       ntot=cpl_frameset_get_size(tot_set);
00621       for(k=0;k<ntot;k++) {
00622     wrk_frm=cpl_frameset_get_frame(tot_set,k);
00623     dup_frm=cpl_frame_duplicate(wrk_frm);
00624     cpl_frameset_insert(set,dup_frm);
00625       }
00626       cpl_frameset_delete(tot_set);
00627     }
00628   }
00629 
00630 
00631     /* =============================================================== 
00632         SCI OBJNOD 
00633         =============================================================== */
00634 
00635     {
00636         /* Launch the recipe */
00637     /* 
00638      * MAIN CALL TO spiffi_objnod recipe
00639      */
00640       
00641         cpl_msg_info (_id,"------------------------------") ; 
00642             cpl_msg_info(_id,"NODDING SCIENCE FRAMES");
00643         cpl_msg_info (_id,"------------------------------") ; 
00644 
00645 
00646         if ( -1 == (ind = objnod(_id,config, set, pro_ctg_cube ) ) )
00647         {
00648             cpl_msg_error(_id,"NODDING SCIENCE FRAMES no. %d\n", ind) ;
00649                 cpl_frameset_delete(obj_set);
00650                 cpl_frameset_delete(sky_set);
00651                 cpl_frameset_delete(cdb_set);
00652                 cpl_frameset_delete(ref_set);
00653                 fake_delete(fk);
00654         sinfoni_memory_status();
00655 
00656         return -1 ;
00657         }
00658         cpl_msg_info (_id,"------------------------------") ; 
00659             cpl_msg_info(_id,"NODDED SCIENCE FRAMES");
00660         cpl_msg_info (_id,"------------------------------") ; 
00661       
00662     } 
00663 
00664 
00665     /* =============================================================== 
00666         PSF
00667         =============================================================== */
00668 
00669     if(strcmp(pro_ctg_cube,PRO_COADD_PSF) == 0) {
00670     cpl_msg_info (_id,"------------------------------") ; 
00671         cpl_msg_info(_id,"REDUCE PSF STD STAR FRAMES");
00672     cpl_msg_info (_id,"------------------------------") ; 
00673         if ( -1 == (ind = psf(_id,config,set) ) )
00674         {
00675         cpl_msg_info(_id,"no: %d\n", ind) ;
00676         fake_delete(fk);
00677         sinfoni_memory_status();
00678         return -1 ;
00679     }
00680     cpl_msg_info (_id,"SUCCESS REDUCE PSF STD STAR FRAMES") ; 
00681     }   
00682 
00683 
00684 
00685      /* =============================================================== 
00686         STDSTAR 
00687         =============================================================== */
00688    if(strcmp(pro_ctg_cube,PRO_COADD_STD) == 0) {
00689      cpl_msg_info (_id,"------------------------------") ;
00690      cpl_msg_info(_id,"STD STAR DATA REDUCTION");
00691      cpl_msg_info (_id,"------------------------------") ;
00692 
00693 
00694         if ( -1 == (ind = stdstar(_id,config, set ) ) )
00695         {
00696         cpl_msg_info(_id,"REDUCING STD STAR DATA No: %d",ind) ;
00697         fake_delete(fk);
00698         sinfoni_memory_status();
00699         return -1 ;
00700     }
00701     cpl_msg_info (_id,"STD STAR DATA REDUCTION SUCCESS") ; 
00702    }    
00703 
00704 
00705 
00706 
00707   cpl_frameset_delete(obj_set);
00708   cpl_frameset_delete(sky_set);
00709   cpl_frameset_delete(cdb_set);
00710   cpl_frameset_delete(ref_set);
00711 
00712   fake_delete(fk);
00713   sinfoni_memory_status();
00714   return 0 ;
00715 }
00716 
00717 

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