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
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
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
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
00220
00221
00222
00223
00224
00225
00226
00227
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