37 #include "sinfo_bp_lin.h"
38 #include "sinfo_detlin.h"
39 #include "sinfo_detlin_ini_by_cpl.h"
40 #include "sinfo_pro_save.h"
41 #include "sinfo_pro_types.h"
42 #include "sinfo_functions.h"
43 #include "sinfo_hidden.h"
44 #include "sinfo_error.h"
45 #include "sinfo_utils_wrappers.h"
87 sinfo_new_bp_search_lin(
const char* plugin_id,
88 cpl_parameterlist* config,
91 detlin_config * cfg=NULL;
92 cpl_imagelist * imgl=NULL ;
93 cpl_imagelist * coeffs_imgl=NULL;
94 cpl_image * img_tmp=NULL ;
95 cpl_image * mask=NULL;
96 cpl_vector* cube_mean=NULL;
97 cpl_frameset* raw=NULL;
98 cpl_frameset* raw_on=NULL;
99 cpl_frameset* raw_of=NULL;
101 cpl_frame* frm_dup=NULL;
103 cpl_table* qclog_tbl=NULL;
105 cpl_parameter *p=NULL;
106 cpl_polynomial *pol=NULL;
107 cpl_vector* vec_adl=NULL;
108 cpl_vector* vec_med=NULL;
113 char key_value[FILE_NAME_SZ];
114 char key_name[FILE_NAME_SZ];
115 cpl_table* det_lin=NULL;
118 cpl_table* gain=NULL;
133 check_nomsg(p=cpl_parameterlist_find(config,
"sinfoni.product.density"));
134 check_nomsg(pdensity=cpl_parameter_get_int(p));
139 check_nomsg(raw=cpl_frameset_new());
140 cknull(cfg = sinfo_parse_cpl_input_detlin(config,sof,&raw),
141 "could not parse .ini file!");
147 nff=cpl_frameset_get_size(raw);
148 raw_on=cpl_frameset_new();
149 raw_of=cpl_frameset_new();
153 frm=cpl_frameset_get_frame(raw,i);
154 frm_dup=cpl_frame_duplicate(frm);
155 if(sinfo_frame_is_on(frm)) {
156 cpl_frameset_insert(raw_on,frm_dup);
158 cpl_frameset_insert(raw_of,frm_dup);
185 sinfo_msg(
"Computes linearity");
186 cknull(det_lin=sinfo_compute_linearity(raw_on,raw_of),
187 "Error computing linearity");
189 check_nomsg(nraw=cpl_table_get_nrow(det_lin));
190 check_nomsg(vec_adl=cpl_vector_new(nraw));
191 check_nomsg(vec_med=cpl_vector_new(nraw));
193 for(i=0;i<nraw;i++) {
194 cpl_vector_set(vec_adl,i,cpl_table_get_double(det_lin,
"adl",i,status));
195 cpl_vector_set(vec_med,i,cpl_table_get_double(det_lin,
"med",i,status));
197 check_nomsg(pol=sinfo_polynomial_fit_1d_create(vec_adl,vec_med,
199 sinfo_free_my_vector(&vec_adl);
200 sinfo_free_my_vector(&vec_med);
202 cknull_nomsg(qclog_tbl=sinfo_qclog_init());
204 for(deg=0;deg<cfg->order+1;deg++) {
206 snprintf(key_name,MAX_NAME_SIZE-1,
"%s%" CPL_SIZE_FORMAT
"%s",
207 "QC BP-MAP LIN",deg,
" MED");
208 sinfo_qclog_add_double(qclog_tbl,key_name,
209 cpl_polynomial_get_coeff(pol,°),
210 "Linearity Polynomial Coeff",
"%g");
212 sinfo_free_polynomial(&pol);
214 check_nomsg(p = cpl_parameterlist_find(config,
"sinfoni.bp.method"));
215 snprintf(key_value, MAX_NAME_SIZE-1,
"%s",cpl_parameter_get_string(p));
216 ck0_nomsg(sinfo_qclog_add_string(qclog_tbl,
"QC BP-MAP METHOD",key_value,
217 "BP search method",
"%s"));
219 ck0(sinfo_pro_save_tbl(det_lin,raw,sof,BP_LIN_LIN_DET_INFO_OUT_FILENAME,
220 PRO_LIN_DET_INFO,qclog_tbl,plugin_id,config),
221 "cannot dump ims %s",BP_LIN_LIN_DET_INFO_OUT_FILENAME);
223 sinfo_free_table(&det_lin);
224 sinfo_free_table(&qclog_tbl);
229 sinfo_msg(
"Computes gain");
231 cknull(gain=sinfo_compute_gain(raw_on,raw_of),
"Error computing gain");
236 sinfo_free_frameset(&raw_on);
237 sinfo_free_frameset(&raw_of);
239 check_nomsg(ngain=cpl_table_get_nrow(gain));
240 cknull_nomsg(qclog_tbl=sinfo_qclog_init());
242 for(i=0;i<ngain;i++) {
243 snprintf(key_name,MAX_NAME_SIZE-1,
"%s%i",
"QC GAIN",i);
244 ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,
245 cpl_table_get_double(gain,
"gain",i,status),
246 "Detector gain",
"%g"));
249 ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,
"QC GAIN",
250 cpl_table_get_column_median(gain,
"gain"),
251 "Detector gain median",
"%g"));
252 ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,
"QC GAINERR",
253 cpl_table_get_column_stdev(gain,
"gain"),
254 "Detector gain error",
"%g"));
256 ck0(sinfo_pro_save_tbl(gain,raw,sof,BP_LIN_GAIN_OUT_FILENAME,
257 PRO_GAIN_INFO,qclog_tbl,plugin_id,config),
258 "cannot dump tbl %s", BP_LIN_GAIN_OUT_FILENAME);
260 sinfo_free_table(&gain);
261 sinfo_free_table(&qclog_tbl);
270 check_nomsg(imgl = cpl_imagelist_new());
271 for ( i = 0 ; i < cfg->nframes ; i++ )
273 if(sinfo_is_fits_file (cfg->framelist[i]) != 1) {
277 check_nomsg(img_tmp=cpl_image_load(cfg->framelist[i],CPL_TYPE_FLOAT,0,0));
278 check_nomsg(cpl_imagelist_set(imgl,img_tmp,i));
284 sinfo_msg(
"Search for bad pixels");
285 cknull(coeffs_imgl=sinfo_new_fit_intensity_course(imgl,
289 "could not fit polynomial and store coeffs in a data cube!");
291 sinfo_free_imagelist(&imgl) ;
292 check_nomsg(sz_imgl=cpl_imagelist_get_size(coeffs_imgl));
297 cube_mean=cpl_vector_new(sz_imgl);
300 cknull_nomsg(qclog_tbl=sinfo_qclog_init());
301 for(i=0;i<sz_imgl;i++) {
302 cpl_vector_set(cube_mean,i,
303 cpl_image_get_median(cpl_imagelist_get(coeffs_imgl,i)));
305 snprintf(key_name,MAX_NAME_SIZE-1,
"%s%i%s",
"QC BP-MAP LIN",i,
" MEAN");
306 snprintf(key_value,MAX_NAME_SIZE-1,
"%g",cpl_vector_get(cube_mean,i));
307 ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,
308 cpl_vector_get(cube_mean,i),
309 "Linearity Polynomial Coeff",
"%g"));
312 sinfo_free_my_vector(&cube_mean);
313 check_nomsg(p = cpl_parameterlist_find(config,
"sinfoni.bp.method"));
314 snprintf(key_value, MAX_NAME_SIZE-1,
"%s",cpl_parameter_get_string(p));
315 ck0_nomsg(sinfo_qclog_add_string(qclog_tbl,
"QC BP-MAP METHOD",key_value,
316 "BP search method",
"%s"));
319 ck0(sinfo_pro_save_ims(coeffs_imgl,raw,sof,cfg->coeffsCubeName,
320 PRO_BP_COEFF,qclog_tbl,plugin_id,config),
321 "cannot dump ims %s", cfg->coeffsCubeName);
323 sinfo_free_table(&qclog_tbl);
329 sinfo_msg(
"Generates bad pixel map");
330 cknull(mask = sinfo_new_search_bad_pixels (coeffs_imgl,
331 cfg->threshSigmaFactor,
332 cfg->nonlinearThresh,
335 "could not create bad pixel mask!") ;
337 sinfo_free_imagelist(&coeffs_imgl) ;
339 check_nomsg(n_bad = sinfo_new_count_bad_pixels(mask)) ;
340 sinfo_msg(
"No of bad pixels: %d", n_bad ) ;
343 cknull_nomsg(qclog_tbl=sinfo_qclog_init());
344 check_nomsg(p = cpl_parameterlist_find(config,
"sinfoni.bp.method"));
345 snprintf(key_value, MAX_NAME_SIZE-1,
"%s",cpl_parameter_get_string(p));
346 ck0_nomsg(sinfo_qclog_add_string(qclog_tbl,
"QC BP-MAP METHOD",key_value,
347 "BP search method",
"%s"));
349 ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,
"QC BP-MAP NBADPIX",n_bad,
350 "No of bad pixels",
"%d"));
352 ck0(sinfo_pro_save_ima(mask,raw,sof,cfg->outName,PRO_BP_MAP_NL,qclog_tbl,
354 "cannot save ima %s", cfg->outName);
364 sinfo_free_table(&qclog_tbl);
365 sinfo_free_image(&mask);
366 sinfo_free_frameset(&raw);
367 sinfo_detlin_free(&cfg);
372 sinfo_free_frameset(&raw_on);
373 sinfo_free_frameset(&raw_of);
375 sinfo_free_image(&mask) ;
376 sinfo_free_my_vector(&cube_mean);
377 sinfo_free_imagelist(&imgl);
378 sinfo_free_imagelist(&coeffs_imgl);
379 sinfo_free_table(&gain);
380 sinfo_free_table(&qclog_tbl);
381 sinfo_free_table(&det_lin);
382 sinfo_free_my_vector(&vec_adl);
383 sinfo_free_my_vector(&vec_med);
384 sinfo_free_polynomial(&pol);
385 sinfo_detlin_free(&cfg);
386 sinfo_free_frameset(&raw);
#define sinfo_msg_error(...)
Print an error message.