34 #include "sinfo_new_add_bp_map.h"
35 #include "sinfo_pro_save.h"
36 #include "sinfo_error.h"
37 #include "sinfo_utils_wrappers.h"
39 #include "sinfo_pro_types.h"
40 #include "sinfo_functions.h"
41 #include "sinfo_detlin.h"
72 sinfo_new_add_bp_map (
const char* plugin_id,
73 cpl_parameterlist* config,
74 cpl_frameset* sof,cpl_frameset* ref_set)
82 cpl_image** img_sum=NULL;
83 cpl_image* img_set=NULL;
84 cpl_image* img_tot=NULL;
85 cpl_frameset* msk_set=NULL;
86 cpl_frameset* msk_ref_fits=NULL;
87 cpl_frame* frame=NULL;
89 char frame_name[FILE_NAME_SZ];
90 char out_msk[FILE_NAME_SZ];
92 cpl_table* qclog_tbl=NULL;
96 strcpy(out_msk, MASTER_BPMAP_OUT_FILENAME);
100 check_nomsg(msk_set=cpl_frameset_new());
101 ck0_nomsg(sinfo_contains_frames_kind(sof,msk_set,
"BP_MAP"));
102 check_nomsg(nmsk = cpl_frameset_get_size(msk_set));
109 check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));
110 strcpy(frame_name,cpl_frame_get_filename(frame));
111 check_nomsg(tag = (
char*) cpl_frame_get_tag(frame));
113 check_nomsg(msk_ref_fits=cpl_frameset_new());
117 }
else if (nmsk==1) {
120 check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));
121 strcpy(frame_name,cpl_frame_get_filename(frame));
122 check_nomsg(tag = (
char*) cpl_frame_get_tag(frame));
126 ck0_nomsg(sinfo_contains_frames_kind(msk_set,
127 msk_ref_fits,PRO_BP_MAP_NO));
128 check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));
130 if (nmsk_ref_fits < 1) {
132 PRO_BP_MAP_NO,PRO_BP_MAP_DI);
134 ck0_nomsg(sinfo_contains_frames_kind(msk_set,
135 msk_ref_fits,PRO_BP_MAP_DI));
136 check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));
139 if (nmsk_ref_fits < 1) {
142 PRO_BP_MAP_DI,PRO_BP_MAP_NL);
144 ck0_nomsg(sinfo_contains_frames_kind(msk_set,
145 msk_ref_fits,PRO_BP_MAP_NL));
146 check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));
148 if (nmsk_ref_fits < 1) {
152 sinfo_free_frameset(&msk_ref_fits);
153 check_nomsg(msk_ref_fits=cpl_frameset_duplicate(msk_set));
154 check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));
155 check_nomsg(cpl_frameset_erase_frame(msk_set,frame));
156 check_nomsg(tag = (
char*) cpl_frame_get_tag(frame));
159 sinfo_msg(
"Uses as reference frame %s",PRO_BP_MAP_NL);
160 check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));
161 strcpy(frame_name,cpl_frame_get_filename(frame));
162 tag = (
char*) PRO_BP_MAP_NL;
165 sinfo_msg(
"Uses as reference frame %s",PRO_BP_MAP_DI);
166 check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));
167 strcpy(frame_name,cpl_frame_get_filename(frame));
168 tag = (
char*) PRO_BP_MAP_DI;
171 sinfo_msg(
"Uses as reference frame %s",PRO_BP_MAP_NO);
172 check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));
173 strcpy(frame_name,cpl_frame_get_filename(frame));
174 tag = (
char*) PRO_BP_MAP_NO;
178 check_nomsg(nmsk = cpl_frameset_get_size(msk_set));
179 cknull_nomsg(img_sum = (cpl_image**) cpl_calloc ((nmsk+1),
180 sizeof(cpl_image*))) ;
181 cknull_nomsg(img_sum[0]=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));
184 for (i=0;i<nmsk;i++) {
185 check_nomsg(frame = cpl_frameset_get_frame(msk_set,i));
186 check_nomsg(strcpy(frame_name,cpl_frame_get_filename(frame)));
187 check_nomsg(tmp_tag=(
char*)cpl_frame_get_tag(frame));
189 if(strcmp(tmp_tag,tag) == 0 ) {
190 cknull_nomsg(img_set=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));
191 check_nomsg(max=cpl_image_get_max(img_set));
192 if((strcmp(tmp_tag,PRO_BP_MAP_NL) == 0) && max>1 ) {
194 check_nomsg(cpl_image_threshold(img_set,0.5,0.9,1,0));
195 sinfo_free_image(&(img_sum[0]));
196 check_nomsg(img_sum[0]=cpl_image_duplicate(img_set));
201 cknull_nomsg(img_set=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));
202 check_nomsg(max=cpl_image_get_max(img_set));
203 if((strcmp(tmp_tag,PRO_BP_MAP_NL) == 0) && max>1 ) {
204 sinfo_msg(
"corr2 name=%s tag=%s",frame_name,tmp_tag);
205 check_nomsg(cpl_image_threshold(img_set,0.5,0.9,1,0));
208 cknull_nomsg(img_sum[k+1]=sinfo_new_combine_masks (img_sum[k], img_set));
210 sinfo_free_image(&img_set);
211 sinfo_free_image(&(img_sum[k-1]));
214 img_tot=cpl_image_duplicate(img_sum[k]);
215 sinfo_free_image(&(img_sum[k]));
216 sinfo_free_array_image(&img_sum);
233 n_bad = sinfo_new_count_bad_pixels(img_tot) ;
234 sinfo_msg (
"number of bad pixels: %d\n", n_bad) ;
235 cknull_nomsg(qclog_tbl = sinfo_qclog_init());
236 ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,
"QC MBP_MAP NBADPIX",
237 n_bad,
"No of bad pixels",
"%d"));
240 ck0(sinfo_pro_save_ima(img_tot,ref_set,sof,out_msk,
241 PRO_MASTER_BP_MAP,qclog_tbl,
243 "cannot save ima %s", out_msk);
246 ck0(sinfo_pro_save_ima(img_tot,ref_set,sof,out_msk,
247 PRO_MASTER_BP_MAP,qclog_tbl,
249 "cannot save ima %s", out_msk);
252 sinfo_free_image(&img_tot);
253 sinfo_free_table(&qclog_tbl);
254 sinfo_free_frameset(&msk_ref_fits);
255 sinfo_free_frameset(&msk_set);
261 sinfo_free_image(&img_tot);
263 for(i=0;i<nmsk;i++) {
264 if(img_sum[i] != NULL) {
265 sinfo_free_image(&(img_sum[i]));
269 sinfo_free_array_image(&img_sum);
272 sinfo_free_image(&img_set);
273 sinfo_free_table(&qclog_tbl);
274 sinfo_free_frameset(&msk_set);
275 sinfo_free_frameset(&msk_ref_fits);
277 if (cpl_error_get_code() != CPL_ERROR_NONE) {