sinfo_new_add_bp_map.c

00001 /*
00002  * This file is part of the ESO SINFONI Pipeline
00003  * Copyright (C) 2004,2005 European Southern Observatory
00004  *
00005  * This program is free software; you can redistribute it and/or modify
00006  * it under the terms of the GNU General Public License as published by
00007  * the Free Software Foundation; either version 2 of the License, or
00008  * (at your option) any later version.
00009  *
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU General Public License
00016  * along with this program; if not, write to the Free Software
00017  * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA
00018  */
00019 /*----------------------------------------------------------------------------
00020    
00021    File name    :       sinfo_new_add_bp_map.c
00022    Author       :    A. Modigliani
00023    Created on   :    Oct 13, 2004
00024    Description  :    Coadd different BP MAP 
00025 
00026  ---------------------------------------------------------------------------*/
00027 
00028 #ifdef HAVE_CONFIG_H
00029 #  include <config.h>
00030 #endif
00031 /*----------------------------------------------------------------------------
00032                                 Includes
00033  ---------------------------------------------------------------------------*/
00034 #include "sinfo_new_add_bp_map.h"
00035 #include "sinfo_pro_save.h"
00036 #include "sinfo_error.h"
00037 #include "sinfo_utils_wrappers.h"
00038 /* #include "image_ops.h" */
00039 #include "sinfo_pro_types.h"
00040 #include "sinfo_functions.h"
00041 #include "sinfo_detlin.h"
00042 /*----------------------------------------------------------------------------
00043                                 Prototypes
00044  ---------------------------------------------------------------------------*/
00045 
00046 /*----------------------------------------------------------------------------
00047                                 Defines
00048  ---------------------------------------------------------------------------*/
00049 
00050 
00051 /*----------------------------------------------------------------------------
00052   Function Definitions
00053   ---------------------------------------------------------------------------*/
00071 int 
00072 sinfo_new_add_bp_map (const char* plugin_id,
00073                       cpl_parameterlist* config, 
00074                       cpl_frameset* sof,cpl_frameset* ref_set)
00075 {
00076 
00077   int  nmsk =0;
00078   int  nmsk_ref_fits =0;
00079   int i=0;
00080   int k=0;
00081   int n_bad=0;
00082   cpl_image**  img_sum=NULL;
00083   cpl_image*   img_set=NULL;
00084   cpl_image*   img_tot=NULL;
00085   cpl_frameset* msk_set=NULL;
00086   cpl_frameset* msk_ref_fits=NULL;
00087   cpl_frame* frame=NULL;
00088   double max=0;
00089   char frame_name[FILE_NAME_SZ];
00090   char out_msk[FILE_NAME_SZ];
00091       
00092   cpl_table* qclog_tbl=NULL;
00093   char * tag=NULL;
00094   char * tmp_tag=NULL;
00095 
00096   strcpy(out_msk, MASTER_BPMAP_OUT_FILENAME);
00097 
00098 
00099   /* cpl_parameterlist_dump(config); */
00100   check_nomsg(msk_set=cpl_frameset_new());
00101   ck0_nomsg(sinfo_contains_frames_kind(sof,msk_set,"BP_MAP"));
00102   check_nomsg(nmsk = cpl_frameset_get_size(msk_set));
00103   if(nmsk == 0) {
00104     sinfo_msg_warning("No bad pixel masks to add");
00105     goto cleanup;
00106   }
00107 
00108 
00109   check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));
00110   strcpy(frame_name,cpl_frame_get_filename(frame));
00111   check_nomsg(tag = (char*) cpl_frame_get_tag(frame));
00112   {
00113     check_nomsg(msk_ref_fits=cpl_frameset_new());
00114     if (nmsk < 1) {
00115       sinfo_msg_error("No input frames. Nothing to do.");
00116       goto cleanup;
00117     } else if (nmsk==1) {
00118 
00119       sinfo_msg_warning("Only one input frames. Use it as master.");
00120       check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));
00121       strcpy(frame_name,cpl_frame_get_filename(frame));
00122       check_nomsg(tag = (char*) cpl_frame_get_tag(frame));
00123 
00124     } else {
00125        
00126       ck0_nomsg(sinfo_contains_frames_kind(msk_set,
00127                        msk_ref_fits,PRO_BP_MAP_NO));
00128       check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));
00129 
00130       if (nmsk_ref_fits < 1) {
00131     sinfo_msg_warning("No %s input frames. Uses %s for FITS header",
00132               PRO_BP_MAP_NO,PRO_BP_MAP_DI);
00133 
00134     ck0_nomsg(sinfo_contains_frames_kind(msk_set,
00135                          msk_ref_fits,PRO_BP_MAP_DI));
00136     check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));
00137 
00138 
00139     if (nmsk_ref_fits < 1) {
00140 
00141       sinfo_msg_warning("No %s input frames. Uses %s for FITS header",
00142                 PRO_BP_MAP_DI,PRO_BP_MAP_NL);
00143         
00144       ck0_nomsg(sinfo_contains_frames_kind(msk_set,
00145                            msk_ref_fits,PRO_BP_MAP_NL));
00146       check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));
00147 
00148       if (nmsk_ref_fits < 1) {
00149 
00150         sinfo_msg_warning("No %s input frames. Uses 1st mask in the list",
00151                   PRO_BP_MAP_NL);
00152         sinfo_free_frameset(&msk_ref_fits);
00153         check_nomsg(msk_ref_fits=cpl_frameset_duplicate(msk_set));
00154         check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));
00155         check_nomsg(cpl_frameset_erase_frame(msk_set,frame));
00156         check_nomsg(tag = (char*) cpl_frame_get_tag(frame));
00157 
00158       } else {
00159         sinfo_msg("Uses as reference frame %s",PRO_BP_MAP_NL);
00160         check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));
00161         strcpy(frame_name,cpl_frame_get_filename(frame));
00162         tag = (char*) PRO_BP_MAP_NL;
00163       }
00164     } else {
00165           sinfo_msg("Uses as reference frame %s",PRO_BP_MAP_DI);
00166       check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));
00167       strcpy(frame_name,cpl_frame_get_filename(frame));
00168       tag = (char*) PRO_BP_MAP_DI;
00169     }
00170       } else {
00171         sinfo_msg("Uses as reference frame %s",PRO_BP_MAP_NO);
00172     check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));
00173     strcpy(frame_name,cpl_frame_get_filename(frame));
00174     tag = (char*) PRO_BP_MAP_NO;
00175       }
00176     }
00177 
00178     check_nomsg(nmsk = cpl_frameset_get_size(msk_set));  
00179     cknull_nomsg(img_sum = (cpl_image**) cpl_calloc ((nmsk+1), 
00180                              sizeof(cpl_image*))) ;
00181     cknull_nomsg(img_sum[0]=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));
00182 
00183     /* here mem leak */
00184     for (i=0;i<nmsk;i++) {
00185       check_nomsg(frame = cpl_frameset_get_frame(msk_set,i));
00186       check_nomsg(strcpy(frame_name,cpl_frame_get_filename(frame)));
00187       check_nomsg(tmp_tag=(char*)cpl_frame_get_tag(frame));
00188 
00189       if(strcmp(tmp_tag,tag) == 0 ) {
00190     cknull_nomsg(img_set=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));
00191         check_nomsg(max=cpl_image_get_max(img_set));
00192     if((strcmp(tmp_tag,PRO_BP_MAP_NL) == 0) && max>1 ) {
00193       sinfo_msg("corr1");
00194       check_nomsg(cpl_image_threshold(img_set,0.5,0.9,1,0));
00195           sinfo_free_image(&(img_sum[0]));
00196           check_nomsg(img_sum[0]=cpl_image_duplicate(img_set));
00197     }
00198 
00199       } else {
00200 
00201     cknull_nomsg(img_set=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));
00202         check_nomsg(max=cpl_image_get_max(img_set));
00203     if((strcmp(tmp_tag,PRO_BP_MAP_NL) == 0) &&  max>1 ) {
00204       sinfo_msg("corr2 name=%s tag=%s",frame_name,tmp_tag);
00205       check_nomsg(cpl_image_threshold(img_set,0.5,0.9,1,0));
00206     }
00207    
00208     cknull_nomsg(img_sum[k+1]=sinfo_new_combine_masks (img_sum[k], img_set));
00209     k++;
00210     sinfo_free_image(&img_set);
00211     sinfo_free_image(&(img_sum[k-1]));
00212       }
00213     }
00214     img_tot=cpl_image_duplicate(img_sum[k]);
00215     sinfo_free_image(&(img_sum[k]));
00216     sinfo_free_array_image(&img_sum);
00217     /*
00218 
00219     frame = cpl_frameset_get_frame(msk_set,0);
00220     strcpy(frame_name,cpl_frame_get_filename(frame));
00221     img_sum=cpl_image_load(frame_name,CPL_TYPE_INT,0,0);
00222         
00223     for (i=1;i<nmsk;i++) {
00224     frame = cpl_frameset_get_frame(msk_set,i);
00225     strcpy(frame_name,cpl_frame_get_filename(frame));
00226     img_set=cpl_image_load(frame_name,CPL_TYPE_INT,0,0);
00227     cpl_mask_and(img_sum, img_set);
00228 
00229     }
00230     
00231     */
00232 
00233     n_bad = sinfo_new_count_bad_pixels(img_tot) ;
00234     sinfo_msg ("number of bad pixels: %d\n", n_bad) ;
00235     cknull_nomsg(qclog_tbl = sinfo_qclog_init());
00236     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,"QC MBP_MAP NBADPIX",
00237                   n_bad,"No of bad pixels","%d"));
00238 
00239     if (nmsk>1) {
00240       ck0(sinfo_pro_save_ima(img_tot,ref_set,sof,out_msk,
00241                  PRO_MASTER_BP_MAP,qclog_tbl,
00242                  plugin_id,config),
00243       "cannot save ima %s", out_msk);   
00244 
00245     } else {
00246       ck0(sinfo_pro_save_ima(img_tot,ref_set,sof,out_msk,
00247                  PRO_MASTER_BP_MAP,qclog_tbl,
00248                  plugin_id,config),
00249       "cannot save ima %s", out_msk);   
00250     }
00251 
00252     sinfo_free_image(&img_tot);
00253     sinfo_free_table(&qclog_tbl);
00254     sinfo_free_frameset(&msk_ref_fits);
00255     sinfo_free_frameset(&msk_set);
00256   
00257   }
00258 
00259  cleanup:
00260 
00261   sinfo_free_image(&img_tot);
00262   if(img_sum!=NULL) {
00263     for(i=0;i<nmsk;i++) {
00264       if(img_sum[i] != NULL) {
00265     sinfo_free_image(&(img_sum[i]));
00266     img_sum[i]=NULL;         
00267       }
00268     }
00269     sinfo_free_array_image(&img_sum);
00270     img_sum=NULL;
00271   }
00272   sinfo_free_image(&img_set);
00273   sinfo_free_table(&qclog_tbl);
00274   sinfo_free_frameset(&msk_set);
00275   sinfo_free_frameset(&msk_ref_fits);
00276 
00277   if (cpl_error_get_code() != CPL_ERROR_NONE) {
00278      return -1; 
00279   } else {
00280      return 0;
00281   }
00282 
00283 
00284 }
00285 
00286 
00287 

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