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 #ifdef HAVE_CONFIG_H
00029 # include <config.h>
00030 #endif
00031
00032
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
00039 #include "sinfo_pro_types.h"
00040 #include "sinfo_functions.h"
00041 #include "sinfo_detlin.h"
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00072 int
00073 sinfo_new_add_bp_map (const char* plugin_id,
00074 cpl_parameterlist* config, cpl_frameset* sof)
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
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
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 check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));
00108 strcpy(frame_name,cpl_frame_get_filename(frame));
00109 check_nomsg(tag = (char*) cpl_frame_get_tag(frame));
00110 {
00111 check_nomsg(msk_ref_fits=cpl_frameset_new());
00112 if (nmsk < 1) {
00113 sinfo_msg_error("No input frames. Nothing to do.");
00114 goto cleanup;
00115 } else if (nmsk==1) {
00116
00117 sinfo_msg_warning("Only one input frames. Use it as master.");
00118 check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));
00119 strcpy(frame_name,cpl_frame_get_filename(frame));
00120 check_nomsg(tag = (char*) cpl_frame_get_tag(frame));
00121
00122 } else {
00123
00124 ck0_nomsg(sinfo_contains_frames_kind(msk_set,
00125 msk_ref_fits,PRO_BP_MAP_NO));
00126 check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));
00127
00128 if (nmsk_ref_fits < 1) {
00129 sinfo_msg_warning("No %s input frames. Uses %s for FITS header",
00130 PRO_BP_MAP_NO,PRO_BP_MAP_DI);
00131
00132 ck0_nomsg(sinfo_contains_frames_kind(msk_set,
00133 msk_ref_fits,PRO_BP_MAP_DI));
00134 check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));
00135
00136
00137 if (nmsk_ref_fits < 1) {
00138
00139 sinfo_msg_warning("No %s input frames. Uses %s for FITS header",
00140 PRO_BP_MAP_DI,PRO_BP_MAP_NL);
00141
00142 ck0_nomsg(sinfo_contains_frames_kind(msk_set,
00143 msk_ref_fits,PRO_BP_MAP_NL));
00144 check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));
00145
00146 if (nmsk_ref_fits < 1) {
00147
00148 sinfo_msg_warning("No %s input frames. Uses 1st mask in the list",
00149 PRO_BP_MAP_NL);
00150 sinfo_free_frameset(&msk_ref_fits);
00151 check_nomsg(msk_ref_fits=cpl_frameset_duplicate(msk_set));
00152 check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));
00153 check_nomsg(cpl_frameset_erase_frame(msk_set,frame));
00154 check_nomsg(tag = (char*) cpl_frame_get_tag(frame));
00155
00156 } else {
00157 sinfo_msg("Uses as reference frame %s",PRO_BP_MAP_NL);
00158 check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));
00159 strcpy(frame_name,cpl_frame_get_filename(frame));
00160 tag = (char*) PRO_BP_MAP_NL;
00161 }
00162 } else {
00163 sinfo_msg("Uses as reference frame %s",PRO_BP_MAP_DI);
00164 check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));
00165 strcpy(frame_name,cpl_frame_get_filename(frame));
00166 tag = (char*) PRO_BP_MAP_DI;
00167 }
00168 } else {
00169 sinfo_msg("Uses as reference frame %s",PRO_BP_MAP_NO);
00170 check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));
00171 strcpy(frame_name,cpl_frame_get_filename(frame));
00172 tag = (char*) PRO_BP_MAP_NO;
00173 }
00174 }
00175
00176 check_nomsg(nmsk = cpl_frameset_get_size(msk_set));
00177 cknull_nomsg(img_sum = (cpl_image**) cpl_calloc ((nmsk+1),
00178 sizeof(cpl_image*))) ;
00179 cknull_nomsg(img_sum[0]=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));
00180
00181
00182 for (i=0;i<nmsk;i++) {
00183 check_nomsg(frame = cpl_frameset_get_frame(msk_set,i));
00184 check_nomsg(strcpy(frame_name,cpl_frame_get_filename(frame)));
00185 check_nomsg(tmp_tag=(char*)cpl_frame_get_tag(frame));
00186 if(strcmp(tmp_tag,tag) == 0 ) {
00187 } else {
00188
00189 cknull_nomsg(img_set=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));
00190 cknull_nomsg(img_sum[k+1]=sinfo_new_combine_masks (img_sum[k], img_set));
00191 k++;
00192 sinfo_free_image(&img_set);
00193 sinfo_free_image(&(img_sum[k-1]));
00194 }
00195 }
00196 img_tot=cpl_image_duplicate(img_sum[k]);
00197 sinfo_free_image(&(img_sum[k]));
00198 sinfo_free_array_image(&img_sum);
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215 n_bad = sinfo_new_count_bad_pixels(img_tot) ;
00216 sinfo_msg ("number of bad pixels: %d\n", n_bad) ;
00217 cknull_nomsg(qclog_tbl = sinfo_qclog_init());
00218 ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,"QC MBP_MAP NBADPIX",
00219 n_bad,"No of bad pixels","%d"));
00220
00221 if (nmsk>1) {
00222 ck0(sinfo_pro_save_ima(img_tot,msk_ref_fits,sof,out_msk,
00223 PRO_MASTER_BP_MAP,qclog_tbl,
00224 plugin_id,config),
00225 "cannot save ima %s", out_msk);
00226
00227 } else {
00228 ck0(sinfo_pro_save_ima(img_tot,msk_set,sof,out_msk,
00229 PRO_MASTER_BP_MAP,qclog_tbl,
00230 plugin_id,config),
00231 "cannot save ima %s", out_msk);
00232 }
00233
00234 sinfo_free_image(&img_tot);
00235 sinfo_free_table(&qclog_tbl);
00236 sinfo_free_frameset(&msk_ref_fits);
00237 sinfo_free_frameset(&msk_set);
00238
00239 }
00240 return 0;
00241 cleanup:
00242
00243 sinfo_free_image(&img_tot);
00244 if(img_sum!=NULL) {
00245 for(i=0;i<nmsk;i++) {
00246 if(img_sum[i] != NULL) {
00247 sinfo_free_image(&(img_sum[i]));
00248 img_sum[i]=NULL;
00249 }
00250 }
00251 sinfo_free_array_image(&img_sum);
00252 img_sum=NULL;
00253 }
00254 sinfo_free_image(&img_set);
00255 sinfo_free_table(&qclog_tbl);
00256 sinfo_free_frameset(&msk_set);
00257 sinfo_free_frameset(&msk_ref_fits);
00258
00259 return -1;
00260
00261
00262 }