00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifdef HAVE_CONFIG_H
00032 #include <config.h>
00033 #endif
00034
00035
00036
00037
00038 #include "si_rec_utils.h"
00039 #include <sinfoni_memory.h>
00040
00041
00042
00043
00044 int
00045 stack_frames(cpl_parameterlist* cfg, cpl_frameset* set, const char* procatg,
00046 const int id, fake* fk, const char* plugin_id)
00047 {
00048 int ind=0;
00049 const char* _id="stack_frames";
00050 cpl_msg_info (_id,"------------------------------") ;
00051 cpl_msg_info (_id,"PREPARE STACKED SET %d",id) ;
00052 cpl_msg_info (_id,"------------------------------") ;
00053 if ( -1 == (ind = prepare_stacked_frames(plugin_id,cfg, set, procatg,
00054 id,fk)))
00055 {
00056 cpl_msg_error(_id," no: %d\n", ind) ;
00057 sinfoni_memory_status();
00058 return -1 ;
00059 }
00060 cpl_msg_info (_id,"------------------------------") ;
00061 cpl_msg_info (_id,"PREPARED STACKED SET %d",id) ;
00062 cpl_msg_info (_id,"------------------------------") ;
00063 return 0;
00064 }
00065
00066 cpl_frame*
00067 get_dummy_sky(cpl_frameset* obj_set)
00068 {
00069
00070 cpl_imagelist* obj_list=NULL;
00071 cpl_image* fake_sky=NULL;
00072 char filename[FILE_NAME_SZ];
00073 cpl_frame* frame=NULL;
00074 cpl_frame* sky_frame=NULL;
00075
00076 cpl_propertylist* plist=NULL;
00077 const char* _id="get_dummy_sky";
00078 obj_list = cpl_imagelist_load_frameset(obj_set,CPL_TYPE_FLOAT,0,0);
00079 fake_sky = cpl_imagelist_collapse_median_create(obj_list);
00080
00081 frame = cpl_frameset_get_frame(obj_set,0);
00082 strcpy(filename,cpl_frame_get_filename(frame));
00083
00084 if ((cpl_error_code)((plist = cpl_propertylist_load(filename, 0)) == NULL)) {
00085 cpl_msg_error(_id, "getting header from reference ima frame %s",filename);
00086 cpl_propertylist_delete(plist) ;
00087 return NULL ;
00088 }
00089
00090 if (cpl_propertylist_contains(plist, KEY_NAME_DPR_TYPE)) {
00091 cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, "SKY");
00092 } else {
00093 cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,"SKY") ;
00094 }
00095
00096 if (cpl_image_save(fake_sky, "fake_sky.fits", CPL_BPP_DEFAULT,
00097 plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
00098 cpl_msg_error(_id, "Cannot save the product %s","fake_sky.fits");
00099 cpl_propertylist_delete(plist) ;
00100 return NULL ;
00101 }
00102 cpl_propertylist_delete(plist);
00103
00104 sky_frame = cpl_frame_new() ;
00105 cpl_frame_set_filename(sky_frame, "fake_sky.fits") ;
00106 cpl_frame_set_tag(sky_frame, PRO_SKY_DUMMY) ;
00107 cpl_frame_set_type(sky_frame, CPL_FRAME_TYPE_IMAGE);
00108
00109
00110
00111 cpl_frame_set_level(sky_frame, CPL_FRAME_LEVEL_FINAL);
00112 cpl_image_delete(fake_sky);
00113 cpl_imagelist_delete(obj_list);
00114
00115 return sky_frame;
00116 }
00117
00118
00119
00120 int
00121 get_dummy_obj_sky_stacked(cpl_frameset* obj_set,cpl_frameset** set,
00122 cpl_parameterlist* config,fake* fk, char* pro_ctg, const char* plugin_id)
00123 {
00124 int nobj=0;
00125 int ncdb=0;
00126 int ntot=0;
00127 int nstk=0;
00128 int nwrk=0;
00129 int i=0;
00130 int k=0;
00131
00132 double mjd_obj=0;
00133 double mjd_sky_inf=0;
00134 double mjd_sky_sup=0;
00135 char sky_name[FILE_NAME_SZ];
00136 char out_name[FILE_NAME_SZ];
00137
00138 char fake_sky_name[FILE_NAME_SZ];
00139 const char* _id= "get_dummy_obj_sky_stacked";
00140
00141 cpl_frame* obj_frm=NULL;
00142 cpl_frame* sky_frm=NULL;
00143 cpl_frame* cdb_frm=NULL;
00144 cpl_frame* wrk_frm=NULL;
00145 cpl_frame* tot_frm=NULL;
00146 cpl_frame* dup_frm=NULL;
00147
00148 cpl_frame* sky_frm_inf=NULL;
00149 cpl_frame* sky_frm_sup=NULL;
00150
00151 cpl_propertylist* plist=NULL;
00152 cpl_frameset* wrk_set=NULL;
00153 cpl_frameset* cdb_set=NULL;
00154 cpl_frameset* tot_set=NULL;
00155 cpl_frameset* stk_set=NULL;
00156 cpl_image* sky_ima=NULL;
00157
00158
00159 cdb_set=cpl_frameset_new();
00160 sinfoni_extract_mst_frames(*set,cdb_set);
00161 nobj=cpl_frameset_get_size(obj_set);
00162 ncdb=cpl_frameset_get_size(cdb_set);
00163
00164
00165 tot_set=cpl_frameset_new();
00166
00167 for(i=0;i<nobj;i++) {
00168
00169 obj_frm=cpl_frameset_get_frame(obj_set,i);
00170
00171 mjd_obj = sinfoni_get_mjd_obs(obj_frm);
00172
00173
00174 if(i>0) {
00175 sky_frm_inf=cpl_frameset_get_frame(obj_set,i-1);
00176 mjd_sky_inf = sinfoni_get_mjd_obs(sky_frm_inf);
00177 }
00178
00179 if(i<nobj-1) {
00180 sky_frm_sup=cpl_frameset_get_frame(obj_set,i+1);
00181 mjd_sky_sup = sinfoni_get_mjd_obs(sky_frm_sup);
00182 }
00183
00184
00185
00186 if(i==0) {
00187 sky_frm = sky_frm_sup;
00188 }
00189 else if(i==(nobj-1)) {
00190 sky_frm = sky_frm_inf;
00191 } else {
00192 if( fabs( mjd_sky_inf - mjd_obj ) <
00193 fabs( mjd_sky_sup - mjd_obj ) ) {
00194 sky_frm = sky_frm_inf;
00195 } else {
00196 sky_frm = sky_frm_sup;
00197 }
00198 }
00199
00200
00201
00202 strcpy(sky_name,cpl_frame_get_filename(sky_frm));
00203
00204 if (strstr(sky_name, "." ) != NULL ) {
00205
00206 sprintf(fake_sky_name,"%s%d%s","fake_sky",i,".fits");
00207 } else {
00208 sprintf(fake_sky_name, sky_name) ;
00209 }
00210
00211 sky_ima=cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0);
00212
00213 if ((cpl_error_code)((plist = cpl_propertylist_load(sky_name, 0))==NULL)){
00214 cpl_msg_error(_id,"getting header from reference ima frame %s",sky_name);
00215 cpl_propertylist_delete(plist) ;
00216 return -1 ;
00217 }
00218
00219 if (cpl_propertylist_contains(plist, KEY_NAME_DPR_TYPE)) {
00220 cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, "SKY");
00221 } else {
00222 cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,"SKY") ;
00223 }
00224
00225 if (cpl_image_save(sky_ima, fake_sky_name, CPL_BPP_DEFAULT,
00226 plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
00227 cpl_msg_error(_id, "Cannot save the product %s",fake_sky_name);
00228 cpl_propertylist_delete(plist) ;
00229 return -1;
00230 }
00231 cpl_propertylist_delete(plist);
00232 cpl_image_delete(sky_ima);
00233
00234
00235 cpl_frame_set_filename(sky_frm, fake_sky_name) ;
00236
00237
00238
00239 cpl_frame_set_type(sky_frm, CPL_FRAME_TYPE_IMAGE);
00240
00241 cpl_frame_set_level(sky_frm, CPL_FRAME_LEVEL_FINAL);
00242
00243
00244 wrk_set=cpl_frameset_new();
00245
00246 dup_frm=cpl_frame_duplicate(obj_frm);
00247 cpl_frameset_insert(wrk_set,dup_frm);
00248
00249
00250
00251 dup_frm=cpl_frame_duplicate(sky_frm);
00252 cpl_frameset_insert(wrk_set,dup_frm);
00253
00254
00255 for(k=0;k<ncdb;k++) {
00256 cdb_frm=cpl_frameset_get_frame(cdb_set,k);
00257 dup_frm=cpl_frame_duplicate(cdb_frm);
00258 cpl_frameset_insert(wrk_set,dup_frm);
00259 }
00260 sprintf(out_name,"%s%d%s","out_stack",i,".fits");
00261 nwrk=cpl_frameset_get_size(wrk_set);
00262
00263
00264 if(-1==stack_frames(config,wrk_set,pro_ctg,i,fk,plugin_id)) {
00265 cpl_msg_error(_id,"Error stacking frames");
00266 cpl_frameset_delete(wrk_set);
00267 cpl_frameset_delete(cdb_set);
00268 cpl_frameset_delete(tot_set);
00269
00270 return -1;
00271 }
00272
00273 cpl_frame_set_filename(sky_frm, sky_name) ;
00274 cpl_frame_set_tag(sky_frm, RAW_OBJECT_NODDING) ;
00275 stk_set=cpl_frameset_new();
00276 sinfoni_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
00277 nstk=cpl_frameset_get_size(stk_set);
00278 for(k=0;k<nstk;k++) {
00279 wrk_frm=cpl_frameset_get_frame(stk_set,k);
00280 dup_frm=cpl_frame_duplicate(wrk_frm);
00281 cpl_frameset_insert(tot_set,dup_frm);
00282 }
00283 cpl_frameset_delete(stk_set);
00284 cpl_frameset_delete(wrk_set);
00285
00286 }
00287 ntot=cpl_frameset_get_size(tot_set);
00288 for(k=0;k<ntot;k++) {
00289 tot_frm=cpl_frameset_get_frame(tot_set,k);
00290 dup_frm=cpl_frame_duplicate(tot_frm);
00291 cpl_frameset_insert(*set,dup_frm);
00292 }
00293
00294 cpl_frameset_delete(cdb_set);
00295 cpl_frameset_delete(tot_set);
00296
00297 return 0;
00298 }