34 #include "sinfo_finddist_ini_by_cpl.h"
35 #include "sinfo_pro_types.h"
36 #include "sinfo_hidden.h"
37 #include "sinfo_raw_types.h"
38 #include "sinfo_ref_types.h"
43 parse_section_frames(finddist_config *, cpl_parameterlist* cpl_cfg,
44 cpl_frameset* sof, cpl_frameset** raw,
int* status);
46 parse_section_findlines(finddist_config *, cpl_parameterlist* cpl_cfg);
48 parse_section_wavecalib(finddist_config *, cpl_parameterlist* cpl_cfg);
50 parse_section_wavemap(finddist_config *, cpl_parameterlist* cpl_cfg);
52 parse_section_fitslits(finddist_config *, cpl_parameterlist* cpl_cfg);
54 parse_section_northsouthtest(finddist_config *, cpl_parameterlist* cpl_cfg);
56 parse_section_qclog (finddist_config * cfg, cpl_parameterlist* cpl_cfg);
78 sinfo_parse_cpl_input_finddist(cpl_parameterlist * cpl_cfg,
82 finddist_config * cfg ;
85 cfg = sinfo_finddist_cfg_create();
87 parse_section_findlines (cfg, cpl_cfg);
88 parse_section_wavecalib (cfg, cpl_cfg);
89 parse_section_wavemap (cfg, cpl_cfg);
90 parse_section_fitslits (cfg, cpl_cfg);
91 parse_section_northsouthtest (cfg, cpl_cfg);
92 parse_section_qclog(cfg,cpl_cfg);
93 parse_section_frames (cfg, cpl_cfg, sof, raw, &status);
97 sinfo_finddist_cfg_destroy(cfg);
117 parse_section_frames(finddist_config * cfg,
118 cpl_parameterlist * cpl_cfg,
128 cpl_frame* frame = NULL;
132 char spat_res[FILE_NAME_SZ];
133 char lamp_status[FILE_NAME_SZ];
134 char band[FILE_NAME_SZ];
142 d=sinfo_distpar_new();
150 sinfo_extract_raw_frames_type(sof,raw,PRO_FIBRE_NS_STACKED);
153 nraw=cpl_frameset_get_size(*raw);
156 "in frameset!Aborting...",nraw,PRO_FIBRE_NS_STACKED);
157 sinfo_distpar_delete(d);
158 sinfo_wcal_delete(w);
164 if(NULL != cpl_frameset_find(sof,PRO_WAVE_LAMP_STACKED)) {
165 frame = cpl_frameset_find(sof,PRO_WAVE_LAMP_STACKED);
166 strcpy(cfg -> inFrame,cpl_frame_get_filename(frame));
169 sinfo_distpar_delete(d);
170 sinfo_wcal_delete(w);
175 strcpy(cfg -> outName, DISTORTION_OUT_FILENAME);
178 if(NULL != cpl_frameset_find(sof,REF_LINE_ARC)) {
179 frame = cpl_frameset_find(sof,REF_LINE_ARC);
180 strcpy(cfg -> lineList,cpl_frame_get_filename(frame));
183 sinfo_distpar_delete(d);
184 sinfo_wcal_delete(w);
189 if(NULL != cpl_frameset_find(sof,PRO_FIBRE_NS_STACKED)) {
190 frame = cpl_frameset_find(sof,PRO_FIBRE_NS_STACKED);
191 strcpy(cfg -> nsFrame,cpl_frame_get_filename(frame));
194 sinfo_distpar_delete(d);
195 sinfo_wcal_delete(w);
201 if(NULL != cpl_frameset_find(sof,PRO_BP_MAP_DI)) {
202 frame = cpl_frameset_find(sof,PRO_BP_MAP_DI);
203 strcpy(cfg -> mask,cpl_frame_get_filename(frame));
206 sinfo_distpar_delete(d);
207 sinfo_wcal_delete(w);
214 frame = cpl_frameset_get_frame(*raw,0);
215 sinfo_get_spatial_res(frame,spat_res);
217 switch(sinfo_frame_is_on(frame))
220 strcpy(lamp_status,
"on");
223 strcpy(lamp_status,
"off");
226 strcpy(lamp_status,
"undefined");
229 strcpy(lamp_status,
"undefined");
233 sinfo_get_band(frame,band);
234 sinfo_msg(
"Spatial resolution: %s lamp_status: %s band: %s \n",
235 spat_res, lamp_status, band);
238 sinfo_get_ins_set(band,&ins_set);
239 if(NULL != cpl_frameset_find(sof,DRS_SETUP_WAVE)) {
240 frame = cpl_frameset_find(sof,DRS_SETUP_WAVE);
241 strcpy(cfg -> drs_setup,cpl_frame_get_filename(frame));
242 cpl_table* drs_tab = cpl_table_load(cfg->drs_setup,1,0);
243 w->wstart=cpl_table_get_double(drs_tab,
"W_START",ins_set,&check);
244 w->wgdisp1=cpl_table_get_double(drs_tab,
"W_DISP1",ins_set,&check);
245 w->wgdisp2=cpl_table_get_double(drs_tab,
"W_DISP2",ins_set,&check);
246 w->hw=cpl_table_get_int(drs_tab,
"W_HW",ins_set,&check);
247 w->fwhm=cpl_table_get_double(drs_tab,
"W_FWHM",ins_set,&check);
248 w->min_amp=cpl_table_get_double(drs_tab,
"W_MIN_AMP",ins_set,&check);
256 w->low_pos=cpl_table_get_int(drs_tab,
"W_LOW_POS",ins_set,&check);
257 w->hig_pos=cpl_table_get_int(drs_tab,
"W_HI_POS",ins_set,&check);
259 cfg -> guessBeginWavelength = w->wstart;
260 cfg -> guessDispersion1 = w->wgdisp1;
261 cfg -> guessDispersion2 = w->wgdisp2;
262 cfg -> halfWidth = w->hw;
263 cfg -> fwhm = w->fwhm;
264 cfg -> minAmplitude = w->min_amp;
272 cfg -> loPos = DISTORTION_LOPOS;
273 cfg -> hiPos = DISTORTION_HIPOS;
274 cfg -> pixel_tolerance = w->pixel_tol;
275 cfg-> diffTol = d->diff_tol[ins_set];
291 sinfo_distpar_delete(d);
292 sinfo_wcal_delete(w);
293 cpl_table_delete(drs_tab);
294 if(-1 == sinfo_check_rec_status(0)) {
301 sinfo_distpar_delete(d);
302 sinfo_wcal_delete(w);
308 nstp=sinfo_nstpar_new();
309 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.ns_fwhm");
310 if(cpl_parameter_get_default_flag(p) == 0) {
311 cfg->nsfwhm=nstp->fwhm[ins_set];
313 cfg->nsfwhm=cpl_parameter_get_double(p);
316 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.min_diff");
317 if(cpl_parameter_get_default_flag(p) == 0) {
318 cfg->minDiff=nstp->min_dif[ins_set];
320 cfg->minDiff=cpl_parameter_get_double(p);
322 sinfo_nstpar_delete(nstp);
341 parse_section_findlines(finddist_config * cfg,cpl_parameterlist * cpl_cfg)
346 p = cpl_parameterlist_find(cpl_cfg,
347 "sinfoni.distortion.min_diff_mean_med_col_int");
348 cfg -> mindiff = cpl_parameter_get_double(p);
350 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.half_width");
351 cfg -> halfWidth = cpl_parameter_get_int(p);
353 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.sigma");
354 cfg -> sigma = cpl_parameter_get_double(p);
368 parse_section_wavecalib(finddist_config * cfg,cpl_parameterlist * cpl_cfg)
374 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.fwhm");
375 cfg -> fwhm = cpl_parameter_get_double(p);
377 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.min_amplitude");
378 cfg -> minAmplitude = cpl_parameter_get_double(p);
380 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.max_residual");
381 cfg -> maxResidual = cpl_parameter_get_double(p);
383 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.n_a_coefficients");
384 cfg -> nrDispCoefficients = cpl_parameter_get_int(p);
386 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.n_b_coefficients");
387 cfg -> nrCoefCoefficients = cpl_parameter_get_int(p);
389 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.sigma_factor");
390 cfg -> sigmaFactor = cpl_parameter_get_double(p);
393 cfg -> nslitlets = NSLITLETS;
395 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.pixel_dist");
396 cfg -> pixeldist = cpl_parameter_get_int(p);
398 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.pixel_tol");
399 cfg -> pixel_tolerance = cpl_parameter_get_double(p);
413 parse_section_wavemap(finddist_config * cfg,cpl_parameterlist * cpl_cfg)
417 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.mag_factor");
418 cfg -> magFactor = cpl_parameter_get_int(p);
430 parse_section_fitslits(finddist_config * cfg,cpl_parameterlist * cpl_cfg)
435 cfg -> loPos = DISTORTION_LOPOS;
436 cfg -> hiPos = DISTORTION_HIPOS;
438 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.box_length");
439 cfg -> boxLength = cpl_parameter_get_int(p);
441 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.y_box");
442 cfg -> yBox = cpl_parameter_get_double(p);
444 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.diff_tol");
445 cfg -> diffTol = cpl_parameter_get_double(p);
457 parse_section_qclog (finddist_config * cfg, cpl_parameterlist* cpl_cfg)
461 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.qc_thresh_min");
462 cfg -> qc_thresh_min = cpl_parameter_get_int(p);
465 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.qc_thresh_max");
466 cfg -> qc_thresh_max = cpl_parameter_get_int(p);
480 parse_section_northsouthtest(finddist_config * cfg,cpl_parameterlist * cpl_cfg)
484 strcat(cfg -> fitsname, DISTORTION_NS_OUT_FILENAME);
486 cfg -> nslits = NSLITLETS;
488 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.ns_half_width");
489 cfg -> nshalfWidth = cpl_parameter_get_int(p);
491 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.ns_fwhm");
492 cfg -> nsfwhm = cpl_parameter_get_double(p);
494 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.min_diff");
495 cfg -> minDiff = cpl_parameter_get_double(p);
497 cfg -> estimated_dist = ESTIMATED_SLITLETS_DISTANCE;
499 p = cpl_parameterlist_find(cpl_cfg,
"sinfoni.distortion.dev_tol");
500 cfg -> devtol = cpl_parameter_get_double(p);
514 sinfo_finddist_free(finddist_config ** cfg)
518 sinfo_finddist_cfg_destroy(*cfg);
#define sinfo_msg_error(...)
Print an error message.