add_bp_map.c

00001 /*----------------------------------------------------------------------------
00002    
00003    File name    :       add_bp_map.c
00004    Author       :   A. Modigliani
00005    Created on   :   Oct 13, 2004
00006    Description  :   Coadd different BP MAP 
00007 
00008  ---------------------------------------------------------------------------*/
00009 
00010 /*----------------------------------------------------------------------------
00011                                 Includes
00012  ---------------------------------------------------------------------------*/
00013 #include "add_bp_map.h"
00014 #include "sinfoni_pro_save.h"
00015 #include <sinfoni_memory.h>
00016 
00017 /*----------------------------------------------------------------------------
00018                                 Prototypes
00019  ---------------------------------------------------------------------------*/
00020 
00021 
00022 /*----------------------------------------------------------------------------
00023                                 Defines
00024  ---------------------------------------------------------------------------*/
00025 
00026 
00027 /*----------------------------------------------------------------------------
00028                              Function Definitions
00029  ---------------------------------------------------------------------------*/
00030 
00031 /*----------------------------------------------------------------------------
00032    Function     :       add_bp_map()
00033    In           :       ini_file: file name of according .ini file
00034    Out          :       integer (0 if it worked, -1 if it doesn't) 
00035    Job          :       
00036  ---------------------------------------------------------------------------*/
00037 
00038 int add_bp_map (const char* plugin_id,cpl_parameterlist* config, cpl_frameset* sof)
00039 {
00040 
00041    int  nmsk =0;
00042    int  nmsk_ref_fits =0;
00043    int i=0;
00044    int k=0;
00045    int n_bad=0;
00046    OneImage**  eimg_sum=NULL;
00047    OneImage*  eimg_set=NULL;
00048    OneImage*  eimg_tot=NULL;
00049 
00050 
00051    cpl_image* img_sum=NULL;
00052    
00053    cpl_frameset* msk_set=NULL;
00054    cpl_frameset* msk_ref_fits=NULL;
00055 
00056    cpl_frame* frame=NULL;
00057   
00058    char frame_name[FILE_NAME_SZ];
00059    
00060    char out_msk[FILE_NAME_SZ];
00061    const cxchar *_id = "add_bp_map";
00062       
00063    cpl_table* qclog_tbl=NULL;
00064    char* key_value=NULL;
00065    char * tag=NULL;
00066    char * tmp_tag=NULL;
00067  
00068    strcpy(out_msk, MASTER_BPMAP_OUT_FILENAME);
00069 
00070 
00071    /* cpl_parameterlist_dump(config); */
00072    msk_set=cpl_frameset_new();
00073    sinfoni_contains_frames_kind(sof,msk_set,"BP_MAP");
00074    nmsk = cpl_frameset_get_size(msk_set);
00075    if(nmsk == 0) {
00076      cpl_msg_warning(_id,"No bad pixel masks to add");
00077      cpl_frameset_delete(msk_set);
00078      return 0;
00079    }
00080    frame = cpl_frameset_get_frame(msk_set,0);
00081    strcpy(frame_name,cpl_frame_get_filename(frame));
00082    tag = (char*) cpl_frame_get_tag(frame);
00083   
00084    /* printf ("nmsk=%d\n",nmsk); */
00085    {
00086       msk_ref_fits=cpl_frameset_new();
00087       if (nmsk < 1) {
00088         cpl_msg_error(_id,"No input frames. Nothing to do.");
00089         if(msk_set) cpl_frameset_delete(msk_set);
00090         if(msk_ref_fits) cpl_frameset_delete(msk_ref_fits);
00091         return -1;
00092       } else if (nmsk==1) {
00093 
00094         cpl_msg_error(_id,"Only one input frames. Use it as master.");
00095         frame = cpl_frameset_get_frame(msk_set,0);
00096         strcpy(frame_name,cpl_frame_get_filename(frame));
00097     tag = (char*) cpl_frame_get_tag(frame);
00098       } else {
00099        
00100         sinfoni_contains_frames_kind(msk_set,msk_ref_fits,PRO_BP_MAP_NO);
00101         nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits);
00102 
00103 
00104         if (nmsk_ref_fits < 1) {
00105           cpl_msg_warning(_id,"No %s input frames. Uses %s for FITS header",
00106                              PRO_BP_MAP_NO,PRO_BP_MAP_DI);
00107 
00108           sinfoni_contains_frames_kind(msk_set,msk_ref_fits,PRO_BP_MAP_DI);
00109           nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits);
00110 
00111 
00112 
00113           if (nmsk_ref_fits < 1) {
00114 
00115              cpl_msg_warning(_id,"No %s input frames. Uses %s for FITS header",
00116                              PRO_BP_MAP_DI,PRO_BP_MAP_NL);
00117         
00118              sinfoni_contains_frames_kind(msk_set,msk_ref_fits,PRO_BP_MAP_NL);
00119              nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits);
00120 
00121              if (nmsk_ref_fits < 1) {
00122 
00123                cpl_msg_warning(_id,"No %s input frames. Uses 1st mask in the list",
00124                              PRO_BP_MAP_NL);
00125                frame = cpl_frameset_get_frame(msk_set,0);
00126                cpl_frameset_erase_frame(msk_set,frame);
00127            tag = (char*) cpl_frame_get_tag(frame);
00128 
00129          } else {
00130                cpl_msg_info(_id,"Uses as reference frame %s",PRO_BP_MAP_NL);
00131                frame = cpl_frameset_get_frame(msk_ref_fits,0);
00132                strcpy(frame_name,cpl_frame_get_filename(frame));
00133                tag = (char*) PRO_BP_MAP_NL;
00134          }
00135           } else {
00136          cpl_msg_info(_id,"Uses as reference frame %s",PRO_BP_MAP_DI);
00137              frame = cpl_frameset_get_frame(msk_ref_fits,0);
00138              strcpy(frame_name,cpl_frame_get_filename(frame));
00139              tag = (char*) PRO_BP_MAP_DI;
00140       }
00141         } else {
00142         cpl_msg_info(_id,"Uses as reference frame %s",PRO_BP_MAP_NO);
00143             frame = cpl_frameset_get_frame(msk_ref_fits,0);
00144             strcpy(frame_name,cpl_frame_get_filename(frame));
00145             tag = (char*) PRO_BP_MAP_NO;
00146     }
00147       }
00148         nmsk = cpl_frameset_get_size(msk_set);  
00149     eimg_sum = (OneImage**) cpl_calloc ((nmsk+1), sizeof(OneImage*)) ;
00150         eimg_sum[0]=load_image(frame_name);
00151 
00152         /* here mem leak */
00153         for (i=0;i<nmsk;i++) {
00154           frame = cpl_frameset_get_frame(msk_set,i);
00155           strcpy(frame_name,cpl_frame_get_filename(frame));
00156           tmp_tag=(char*)cpl_frame_get_tag(frame);
00157           if(strcmp(tmp_tag,tag) == 0 ) {
00158       } else {
00159              eimg_set=load_image(frame_name);
00160          eimg_sum[k+1]=combineMasks (eimg_sum[k], eimg_set);
00161          k++;
00162          destroy_image(eimg_set);
00163          destroy_image(eimg_sum[k-1]);
00164       }
00165     }
00166         eimg_tot=copy_image(eimg_sum[k]);
00167         destroy_image(eimg_sum[k]);
00168         cpl_free(eimg_sum);
00169 
00170         img_sum=cpl_image_wrap_float(eimg_tot->lx,eimg_tot->ly,eimg_tot->data);
00171                 
00172     /*
00173 
00174         frame = cpl_frameset_get_frame(msk_set,0);
00175         strcpy(frame_name,cpl_frame_get_filename(frame));
00176         img_sum=cpl_image_load(frame_name,CPL_TYPE_INT,0,0);
00177     
00178         for (i=1;i<nmsk;i++) {
00179           frame = cpl_frameset_get_frame(msk_set,i);
00180           strcpy(frame_name,cpl_frame_get_filename(frame));
00181           img_set=cpl_image_load(frame_name,CPL_TYPE_INT,0,0);
00182       cpl_mask_and(img_sum, img_set);
00183 
00184     }
00185     
00186     */
00187       
00188 
00189 
00190       n_bad = countBadPixels(eimg_tot) ;
00191       cpl_msg_info (_id,"number of bad pixels: %d\n", n_bad) ;
00192 
00193 
00194 
00195       qclog_tbl = sinfoni_qclog_init(1);
00196       key_value = cpl_calloc(FILE_NAME_SZ,sizeof(char));
00197       sprintf(key_value,"%d",n_bad);
00198  
00199 
00200      sinfoni_qclog_add(qclog_tbl,0,"QC MBP_MAP NBADPIX","CPL_TYPE_INT",
00201             key_value,"No of bad pixels");
00202 
00203 
00204      if (nmsk>1) {
00205       if(-1 == sinfoni_pro_save_ima(img_sum,msk_ref_fits,sof,out_msk,
00206                                     PRO_MASTER_BP_MAP,qclog_tbl,
00207                                    plugin_id,config)) {
00208          cpl_msg_error(_id,"cannot save ima %s", out_msk);   
00209          cpl_image_unwrap(img_sum);
00210          destroy_image(eimg_tot);
00211          cpl_table_delete(qclog_tbl);
00212          cpl_free(key_value);
00213          if(msk_ref_fits) cpl_frameset_delete(msk_ref_fits);
00214          if(msk_set) cpl_frameset_delete(msk_set);
00215          return -1;
00216 
00217       }
00218      } else {
00219       if(-1 == sinfoni_pro_save_ima(img_sum,msk_set,sof,out_msk,
00220                                     PRO_MASTER_BP_MAP,qclog_tbl,
00221                                    plugin_id,config)) {
00222          cpl_msg_error(_id,"cannot save ima %s", out_msk);   
00223          cpl_image_unwrap(img_sum);
00224          destroy_image(eimg_tot);
00225          cpl_table_delete(qclog_tbl);
00226          cpl_free(key_value);
00227          if(msk_ref_fits) cpl_frameset_delete(msk_ref_fits);
00228          if(msk_set) cpl_frameset_delete(msk_set);
00229          return -1;
00230 
00231       }
00232      }
00233 
00234 
00235       cpl_image_unwrap(img_sum);
00236       destroy_image(eimg_tot);
00237       cpl_table_delete(qclog_tbl);
00238       cpl_free(key_value);
00239       if(msk_ref_fits) cpl_frameset_delete(msk_ref_fits);
00240       if(msk_set) cpl_frameset_delete(msk_set);
00241   
00242    }   
00243    sinfoni_memory_status();
00244    return 0; 
00245 }
00246 
00247 
00248 
00249 
00250 
00251 
00252 
00253 
00254 
00255 

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