33 #include "sinfo_flat_ini_by_cpl.h"
34 #include "sinfo_error.h"
35 #include "sinfo_hidden.h"
36 #include "sinfo_pro_types.h"
37 #include "sinfo_raw_types.h"
38 #include "sinfo_functions.h"
39 #include "sinfo_file_handling.h"
43 void sinfo_flat_free_alloc(flat_config * cfg);
45 parse_section_frames(flat_config *, cpl_frameset* sof,
46 cpl_frameset** raw,
int* status);
47 static void parse_section_cleanmean(flat_config *, cpl_parameterlist* cpl_cfg);
48 static void parse_section_badpixel(flat_config *, cpl_parameterlist* cpl_cfg);
49 static void parse_section_badpix(flat_config *, cpl_parameterlist* cpl_cfg);
50 static void parse_section_thresh(flat_config *, cpl_parameterlist* cpl_cfg);
52 parse_section_qclog(flat_config * cfg, cpl_parameterlist * cpl_cfg);
75 sinfo_parse_cpl_input_flat(cpl_parameterlist* cpl_cfg,
79 flat_config * cfg = sinfo_flat_cfg_create();
85 parse_section_badpixel (cfg, cpl_cfg);
86 parse_section_cleanmean (cfg, cpl_cfg);
87 parse_section_badpix (cfg, cpl_cfg);
88 parse_section_thresh (cfg, cpl_cfg);
89 parse_section_qclog (cfg,cpl_cfg);
91 parse_section_frames (cfg, sof, raw, &status);
94 sinfo_flat_cfg_destroy(cfg);
111 parse_section_frames(flat_config * cfg,
121 int nditherobj, nditheroff ;
127 char spat_res[FILE_NAME_SZ];
128 char lamp_status[FILE_NAME_SZ];
129 char band[FILE_NAME_SZ];
132 cpl_frame* frame = NULL;
137 sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_LAMP);
138 nraw=cpl_frameset_get_size(*raw);
141 sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_NS);
145 nraw=cpl_frameset_get_size(*raw);
147 sinfo_msg(
"Frame %s or %s not found!", RAW_FLAT_LAMP,RAW_FLAT_NS);
152 nraw = cpl_frameset_get_size(*raw);
154 sinfo_msg(
"nraw=%d",nraw);
161 cknull_nomsg(frame = cpl_frameset_get_frame(*raw,0));
163 ck0_nomsg(sinfo_get_spatial_res(frame,spat_res));
164 switch(sinfo_frame_is_on(frame))
168 strcpy(lamp_status,
"on");
171 strcpy(lamp_status,
"off");
174 strcpy(lamp_status,
"undefined");
177 strcpy(lamp_status,
"undefined");
182 sinfo_get_band(frame,band);
183 sinfo_msg(
"Spatial resolution: %s lamp status: %s band: %s \n",
184 spat_res, lamp_status, band);
187 sinfo_get_ins_set(band,&ins_set);
191 cfg->framelist = cpl_malloc(nraw *
sizeof(
char*));
192 cfg->frametype = cpl_malloc(nraw *
sizeof(
int));
193 cfg->frameposition = cpl_malloc(nraw *
sizeof(
int));
201 for (i=0;i<nraw;i++) {
202 cfg->framelist[i]=NULL;
203 cfg->frametype[i]=-1;
204 cfg->frameposition[i]=-1;
208 cfg->nframes = nraw ;
210 for (i=0 ; i<nraw ; i++) {
211 frame = cpl_frameset_get_frame(*raw,i);
212 name= (
char*) cpl_frame_get_filename(frame);
213 if(sinfo_file_exists(name)==1) {
215 if(cpl_frame_get_tag(frame) != NULL) {
219 if((sinfo_frame_is_on(frame) == 0) ||
220 (sinfo_frame_is_sky(frame) == 1) )
223 cfg->framelist[i]=(
char*) cpl_frame_get_filename(frame);
224 cfg->frametype[i] = FRAME_OFF ;
226 if (sinfo_frame_is_dither(frame))
228 cfg->frameposition[i] = FRAME_POS2 ;
234 cfg->frameposition[i] = FRAME_POS1 ;
238 else if(sinfo_frame_is_on(frame) == 1)
240 cfg->framelist[i]=(
char*) cpl_frame_get_filename(frame);
241 cfg->frametype[i] = FRAME_ON ;
242 if (sinfo_frame_is_dither(frame))
244 cfg->frameposition[i] = FRAME_POS2 ;
250 cfg->frameposition[i] = FRAME_POS1 ;
278 if((nobj<1) && (nditherobj< 1)) {
280 sinfo_flat_free_alloc(cfg);
288 cfg->nditherobj = nditherobj ;
289 cfg->nditheroff = nditheroff ;
290 cfg->contains_sky = found_sky ;
291 cfg->contains_dither = found_dither ;
293 strcpy(cfg -> outName, LAMP_FLATS_OUT_FILENAME);
295 if(cfg->interpolInd != 0) {
297 if(NULL != cpl_frameset_find(sof,PRO_BP_MAP)) {
298 frame = cpl_frameset_find(sof,PRO_BP_MAP);
299 strcpy(cfg -> mask,cpl_frame_get_filename(frame));
300 if(sinfo_file_exists(cfg->mask)==1) {
303 cfg->mask, PRO_BP_MAP);
304 sinfo_flat_free_alloc(cfg);
312 sinfo_flat_free_alloc(cfg);
316 if(NULL != cpl_frameset_find(sof,PRO_SLIT_POS)) {
317 frame = cpl_frameset_find(sof,PRO_SLIT_POS);
318 strcpy(cfg -> slitposList,cpl_frame_get_filename(frame));
319 if(sinfo_file_exists(cfg->mask) == 1) {
322 cfg->slitposList, PRO_SLIT_POS);
323 sinfo_flat_free_alloc(cfg);
329 sinfo_flat_free_alloc(cfg);
349 parse_section_cleanmean(flat_config * cfg, cpl_parameterlist * cpl_cfg)
353 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.low_rejection");
354 cfg -> loReject = cpl_parameter_get_double(p);
356 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.high_rejection");
357 cfg -> hiReject = cpl_parameter_get_double(p);
369 parse_section_badpixel(flat_config * cfg, cpl_parameterlist * cpl_cfg)
373 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.interpol_index");
374 cfg -> interpolInd = cpl_parameter_get_bool(p);
376 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.max_rad");
377 cfg -> maxRad = cpl_parameter_get_int(p);
389 parse_section_badpix(flat_config * cfg, cpl_parameterlist * cpl_cfg)
394 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.bad_ind");
395 cfg -> badInd = cpl_parameter_get_bool(p);
397 strcpy(cfg -> maskname, LAMP_FLATS_OUT_BPMAP);
399 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.sigma_factor");
400 cfg -> sigmaFactor = cpl_parameter_get_double(p);
402 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.factor");
403 cfg -> factor = cpl_parameter_get_double(p);
405 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.iterations");
406 cfg -> iterations = cpl_parameter_get_int(p);
408 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.bad_low_rejection");
409 cfg -> badLoReject = cpl_parameter_get_double(p);
411 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.bad_high_rejection");
412 cfg -> badHiReject = cpl_parameter_get_double(p);
414 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.llx");
415 cfg -> llx = cpl_parameter_get_int(p);
417 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.lly");
418 cfg -> lly = cpl_parameter_get_int(p);
420 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.urx");
421 cfg -> urx = cpl_parameter_get_int(p);
423 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.ury");
424 cfg -> ury = cpl_parameter_get_int(p);
436 parse_section_thresh(flat_config * cfg,cpl_parameterlist* cpl_cfg)
440 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.thresh_ind");
441 cfg -> threshInd =cpl_parameter_get_bool(p);
443 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.mean_factor");
444 cfg -> meanfactor = cpl_parameter_get_double(p);
458 parse_section_qclog(flat_config * cfg, cpl_parameterlist * cpl_cfg)
462 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.qc_fpn_xmin1");
463 cfg -> qc_fpn_xmin1 = cpl_parameter_get_int(p);
465 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.qc_fpn_xmax1");
466 cfg -> qc_fpn_xmax1 = cpl_parameter_get_int(p);
468 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.qc_fpn_ymin1");
469 cfg -> qc_fpn_ymin1 = cpl_parameter_get_int(p);
471 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.qc_fpn_ymax1");
472 cfg -> qc_fpn_ymax1 = cpl_parameter_get_int(p);
474 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.qc_fpn_xmin2");
475 cfg -> qc_fpn_xmin2 = cpl_parameter_get_int(p);
477 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.qc_fpn_xmax2");
478 cfg -> qc_fpn_xmax2 = cpl_parameter_get_int(p);
480 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.qc_fpn_ymin2");
481 cfg -> qc_fpn_ymin2 = cpl_parameter_get_int(p);
483 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.qc_fpn_ymax2");
484 cfg -> qc_fpn_ymax2 = cpl_parameter_get_int(p);
486 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.qc_thresh_min");
487 cfg -> qc_thresh_min = cpl_parameter_get_int(p);
489 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.lamp_flats.qc_thresh_max");
490 cfg -> qc_thresh_max = cpl_parameter_get_int(p);
501 sinfo_flat_free(flat_config ** cfg)
503 if ((*cfg) != NULL) {
504 sinfo_flat_free_alloc(*cfg);
505 sinfo_flat_cfg_destroy(*cfg);
519 sinfo_flat_free_alloc(flat_config * cfg)
521 if(cfg->frametype != NULL){
522 cpl_free(cfg->frametype);
524 if(cfg->framelist != NULL) {
525 cpl_free(cfg->framelist);
527 if(cfg->frameposition != NULL) {
528 cpl_free(cfg->frameposition);
#define sinfo_msg_error(...)
Print an error message.