31#include <mf_parameters.h>
33#include "moo_params.h"
64 cpl_ensure(recipe_id != NULL, CPL_ERROR_NULL_INPUT, NULL);
65 moo_params *res = (moo_params *)cpl_calloc(1,
sizeof(moo_params));
68 char *paramsid = cpl_sprintf(
"%s.%s", pid, recipe_id);
69 res->recipe_id = paramsid;
88 cpl_free(self->recipe_id);
111 cpl_parameterlist *list,
117 cpl_ensure_code(name != NULL, CPL_ERROR_NULL_INPUT);
118 cpl_ensure_code(params != NULL, CPL_ERROR_NULL_INPUT);
119 cpl_ensure_code(params->recipe_id != NULL, CPL_ERROR_NULL_INPUT);
121 cpl_parameter *p = NULL;
122 char *pname = cpl_sprintf(
"%s.%s", params->recipe_id, name);
123 cpl_ensure_code(pname != NULL, CPL_ERROR_NULL_INPUT);
125 moo_try_check(p = cpl_parameter_new_value(pname, CPL_TYPE_STRING, def,
126 params->recipe_id, val),
128 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, alias);
129 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
130 cpl_parameterlist_append(list, p);
135 return cpl_error_get_code();
156 cpl_parameterlist *list,
162 cpl_ensure_code(name != NULL, CPL_ERROR_NULL_INPUT);
163 cpl_ensure_code(params != NULL, CPL_ERROR_NULL_INPUT);
164 cpl_ensure_code(params->recipe_id != NULL, CPL_ERROR_NULL_INPUT);
167 char *pname = cpl_sprintf(
"%s.%s", params->recipe_id, name);
168 p = cpl_parameter_new_value(pname, CPL_TYPE_DOUBLE, def, params->recipe_id,
170 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, alias);
171 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
172 cpl_parameterlist_append(list, p);
175 return cpl_error_get_code();
196 cpl_parameterlist *list,
204 cpl_ensure_code(name != NULL, CPL_ERROR_NULL_INPUT);
205 cpl_ensure_code(params != NULL, CPL_ERROR_NULL_INPUT);
206 cpl_ensure_code(params->recipe_id != NULL, CPL_ERROR_NULL_INPUT);
208 char *pname = cpl_sprintf(
"%s.%s", params->recipe_id, name);
210 p = cpl_parameter_new_value(pname, CPL_TYPE_INT, def, params->recipe_id,
212 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, alias);
213 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
214 cpl_parameterlist_append(list, p);
217 return cpl_error_get_code();
238 cpl_parameterlist *list,
246 cpl_ensure_code(name != NULL, CPL_ERROR_NULL_INPUT);
247 cpl_ensure_code(params != NULL, CPL_ERROR_NULL_INPUT);
248 cpl_ensure_code(params->recipe_id != NULL, CPL_ERROR_NULL_INPUT);
250 char *pname = cpl_sprintf(
"%s.%s", params->recipe_id, name);
251 p = cpl_parameter_new_value(pname, CPL_TYPE_BOOL, def, params->recipe_id,
253 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, alias);
254 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
255 cpl_parameterlist_append(list, p);
258 return cpl_error_get_code();
276 const cpl_parameterlist *list,
279 const cpl_parameter *p;
281 char *pname = cpl_sprintf(
"%s.%s", self->recipe_id, name);
282 p = cpl_parameterlist_find_const(list, pname);
283 double res = cpl_parameter_get_double(p);
303 const cpl_parameterlist *list,
306 const cpl_parameter *p;
308 char *pname = cpl_sprintf(
"%s.%s", self->recipe_id, name);
309 p = cpl_parameterlist_find_const(list, pname);
310 int res = cpl_parameter_get_int(p);
331 const cpl_parameterlist *list,
334 const cpl_parameter *p;
336 char *pname = cpl_sprintf(
"%s.%s", self->recipe_id, name);
338 p = cpl_parameterlist_find_const(list, pname);
339 int res = cpl_parameter_get_bool(p);
361 const cpl_parameterlist *list,
364 const cpl_parameter *p;
366 char *pname = cpl_sprintf(
"%s.%s", self->recipe_id, name);
367 p = cpl_parameterlist_find_const(list, pname);
369 const char *res = cpl_parameter_get_string(p);
371 if (cpl_error_get_code() != CPL_ERROR_NONE) {
372 cpl_msg_error(
"moo_params",
"Can't get string parameter %s", pname);
379_moo_params_get_tab_double(
const moo_params *self,
381 const cpl_parameterlist *list,
384 double a, b, c, d, e, f;
386 int nb = sscanf(data,
"%lf,%lf,%lf,%lf,%lf,%lf", &a, &b, &c, &d, &e, &f);
412 cpl_error_set_message(
413 cpl_func, CPL_ERROR_ILLEGAL_INPUT,
414 "Invalid parameter %s (%s) : %d values are read 1,3 or 6 expected",
420_moo_params_get_tab3_double(
const moo_params *self,
422 const cpl_parameterlist *list,
428 int nb = sscanf(data,
"%lf,%lf,%lf", &a, &b, &c);
440 cpl_error_set_message(
441 cpl_func, CPL_ERROR_ILLEGAL_INPUT,
442 "Invalid parameter %s (%s) : %d values are read 1,3 expected", name,
448_moo_params_get_tab_int(
const moo_params *self,
450 const cpl_parameterlist *list,
453 int a, b, c, d, e, f;
455 int nb = sscanf(data,
"%d,%d,%d,%d,%d,%d", &a, &b, &c, &d, &e, &f);
481 cpl_error_set_message(
482 cpl_func, CPL_ERROR_ILLEGAL_INPUT,
483 "Invalid parameter %s (%s) : %d values are read 1,3 or 6 expected",
489_moo_params_get_tab3_int(
const moo_params *self,
491 const cpl_parameterlist *list,
496 int nb = sscanf(data,
"%d,%d,%d", &a, &b, &c);
508 cpl_error_set_message(
509 cpl_func, CPL_ERROR_ILLEGAL_INPUT,
510 "Invalid parameter %s (%s) : %d values are read 1 or 3 expected",
529 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
532 "multiple of sigma in sigma clipping", 5.0);
534 "minimum relative change in sigma for sigma clipping",
537 "maximum fraction of bad pixels allowed", 0.1);
539 "maximum number of iterations for sigma clipping", 2);
540 return cpl_error_get_code();
558 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
561 "multiple of sigma in global sigma clipping", 3.0);
563 self, list,
"hot_clip_diff",
"hot-clip-diff",
564 "minimum relative change in sigma for global sigma clipping", 0.1);
566 "maximum fraction of bad pixels allowed", 0.1);
568 "maximum number of iterations for global sigma clipping",
571 self, list,
"hot_local_winhsize",
"hot-local-winhsize",
572 "half window size in pixels for local detection of hot pixels.", 0);
574 "multiple of sigma in local sigma clipping", 5.0);
576 return cpl_error_get_code();
594 moo_hot_params *res =
595 (moo_hot_params *)cpl_calloc(1,
sizeof(moo_hot_params));
631 moo_nos_params *res =
632 (moo_nos_params *)cpl_calloc(1,
sizeof(moo_nos_params));
669 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
672 "prepare-ignore-detectors",
673 "ignore specified detector (0:used, 1:ignored), "
674 "ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2",
676 return cpl_error_get_code();
695 cpl_parameterlist *list,
698 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
699 cpl_ensure_code(method != NULL, CPL_ERROR_NULL_INPUT);
701 if (!((strcmp(method, MOO_CRH_METHOD_MEDIAN) == 0) ||
702 (strcmp(method, MOO_CRH_METHOD_MEAN) == 0) ||
703 (strcmp(method, MOO_CRH_METHOD_SIGCLIP) == 0))) {
704 return cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
705 "Invalid method %s", method);
709 "multiple of sigma in sigma clipping", 5.0);
711 "maximum number of iterations for sigma clipping", 5);
713 "method used for removing CRH (MEDIAN|SIGCLIP|MEAN).",
715 return cpl_error_get_code();
719moo_prepare_params_new(
void)
721 moo_prepare_params *res =
722 (moo_prepare_params *)cpl_calloc(1,
sizeof(moo_prepare_params));
727moo_prepare_params_delete(moo_prepare_params *self)
735moo_crh_params_new(
void)
737 moo_crh_params *res =
738 (moo_crh_params *)cpl_calloc(1,
sizeof(moo_crh_params));
743moo_crh_params_delete(moo_crh_params *self)
766 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
768 self, list,
"bpmnl_clip_kappa",
"bpmnl-clip-kappa",
769 "multiple of sigma in sigma-clipping, to create linearity bad pixel "
770 "map, for each detector, ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
771 "40,70,50,40,70,50");
773 "minimum SNR used in longest exposure frame for each "
774 "detector, ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
775 "10,10,10,10,10,10");
777 self, list,
"detect_saturated_ron_kappa",
"detect-saturated-ron-kappa",
778 "multiple of RON to detect flux plateau in pixel growth curves, for "
779 "each detector, ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
782 "detect-saturated-threshold",
783 "saturate detection threshold",
784 MOO_SATURATED_THRESHOLD);
785 return cpl_error_get_code();
789moo_linear_params_new(
void)
791 moo_linear_params *res =
792 (moo_linear_params *)cpl_calloc(1,
sizeof(moo_linear_params));
797moo_linear_params_delete(moo_linear_params *self)
820 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
823 "ron-estimation-method",
824 "RON estimation method (GLOBAL|LOCAL)",
825 MOO_RON_ESTIMATION_METHOD_GLOBAL);
827 return cpl_error_get_code();
831moo_bias_params_new(
void)
833 moo_bias_params *res =
834 (moo_bias_params *)cpl_calloc(1,
sizeof(moo_bias_params));
839moo_bias_params_delete(moo_bias_params *self)
861 cpl_parameterlist *list,
864 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
867 "subtract-bias-method",
868 "subtract bias method (MASTER|MEDIAN)", method);
870 return cpl_error_get_code();
873moo_correct_bias_params *
874moo_correct_bias_params_new(
void)
876 moo_correct_bias_params *res =
877 (moo_correct_bias_params *)cpl_calloc(1,
878 sizeof(moo_correct_bias_params));
883moo_correct_bias_params_delete(moo_correct_bias_params *self)
904 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
907 "method used for extraction (SUM|OPTIMAL)",
908 MOO_EXTRACT_METHOD_SUM);
910 self, list,
"extract_aperture",
"extract-aperture",
911 "size of fibre aperture in pixels , for each detector, ordered as "
912 "RI_1,YJ_1,H_1,RI_2,YJ_2,H_2. If value <=0, use "
913 "localization detected edges (lo,up) for extraction.",
914 "-1,-1,-1,-1,-1,-1");
934 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
935 cpl_ensure_code(list != NULL, CPL_ERROR_NULL_INPUT);
938 "keep INTERMEDIATE products", CPL_FALSE);
940 return cpl_error_get_code();
958 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
959 cpl_ensure_code(list != NULL, CPL_ERROR_NULL_INPUT);
962 self, list,
"quicklook_fibre_list",
"quicklook-fibre-list",
963 "list of FIBRE in fibres table to convert in CHECK_OBJECT",
"");
965 return cpl_error_get_code();
982 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
983 cpl_ensure_code(stream != NULL, CPL_ERROR_NULL_INPUT);
985 fprintf(stream,
"--moo_nos_params\n");
986 fprintf(stream,
"clip-diff %f\n", self->clip_diff);
987 fprintf(stream,
"clip-frac %f\n", self->clip_frac);
988 fprintf(stream,
"clip-niter %d\n", self->clip_niter);
989 fprintf(stream,
"clip-kappa %f\n", self->clip_kappa);
990 return CPL_ERROR_NONE;
1008 moo_nos_params *res = NULL;
1009 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
1010 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
1017 res->clip_diff = diff;
1018 res->clip_frac = maxfrac;
1019 res->clip_kappa = kappa;
1020 res->clip_niter = niter;
1040 moo_hot_params *res = NULL;
1041 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
1042 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
1051 res->clip_diff = diff;
1052 res->clip_frac = maxfrac;
1053 res->clip_kappa = kappa;
1054 res->clip_niter = niter;
1055 res->local_winhsize = lwinhsize;
1056 res->local_kappa = lkappa;
1075 moo_prepare_params *res = NULL;
1076 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
1077 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
1079 res = moo_prepare_params_new();
1080 _moo_params_get_tab_int(self, res->ignore_detector, list,
1081 "prepare_ignore_detectors");
1101 moo_crh_params *res = NULL;
1102 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
1103 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
1108 moo_try_assure(((strcmp(method, MOO_CRH_METHOD_MEDIAN) == 0) ||
1109 (strcmp(method, MOO_CRH_METHOD_SIGCLIP) == 0) ||
1110 (strcmp(method, MOO_CRH_METHOD_MEAN) == 0)),
1111 CPL_ERROR_ILLEGAL_INPUT,
1112 "Supported crh method are %s or %s (%s is given)",
1113 MOO_CRH_METHOD_MEDIAN, MOO_CRH_METHOD_SIGCLIP, method);
1115 res = moo_crh_params_new();
1116 res->method = method;
1139 moo_bias_params *res = NULL;
1140 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
1141 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
1144 const char *ron_estimation_method =
1147 moo_try_check(res = moo_bias_params_new(),
" ");
1148 res->ron_estimation_method = ron_estimation_method;
1166moo_correct_bias_params *
1168 const cpl_parameterlist *list)
1170 moo_correct_bias_params *res = NULL;
1171 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
1172 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
1175 const char *subtract_bias_method =
1177 moo_try_check(res = moo_correct_bias_params_new(),
" ");
1178 res->subtract_bias_method = subtract_bias_method;
1199 moo_extract_params *res = NULL;
1200 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
1201 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
1203 const char *method = NULL;
1206 moo_try_assure(((strcmp(method, MOO_EXTRACT_METHOD_SUM) == 0) ||
1207 (strcmp(method, MOO_EXTRACT_METHOD_OPTIMAL) == 0)),
1208 CPL_ERROR_ILLEGAL_INPUT,
1209 "Supported extract method are %s or %s (%s is given)",
1210 MOO_EXTRACT_METHOD_SUM, MOO_EXTRACT_METHOD_OPTIMAL, method);
1212 res = moo_extract_params_new();
1213 res->method = method;
1214 _moo_params_get_tab_double(self, res->aperture, list,
"extract_aperture");
1232moo_localise_params *
1235 moo_localise_params *res = NULL;
1236 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
1237 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
1247 double loc_xlim_fracmin =
1249 res = moo_localise_params_new();
1250 res->centralpos = central_pos;
1251 res->centralwidth = central_width;
1252 res->method = method;
1253 res->keep_points = keep_points;
1254 res->relativethresh = rthresh;
1255 res->wdiff_lim = wdiff;
1256 res->ydiff_lim = ydiff;
1257 _moo_params_get_tab_double(self, res->ref_snr, list,
"ref_snr");
1259 res->loc_xlim_hwin = loc_xlim_hwin;
1260 res->loc_xlim_fracmin = loc_xlim_fracmin;
1262 const char *backg_method =
1264 if ((strcmp(backg_method, MOO_LOCALISE_BACKG_METHOD_POLYNOMIAL) == 0) ||
1265 (strcmp(backg_method, MOO_LOCALISE_BACKG_METHOD_RUNNINGMIN) == 0)) {
1266 res->backg_method = backg_method;
1269 cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
1270 "Invalid parameter backg-method (%s) : "
1271 "POLYNOMIAL or RUNNINGMIN expected",
1274 _moo_params_get_tab_int(self, res->backg_winhsize, list,
1275 "loc_backg_winhsize");
1276 _moo_params_get_tab_int(self, res->backg_polydeg, list,
1277 "loc_backg_polydeg");
1278 _moo_params_get_tab_double(self, res->backg_clip_kappalow, list,
1279 "loc_backg_clip_kappalow");
1280 _moo_params_get_tab_double(self, res->backg_clip_kappaup, list,
1281 "loc_backg_clip_kappaup");
1282 _moo_params_get_tab_int(self, res->backg_clip_niter, list,
1283 "loc_backg_clip_niter");
1284 _moo_params_get_tab_int(self, res->detect_niter, list,
"loc_detect_niter");
1286 res->xgap_max = xgap_max;
1287 _moo_params_get_tab_double(self, res->goodptsfrac_min, list,
1288 "loc_goodptsfrac_min");
1290 int a, b, c, d, e, f;
1291 int nb = sscanf(poly_deg,
"%d,%d,%d,%d,%d,%d", &a, &b, &c, &d, &e, &f);
1293 for (
int i = 0; i < 6; i++) {
1294 res->polydeg[i] = a;
1298 for (
int i = 0; i < 2; i++) {
1299 res->polydeg[i * 3] = a;
1300 res->polydeg[i * 3 + 1] = b;
1301 res->polydeg[i * 3 + 2] = c;
1305 res->polydeg[0] = a;
1306 res->polydeg[1] = b;
1307 res->polydeg[2] = c;
1308 res->polydeg[3] = d;
1309 res->polydeg[4] = e;
1310 res->polydeg[5] = f;
1313 cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
1314 "Invalid parameter poly-deg (%s) : %d values are "
1315 "read and 1,3 or 6 expected",
1338 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, 0);
1339 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, 0);
1359 const cpl_parameterlist *list)
1361 cpl_array *res = NULL;
1362 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, 0);
1363 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, 0);
1367 char *strToken = strtok(
string,
",");
1369 res = cpl_array_new(size, CPL_TYPE_STRING);
1371 while (strToken != NULL) {
1373 cpl_array_set_size(res, size);
1374 cpl_array_set_string(res, size - 1, strToken);
1375 strToken = strtok(NULL,
",");
1381moo_localise_params *
1382moo_localise_params_new(
void)
1384 moo_localise_params *res =
1385 (moo_localise_params *)cpl_calloc(1,
sizeof(moo_localise_params));
1390moo_localise_params_delete(moo_localise_params *self)
1412 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
1413 cpl_ensure_code(list != NULL, CPL_ERROR_NULL_INPUT);
1416 self, list,
"central_pos",
"central-pos",
1417 "x location of the band where initial fibre positions are determined",
1420 "total width of the band in pixels", 25);
1422 self, list,
"loc_backg_method",
"loc-backg-method",
1423 "method for background fitting (POLYNOMIAL|RUNNINGMIN).",
"POLYNOMIAL");
1425 "loc-backg-winhsize",
1426 "half size of window for running minimum, for each "
1427 "detector, ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
1430 "list of background fit polynomial degree, for each "
1431 "detector, ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
1434 self, list,
"loc_backg_clip_kappalow",
"loc-backg-clip-kappalow",
1435 "list of lower multiples of sigma in background fitting, for each "
1436 "detector, ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
1439 self, list,
"loc_backg_clip_kappaup",
"loc-backg-clip-kappaup",
1440 "list of upper multiples of sigma in background fitting, for each "
1441 "detector, ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
1444 self, list,
"loc_backg_clip_niter",
"loc-backg-clip-niter",
1445 "list of numbers of iterations in background fitting, for each "
1446 "detector, ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
1449 self, list,
"loc_detect_niter",
"loc-detect-niter",
1450 "list of number of iterations to detect fibres, for each detector, "
1451 "ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
1452 "10,10,10,10,10,10");
1454 self, list,
"loc_xgap_max",
"loc-xgap-max",
1455 "maximum allowed consecutive centroid detection failures before stop.",
1458 self, list,
"loc_xlim_hwin",
"loc-xlim-hwin",
1459 "half window size in pixels for x trace limits detections.", 30);
1461 self, list,
"loc_xlim_fracmin",
"loc-xlim-fracmin",
1462 "minimal allowed fraction of centroid determinations in the defined "
1463 "window, below which trace limit is set.",
1466 self, list,
"loc_goodptsfrac_min",
"loc-goodptsfrac-min",
1467 "minimum fraction of good pixels to detect fibres, for each detector, "
1468 "ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
1469 "0.6,0.6,0.6,0.6,0.6,0.6");
1471 "list of polynomial degree for each detector, "
1472 "ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
1475 self, list,
"loc_method",
"loc-method",
1476 "method used for fitting centroid (BARYCENTER,GAUSSIAN)",
1477 MOO_LOCALISE_METHOD_BARYCENTER);
1479 "keep measured edge positions and flag map", CPL_FALSE);
1481 "relative detection threshold above background", 0.1);
1483 "maximum allowed variation of localisation width", 1);
1485 "maximum allowed variation of localisation centroid",
1488 self, list,
"ref_snr",
"ref-snr",
1489 "minimum reference SNR used for localisation tracking, for each "
1490 "detector, ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
1491 "80.,80.,80.,80.,80.,80.");
1495moo_model_flat_params *
1496moo_model_flat_params_new(
void)
1498 moo_model_flat_params *res =
1499 (moo_model_flat_params *)cpl_calloc(1,
sizeof(moo_model_flat_params));
1504moo_model_flat_params_delete(moo_model_flat_params *self)
1526 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
1527 cpl_ensure_code(list != NULL, CPL_ERROR_NULL_INPUT);
1530 "modelflat-oversample",
1531 "oversample factor in Y direction", 5);
1533 "step along X axis for computing parameters profile",
1536 self, list,
"modelflat_winhsize",
"modelflat-winhsize",
1537 "half size window along X axis for computing parameters profile", 20);
1553moo_molecfit_model_params *
1555 const cpl_parameterlist *list)
1557 moo_molecfit_model_params *res = NULL;
1558 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
1559 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
1562 res->continuum_const =
1583moo_molecfit_calctrans_params *
1585 const cpl_parameterlist *list)
1587 moo_molecfit_calctrans_params *res = NULL;
1588 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
1589 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
1592 _moo_params_get_tab3_double(self, res->min_snr, list,
1593 "molecfit_calctrans_min_snr");
1594 int filter_skyfibre =
1596 res->filter_skyfibre = filter_skyfibre;
1613moo_create_s1d_params *
1616 moo_create_s1d_params *res = NULL;
1617 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
1618 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
1622 res->do_s1d = do_s1d;
1639moo_model_flat_params *
1642 moo_model_flat_params *res = NULL;
1643 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
1644 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
1649 res = moo_model_flat_params_new();
1650 res->oversamp = oversample;
1651 res->winhsize = winhsize;
1657moo_extract_params_new(
void)
1659 moo_extract_params *res =
1660 (moo_extract_params *)cpl_calloc(1,
sizeof(moo_extract_params));
1665moo_extract_params_delete(moo_extract_params *self)
1672moo_compute_fibtrans_params *
1673moo_compute_fibtrans_params_new(
void)
1675 moo_compute_fibtrans_params *res = (moo_compute_fibtrans_params *)
1676 cpl_calloc(1,
sizeof(moo_compute_fibtrans_params));
1681moo_compute_fibtrans_params_delete(moo_compute_fibtrans_params *self)
1688moo_compute_resp_params *
1689moo_compute_resp_params_new(
void)
1691 moo_compute_resp_params *res =
1692 (moo_compute_resp_params *)cpl_calloc(1,
1693 sizeof(moo_compute_resp_params));
1698moo_compute_resp_params_delete(moo_compute_resp_params *self)
1706moo_wavesol_params_new(
void)
1708 moo_wavesol_params *res =
1709 (moo_wavesol_params *)cpl_calloc(1,
sizeof(moo_wavesol_params));
1715moo_wavesol_params_delete(moo_wavesol_params *self)
1723moo_rebin_params_new(
void)
1725 moo_rebin_params *res =
1726 (moo_rebin_params *)cpl_calloc(1,
sizeof(moo_rebin_params));
1731moo_rebin_params_delete(moo_rebin_params *self)
1738moo_sub_sky_stare_params *
1739moo_sub_sky_stare_params_new(
void)
1741 moo_sub_sky_stare_params *res = (moo_sub_sky_stare_params *)
1742 cpl_calloc(1,
sizeof(moo_sub_sky_stare_params));
1747moo_sub_sky_stare_params_delete(moo_sub_sky_stare_params *self)
1750 moo_skycorr_params_delete(self->sk);
1756moo_skycorr_params_new(
void)
1758 moo_skycorr_params *res =
1759 (moo_skycorr_params *)cpl_calloc(1,
sizeof(moo_skycorr_params));
1764moo_skycorr_params_delete(moo_skycorr_params *self)
1771moo_combine_pair_params *
1772moo_combine_pair_params_new(
void)
1774 moo_combine_pair_params *res =
1775 (moo_combine_pair_params *)cpl_calloc(1,
1776 sizeof(moo_combine_pair_params));
1781moo_combine_pair_params_delete(moo_combine_pair_params *self)
1788moo_target_table_params *
1789moo_target_table_params_new(
void)
1791 moo_target_table_params *res =
1792 (moo_target_table_params *)cpl_calloc(1,
1793 sizeof(moo_target_table_params));
1798moo_target_table_params_delete(moo_target_table_params *self)
1805moo_compute_snr_params *
1806moo_compute_snr_params_new(
void)
1808 moo_compute_snr_params *res =
1809 (moo_compute_snr_params *)cpl_calloc(1,
sizeof(moo_compute_snr_params));
1814moo_compute_snr_params_delete(moo_compute_snr_params *self)
1821moo_compute_slitoffset_params *
1822moo_compute_slitoffset_params_new(
void)
1824 moo_compute_slitoffset_params *res = (moo_compute_slitoffset_params *)
1825 cpl_calloc(1,
sizeof(moo_compute_slitoffset_params));
1830moo_compute_slitoffset_params_delete(moo_compute_slitoffset_params *self)
1838moo_coadd_params_new(
void)
1840 moo_coadd_params *res =
1841 (moo_coadd_params *)cpl_calloc(1,
sizeof(moo_coadd_params));
1846moo_coadd_params_delete(moo_coadd_params *self)
1869 "couple of fibre ids for reference transmission, for "
1870 "each spectrograph, ordered as TAS1,TAS2.",
1872 return cpl_error_get_code();
1891 self, list,
"computeresp_filter_winhsize",
1892 "computeresp-filter-winhsize",
1893 "median filter half window size, for each band, ordered as RI,YJ,H.",
1896 "computeresp-degree",
1897 "polynomial degree to fit the response, for each "
1898 "band, ordered as RI,YJ,H.",
1901 "computeresp-kappa-lo",
1902 "lower multiple of sigma in response fitting.", 1);
1904 "computeresp-kappa-up",
1905 "upper multiple of sigma in response fitting.", 4);
1907 "maximum rejected fraction to fit the response", 0.7);
1909 "number of iterations to fit the response", 5);
1911 return cpl_error_get_code();
1926moo_compute_fibtrans_params *
1928 const cpl_parameterlist *list)
1930 moo_compute_fibtrans_params *res = NULL;
1931 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
1932 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
1935 res = moo_compute_fibtrans_params_new();
1940 int nb = sscanf(ref,
"%d,%d", &a, &b);
1946 cpl_error_set_message(
1947 cpl_func, CPL_ERROR_ILLEGAL_INPUT,
1948 "Invalid parameter ref-fibres (%s) : %d values are read 2 expected",
1967moo_compute_resp_params *
1969 const cpl_parameterlist *list)
1971 moo_compute_resp_params *res = NULL;
1972 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
1973 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
1976 res = moo_compute_resp_params_new();
1977 _moo_params_get_tab3_int(self, res->filter_winhsize, list,
1978 "computeresp_filter_winhsize");
1979 _moo_params_get_tab3_int(self, res->degree, list,
"computeresp_degree");
2003 self, list,
"wavesol_linedetect_nlines",
"wavesol-linedetect-nlines",
2004 "list of number of expected lines for peak detection for each "
2005 "detector, ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
2006 "100,100,100,100,100,100");
2008 self, list,
"wavesol_linedetect_winhsize",
2009 "wavesol-linedetect-winhsize",
2010 "list of half size window in pixel for gaussian fit for peak detection "
2011 "using for pattern matching for each detector, ordered as "
2012 "RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
2015 "wavesol-ppm-tolerance",
2016 "list of pattern points matching tolerance for each "
2017 "detector, ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
2018 "0.007,0.009,0.007,0.007,0.009,0.007");
2020 "wavesol-ppm-wavemap-deg-x",
2021 "pattern matching polynomial wavelength map degree "
2022 "in x for each band, ordered as RI,YJ,H",
2025 "wavesol-ppm-wavemap-deg-y",
2026 "pattern matching polynomial wavelength map degree in y",
2030 "minimum FWHM to filter lines for each detector, "
2031 "ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
2032 "1.9,1.2,1.2,1.9,1.2,1.2");
2034 "maximum FWHM to filter lines for each detector, "
2035 "ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
2038 "minimum SNR to filter lunes for each detector, "
2039 "ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
2042 self, list,
"wavesol_linefit_method",
"wavesol-linefit-method",
2043 "method of centroid peak detection (GAUSSIAN|BARYCENTER)",
2044 MOO_WAVESOL_LINEFIT_GAUSSIAN);
2046 self, list,
"wavesol_linefit_winhsize",
"wavesol-linefit-winhsize",
2047 "list of half size window in pixel for gaussian fit for peak detection "
2048 "for each detector, ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
2051 self, list,
"wavesol_linefit_recentre",
"wavesol-linefit-recentre",
2052 "list of flags (0:FALSE, 1:TRUE) to use recentre mode for each "
2053 "detector, ordered as RI_1,YJ_1,H_1,RI_2,YJ_2,H_2.",
2056 "model of the polynomial wavelength solution (1D|2D)",
2057 MOO_WAVESOL_MODEL_1D);
2059 "wavesol-wavemap-deg-x",
2060 "polynomial wavelength map degree in x for each "
2061 "band, ordered as RI,YJ,H.",
2065 "wavesol-wavemap-deg-y",
2066 "polynomial wavelength map degree in y", 8);
2068 "wavesol-clip-kappa",
2069 "multiple of sigma in sigma clipping", 2.0);
2071 "maximal fractions of rejected point allowed", 0.7);
2073 "maximum number of iterations for sigma clipping", 10);
2075 return cpl_error_get_code();
2094 "choose to create the wavelength solution using sky "
2095 "lines (NONE or CHECK or UPDATE)",
2098 "minimum FWHM to filter lines for each detectors",
2099 "1.9,1.2,1.2,1.9,1.2,1.2");
2101 "maximum FWHM to filter lines for each detectors",
2104 self, list,
"wavesol_linefit_method",
"wavesol-linefit-method",
2105 "method of centroid peak detection (GAUSSIAN|BARYCENTER)",
2106 MOO_WAVESOL_LINEFIT_GAUSSIAN);
2108 "wavesol-linefit-winhsize",
2109 "list of half size window in pixel for gaussian fit "
2110 "for peak detection for each detectors",
2113 "wavesol-linefit-recentre",
2114 "list of flags (0:FALSE 1:TRUE) to use recentre mode "
2115 "for each detectors",
2118 "model of the polynomial wavelength solution (1D|2D)",
2119 MOO_WAVESOL_MODEL_1D);
2121 "wavesol-wavemap-deg-x",
2122 "polynomial wavelength map degree in x for each band",
2126 "wavesol-wavemap-deg-y",
2127 "polynomial wavelength map degree in y", 8);
2129 "wavesol-clip-kappa",
2130 "multiple of sigma in sigma clipping", 2.0);
2132 "maximal fractions of rejected point allowed", 0.7);
2134 "maximum number of iterations for sigma clipping", 10);
2136 return cpl_error_get_code();
2155 self, list,
"rebin_step",
"rebin-step",
2156 "list of bin step in nm for each band, ordered as RI,YJ,H.",
2159 "method of rebinning (INTEGRATE|INTERPOLATE)",
2160 MOO_REBIN_METHOD_INTEGRATE);
2162 "conserve the flux.", CPL_FALSE);
2163 return cpl_error_get_code();
2182 "subskystare-method",
2183 "method for sky subtraction (SIMPLE|SKYCORR)",
2184 MOO_SUB_SKY_STARE_METHOD_SIMPLE);
2186 self, list,
"subskystare_radius_sky",
"subskystare-radius-sky",
2187 "maximum distance in arcmin between sky and reference position", 1.5);
2189 self, list,
"subskystare_radius_stepr",
"subskystare-radius-stepr",
2190 "increase step in arcmin for the radius around reference position",
2193 self, list,
"subskystare_min_sky",
"subskystare-min-sky",
2194 "minimum number of sky to median in the region defined by radius-sky",
2197 "subskystare-maxdistslit",
2198 "maximum distance of sky fibres on slit", 20);
2200 "subskystare-mintrans",
2201 "minimum transmission of sky fibres on slit", 0);
2204 return cpl_error_get_code();
2223 "subskystare-method",
2224 "method for sky subtraction (SIMPLE|SKYCORR|NONE)",
2225 MOO_SUB_SKY_STARE_METHOD_SIMPLE);
2227 self, list,
"subskystare_radius_sky",
"subskystare-radius-sky",
2228 "maximum distance in arcmin between sky and reference position", 1.5);
2230 self, list,
"subskystare_radius_stepr",
"subskystare-radius-stepr",
2231 "increase step in arcmin for the radius around reference position",
2234 self, list,
"subskystare_min_sky",
"subskystare-min-sky",
2235 "minimum number of sky to median in the region defined by radius-sky",
2238 "subskystare-maxdistslit",
2239 "maximum distance of sky fibres on slit", 20);
2241 "subskystare-mintrans",
2242 "minimum transmission of sky fibres on slit", 0);
2245 return cpl_error_get_code();
2260moo_molecfit_model_params *
2263 moo_molecfit_model_params *res = (moo_molecfit_model_params *)
2264 cpl_calloc(1,
sizeof(moo_molecfit_model_params));
2298moo_molecfit_calctrans_params *
2301 moo_molecfit_calctrans_params *res = (moo_molecfit_calctrans_params *)
2302 cpl_calloc(1,
sizeof(moo_molecfit_calctrans_params));
2335moo_create_s1d_params *
2338 moo_create_s1d_params *res =
2339 (moo_create_s1d_params *)cpl_calloc(1,
sizeof(moo_create_s1d_params));
2375 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
2379 MF_PARAMETERS_CONTINUUM_CONST,
2380 MF_PARAMETERS_CONTINUUM_CONST_DESC,
2381 MF_PARAMETERS_CONTINUUM_CONST_INIT);
2383 MF_PARAMETERS_VAR_KERN, MF_PARAMETERS_VAR_KERN_DESC,
2384 MF_PARAMETERS_VAR_KERN_INIT);
2386 MF_PARAMETERS_KERN_MODE, MF_PARAMETERS_KERN_MODE_DESC,
2387 MF_PARAMETERS_KERN_MODE_INIT);
2389 MF_PARAMETERS_KERN_FAC, MF_PARAMETERS_KERN_FAC_DESC,
2390 MF_PARAMETERS_KERN_FAC_INIT);
2392 return cpl_error_get_code();
2411 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
2414 self, list,
"molecfit_calctrans_min_snr",
"molecfit-calctrans-min-snr",
2415 "list of minimum SNR (MEDIAN_SNR_{}_EXT) for each detectors",
2418 "molecfit-calctrans-filter-skyfibre",
2419 "filter the SKY fibres.", CPL_TRUE);
2421 return cpl_error_get_code();
2439 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
2442 "Create the S1D files from the PRODUCT SCI", CPL_FALSE);
2444 return cpl_error_get_code();
2462 self, list,
"subskystare_radius_sky",
"subskystare-radius-sky",
2463 "maximum distance in arcmin between sky and reference position", 1.5);
2465 self, list,
"subskystare_radius_stepr",
"subskystare-radius-stepr",
2466 "increase step in arcmin for the radius around reference position",
2469 self, list,
"subskystare_min_sky",
"subskystare-min-sky",
2470 "minimum number of sky to median in the region defined by radius-sky",
2473 "subskystare-maxdistslit",
2474 "maximum distance of sky fibres on slit", 20);
2476 "subskystare-mintrans",
2477 "minimum transmission of sky fibres on slit", 0);
2479 return cpl_error_get_code();
2498 self, list,
"skycorr_ltol",
"skycorr-ltol",
2499 "LINE IDENTIFICATION: Relative FWHM convergence criterion ", 0.01);
2501 self, list,
"skycorr_min_line_dist_fac",
"skycorr-min-line-dist-fac",
2502 "LINE IDENTIFICATION: Minimum distance to neighbouring lines for\
2503 classification as isolated line:<MIN_LINE_DIST> * <FWHM> [pixel] ",
2506 self, list,
"skycorr_min_line_flux_fac",
"skycorr-min-line-flux-fac",
2507 "LINE IDENTIFICATION: Relative lower flux limit for isolated lines",
2510 self, list,
"skycorr_fluxlim",
"skycorr-fluxlim",
2511 "LINE IDENTIFICATION: Minimum line peak flux for consideration of\
2512 lines from airglow line list:<FLUXLIM> * <median flux of identified lines>\
2513 Automatic search -> FLUXLIM = -1",
2516 self, list,
"skycorr_ftol",
"skycorr-ftol",
2517 "FITTING OF SKY LINES: Relative chi^2 MPFIT convergence criterion",
2520 self, list,
"skycorr_xtol",
"skycorr-xtol",
2521 "FITTING OF SKY LINES: Relative parameter MPFIT convergence criterion",
2524 self, list,
"skycorr_wtol",
"skycorr-wtol",
2525 "FITTING OF SKY LINES: Relative chi^2 convergence criterion for iterative improvement of \
2529 self, list,
"skycorr_cheby_max",
"skycorr-cheby-max",
2530 "FITTING OF SKY LINES: maximum degree of Chebyshev polynomial for\
2531 wavelength grid correction:-1 = no correction,0 = linear term (coef. = 1) \
2532is also considered but not fitted",
2535 self, list,
"skycorr_cheby_min",
"skycorr-cheby-min",
2536 "FITTING OF SKY LINES: Minimum degree of Chebyshev polynomial for \
2537wavelength grid correction. CHEBY_MIN <= CHEBY_MAX: - Iterative increase of \
2538polynomial degree at least until CHEBY_MIN - Procedure stops if chi^2 gets \
2539worse or CHEBY_MAX is reached.- Results of degree with best chi^2 are taken. \
2540CHEBY_MIN > CHEBY_MAX:- Iterative increase of polynomial degree until CHEBY_MAX \
2541is reached.- Results of degree CHEBY_MAX are taken. ",
2545 self, list,
"skycorr_cheby_const",
"skycorr-cheby-const",
2546 "FITTING OF SKY LINES: Initial constant term for wavelength grid \
2547correction (shift relative to half wavelength range)",
2550 "Type of rebinning: 0 = simple rebinning \
2551(summation of pixel fractions) 1 = convolution with asymmetric, damped sinc kernel",
2554 self, list,
"skycorr_weightlim",
"skycorr-weightlim",
2555 "minimum relative weight of the strongest line group of a pixel for\
2556 including a pixel in the line fitting procedure",
2560 self, list,
"skycorr_siglim",
"skycorr-siglim",
2561 "sigma limit for excluding outliers (e.g. object emission lines) from "
2562 "estimate of group flux correction factors.",
2566 self, list,
"skycorr_fitlim",
"skycorr-fitlim",
2567 "Lower relative uncertainty limit for the consideration of a line \
2568group for the fitting procedure. The value is compared to the sigma-to-mean \
2569ratio of the group-specific flux correction factors of the initial estimate \
2570(0. -> include all fittable line groups).",
2574 return cpl_error_get_code();
2592 cpl_parameterlist *list,
2596 self, list,
"combine_pair_optimal",
"combine-pair-optimal",
2597 "Extract the best sky-subtracted spectra for each target", value);
2599 return cpl_error_get_code();
2617 cpl_parameterlist *list,
2621 "ignore SKY fibres as OBJECT.", value);
2623 return cpl_error_get_code();
2642 "list of minimum wavelength in nm for each detectors",
2645 "list of maximum wavelength in nm for each detectors",
2647 return cpl_error_get_code();
2666 "compute-slitoffset-min",
"min offset range", -3);
2668 "compute-slitoffset-max",
"max offset range", 3);
2670 "compute-slitoffset-step",
"offset step", 0.1);
2671 return cpl_error_get_code();
2690 "method for co-adding spectra: (MEAN|MEDIAN|SIGCLIP)",
2691 MOO_COADD_METHOD_MEAN);
2693 "multiple of sigma in 1D spectra combination. ", 3.0);
2695 "Number of iterations for sigma clipping", 5);
2697 return cpl_error_get_code();
2716 moo_wavesol_params *res = NULL;
2717 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
2718 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
2720 res = moo_wavesol_params_new();
2721 _moo_params_get_tab_int(self, res->linedetect_nlines, list,
2722 "wavesol_linedetect_nlines");
2723 _moo_params_get_tab_int(self, res->linedetect_winhsize, list,
2724 "wavesol_linedetect_winhsize");
2725 _moo_params_get_tab_double(self, res->tolerance, list,
2726 "wavesol_ppm_tolerance");
2727 _moo_params_get_tab_int(self, res->ppm_wavemap_degx, list,
2728 "wavesol_ppm_wavemap_deg_x");
2729 res->ppm_wavemap_degy =
2735 _moo_params_get_tab_int(self, res->wavemap_degx, list,
2736 "wavesol_wavemap_deg_x");
2738 res->clip_frac = frac;
2739 res->clip_niter = niter;
2740 res->clip_kappa = kappa;
2741 res->wavemap_degy = degy;
2742 res->control = MOO_WAVESOL_CONTROL_NONE;
2743 const char *linefit_method =
2746 if ((strcmp(linefit_method, MOO_WAVESOL_LINEFIT_GAUSSIAN) == 0) ||
2747 (strcmp(linefit_method, MOO_WAVESOL_LINEFIT_BARYCENTER) == 0)) {
2748 res->linefit_method = linefit_method;
2751 cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
2752 "Invalid parameter wavesol-linefit-method (%s) : "
2753 "GAUSSIAN or BARYCENTER expected",
2756 _moo_params_get_tab_int(self, res->linefit_winhsize, list,
2757 "wavesol_linefit_winhsize");
2758 _moo_params_get_tab_int(self, res->linefit_recentre, list,
2759 "wavesol_linefit_recentre");
2760 _moo_params_get_tab_double(self, res->fwhm_min, list,
"wavesol_min_fwhm");
2761 _moo_params_get_tab_double(self, res->fwhm_max, list,
"wavesol_max_fwhm");
2762 _moo_params_get_tab_double(self, res->min_snr, list,
"wavesol_min_sn");
2764 if ((strcmp(model, MOO_WAVESOL_MODEL_1D) == 0) ||
2765 (strcmp(model, MOO_WAVESOL_MODEL_2D) == 0)) {
2769 cpl_error_set_message(
2770 cpl_func, CPL_ERROR_ILLEGAL_INPUT,
2771 "Invalid parameter wavesol-model (%s) : 1D or 2D expected", model);
2791 const cpl_parameterlist *list)
2793 moo_wavesol_params *res = NULL;
2794 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
2795 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
2797 res = moo_wavesol_params_new();
2802 _moo_params_get_tab_int(self, res->wavemap_degx, list,
2803 "wavesol_wavemap_deg_x");
2805 res->clip_frac = frac;
2806 res->clip_niter = niter;
2807 res->clip_kappa = kappa;
2808 res->wavemap_degy = degy;
2810 if ((strcmp(control, MOO_WAVESOL_CONTROL_NONE) == 0) ||
2811 (strcmp(control, MOO_WAVESOL_CONTROL_CHECK) == 0) ||
2812 (strcmp(control, MOO_WAVESOL_CONTROL_UPDATE) == 0)) {
2813 res->control = control;
2816 cpl_error_set_message(
2817 cpl_func, CPL_ERROR_ILLEGAL_INPUT,
2818 "Invalid parameter wavesol-control (%s) : NONE or CHECK or UPDATE",
2821 const char *linefit_method =
2823 if ((strcmp(linefit_method, MOO_WAVESOL_LINEFIT_GAUSSIAN) == 0) ||
2824 (strcmp(linefit_method, MOO_WAVESOL_LINEFIT_BARYCENTER) == 0)) {
2825 res->linefit_method = linefit_method;
2828 cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
2829 "Invalid parameter wavesol-linefit-method (%s) : "
2830 "GAUSSIAN or BARYCENTER expected",
2833 _moo_params_get_tab_int(self, res->linefit_winhsize, list,
2834 "wavesol_linefit_winhsize");
2835 _moo_params_get_tab_int(self, res->linefit_recentre, list,
2836 "wavesol_linefit_recentre");
2837 _moo_params_get_tab_double(self, res->fwhm_min, list,
"wavesol_min_fwhm");
2838 _moo_params_get_tab_double(self, res->fwhm_max, list,
"wavesol_max_fwhm");
2840 if ((strcmp(model, MOO_WAVESOL_MODEL_1D) == 0) ||
2841 (strcmp(model, MOO_WAVESOL_MODEL_2D) == 0)) {
2845 cpl_error_set_message(
2846 cpl_func, CPL_ERROR_ILLEGAL_INPUT,
2847 "Invalid parameter wavesol-model (%s) : 1D or 2D expected", model);
2868 moo_rebin_params *res = NULL;
2869 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
2870 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
2873 res = moo_rebin_params_new();
2875 const char *rebin_method =
2878 if ((strcmp(rebin_method, MOO_REBIN_METHOD_INTERPOLATE) == 0) ||
2879 (strcmp(rebin_method, MOO_REBIN_METHOD_INTEGRATE) == 0)) {
2880 res->method = rebin_method;
2883 cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
2884 "Invalid parameter rebin-method (%s) : "
2885 "INTERPOLATE or INTEGRATE expected",
2890 _moo_params_get_tab3_double(self, res->step, list,
"rebin_step");
2908moo_sub_sky_stare_params *
2910 const cpl_parameterlist *list)
2912 moo_sub_sky_stare_params *res = NULL;
2913 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
2914 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
2917 res = moo_sub_sky_stare_params_new();
2920 if ((strcmp(res->method, MOO_SUB_SKY_STARE_METHOD_SIMPLE) != 0) &&
2921 (strcmp(res->method, MOO_SUB_SKY_STARE_METHOD_SKYCORR) != 0) &&
2922 (strcmp(res->method, MOO_SUB_SKY_STARE_METHOD_NONE) != 0)) {
2923 cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
2924 "Invalid parameter sub-sky-stare-method (%s) : "
2925 "SIMPLE, SKYCORR or NONE expected",
2927 moo_sub_sky_stare_params_delete(res);
2956moo_sub_sky_stare_params *
2958 const cpl_parameterlist *list)
2960 moo_sub_sky_stare_params *res = NULL;
2961 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
2962 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
2965 res = moo_sub_sky_stare_params_new();
2966 res->method = MOO_SUB_SKY_STARE_METHOD_SIMPLE;
2996 moo_skycorr_params *res = NULL;
2997 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
2998 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
3001 res = moo_skycorr_params_new();
3004 res->min_line_dist_fac =
3006 res->min_line_flux_fac =
3034moo_combine_pair_params *
3036 const cpl_parameterlist *list)
3038 moo_combine_pair_params *res = NULL;
3039 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
3040 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
3043 res = moo_combine_pair_params_new();
3062moo_target_table_params *
3064 const cpl_parameterlist *list)
3066 moo_target_table_params *res = NULL;
3067 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
3068 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
3071 res = moo_target_table_params_new();
3090moo_compute_snr_params *
3092 const cpl_parameterlist *list)
3094 moo_compute_snr_params *res = NULL;
3095 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
3096 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
3099 res = moo_compute_snr_params_new();
3100 _moo_params_get_tab3_double(self, res->wmin, list,
"compute_snr_wmin");
3101 _moo_params_get_tab3_double(self, res->wmax, list,
"compute_snr_wmax");
3118moo_compute_slitoffset_params *
3120 const cpl_parameterlist *list)
3122 moo_compute_slitoffset_params *res = NULL;
3123 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
3124 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
3127 res = moo_compute_slitoffset_params_new();
3149 moo_coadd_params *res = NULL;
3150 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
3151 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
3154 res = moo_coadd_params_new();
3157 if ((strcmp(method, MOO_COADD_METHOD_MEAN) == 0) ||
3158 (strcmp(method, MOO_COADD_METHOD_MEDIAN) == 0) ||
3159 (strcmp(method, MOO_COADD_METHOD_SIGCLIP) == 0)) {
3160 res->method = method;
3163 cpl_error_set_message(
3164 cpl_func, CPL_ERROR_ILLEGAL_INPUT,
3165 "Invalid parameter coadd-method (%s) : MEAN or MEDIAN or SIGCLIP",
3188 moo_linear_params *res = NULL;
3189 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
3190 cpl_ensure(list != NULL, CPL_ERROR_NULL_INPUT, NULL);
3192 res = moo_linear_params_new();
3193 _moo_params_get_tab_double(self, res->kappa, list,
"bpmnl_clip_kappa");
3194 _moo_params_get_tab_double(self, res->saturate_kappa, list,
3195 "detect_saturated_ron_kappa");
3196 _moo_params_get_tab_double(self, res->min_snr, list,
"bpmnl_min_snr");
3197 res->saturate_threshold =
moo_coadd_params * moo_params_get_coadd(const moo_params *self, const cpl_parameterlist *list)
Get coadd parameters from moons parameters list.
cpl_error_code moo_params_add_compute_fibtrans(moo_params *self, cpl_parameterlist *list)
Add default parameters for compute_fibtrans.
cpl_error_code moo_params_add_create_s1d(moo_params *self, cpl_parameterlist *list)
Add default parameters for create_s1d.
void moo_create_s1d_params_delete(moo_create_s1d_params *self)
Delete a moo_create_s1d_params.
moo_nos_params * moo_nos_params_new(void)
Create a new empty compute noise map set of parameters.
cpl_array * moo_params_get_quicklook_fibre_list(const moo_params *self, const cpl_parameterlist *list)
Get quicklook_fibre_list parameter from moons parameters list.
moo_molecfit_calctrans_params * moo_molecfit_calctrans_params_new(void)
Create a new empty molecfit_calctrans set of parameters.
cpl_error_code moo_nos_params_dump(const moo_nos_params *self, FILE *stream)
Dump nos params.
cpl_error_code moo_params_add_skycorr(moo_params *self, cpl_parameterlist *list)
Add default parameters for moo_skycorr.
cpl_error_code moo_params_add_extract(moo_params *self, cpl_parameterlist *list)
Add default parameters for extraction.
cpl_error_code moo_params_add_sub_sky_stare(moo_params *self, cpl_parameterlist *list)
Add default parameters for moo_sub_sky_stare.
cpl_error_code moo_params_add_compute_snr(moo_params *self, cpl_parameterlist *list)
Add default parameters for moo_sci_compute_snr.
moo_create_s1d_params * moo_params_get_create_s1d(const moo_params *self, const cpl_parameterlist *list)
Get create s1d parameters from moons parameters list.
const char * moo_params_get_string(const moo_params *self, const cpl_parameterlist *list, const char *name)
Get string parameter from moons parameters list.
cpl_error_code moo_params_add_molecfit_calctrans(moo_params *self, cpl_parameterlist *list)
Add default parameters for molecfit_calctrans.
cpl_error_code moo_params_add_linear(moo_params *self, cpl_parameterlist *list)
Add default parameters for linear.
int moo_params_get_int(const moo_params *self, const cpl_parameterlist *list, const char *name)
Get int parameter from moons parameters list.
moo_prepare_params * moo_params_get_prepare(const moo_params *self, const cpl_parameterlist *list)
Get remove prepare parameters from moons parameters list.
cpl_error_code moo_params_add_nos(moo_params *self, cpl_parameterlist *list)
Add default parameters for compute noise map.
moo_sub_sky_stare_params * moo_params_get_sub_sky_stare(const moo_params *self, const cpl_parameterlist *list)
Get sub sky stare parameters from moons parameters list.
int moo_params_get_keep_temp(const moo_params *self, const cpl_parameterlist *list)
Get keep-temp parameter from moons parameters list.
cpl_error_code moo_params_add_int(moo_params *params, cpl_parameterlist *list, const char *name, const char *alias, const char *def, int val)
Add int parameter to moons parameters list.
moo_create_s1d_params * moo_create_s1d_params_new(void)
Create a new empty create_s1d set of parameters.
moo_molecfit_calctrans_params * moo_params_get_molecfit_calctrans(const moo_params *self, const cpl_parameterlist *list)
Get molecfit calctrans parameters from moons parameters list.
moo_localise_params * moo_params_get_localise(const moo_params *self, const cpl_parameterlist *list)
Get localisation parameters from moons parameters list.
moo_compute_resp_params * moo_params_get_compute_resp(const moo_params *self, const cpl_parameterlist *list)
Get compute response parameters from moons parameters list.
int moo_params_get_bool(const moo_params *self, const cpl_parameterlist *list, const char *name)
Get boolean parameter from moons parameters list.
moo_wavesol_params * moo_params_get_wavesol(const moo_params *self, const cpl_parameterlist *list)
Get wavesol parameters from moons parameters list.
moo_skycorr_params * moo_params_get_skycorr(const moo_params *self, const cpl_parameterlist *list)
Get skycorr parameters from moons parameters list.
moo_bias_params * moo_params_get_bias(const moo_params *self, const cpl_parameterlist *list)
Get bias parameters from moons parameters list.
cpl_error_code moo_params_add_compute_slitoffset(moo_params *self, cpl_parameterlist *list)
Add default parameters for moo_sci_compute_slitoffset.
moo_compute_slitoffset_params * moo_params_get_compute_slitoffset(const moo_params *self, const cpl_parameterlist *list)
Get compute_slitoffset parameters from moons parameters list.
cpl_error_code moo_params_add_hot(moo_params *self, cpl_parameterlist *list)
Add default parameters for compute hot map.
moo_combine_pair_params * moo_params_get_combine_pair(const moo_params *self, const cpl_parameterlist *list)
Get combine_pair parameters from moons parameters list.
cpl_error_code moo_params_add_target_table(moo_params *self, cpl_parameterlist *list, int value)
Add default parameters for moo_create_target_table.
cpl_error_code moo_params_add_sub_sky_stare_simple(moo_params *self, cpl_parameterlist *list)
Add default parameters for moo_sub_sky_stare.
cpl_error_code moo_params_add_combine_pair(moo_params *self, cpl_parameterlist *list, int value)
Add default parameters for moo_combine_pair.
moo_target_table_params * moo_params_get_target_table(const moo_params *self, const cpl_parameterlist *list)
Get target_table parameters from moons parameters list.
moo_sub_sky_stare_params * moo_params_get_sub_sky_stare_simple(const moo_params *self, const cpl_parameterlist *list)
Get sub sky stare simple parameters from moons parameters list.
cpl_error_code moo_params_add_string(moo_params *params, cpl_parameterlist *list, const char *name, const char *alias, const char *def, const char *val)
Add string parameter to moons parameters list.
moo_model_flat_params * moo_params_get_model_flat(const moo_params *self, const cpl_parameterlist *list)
Get model flat parameters from moons parameters list.
void moo_nos_params_delete(moo_nos_params *self)
Delete a moo_nos_params.
cpl_error_code moo_params_add_science_wavesol(moo_params *self, cpl_parameterlist *list)
Add default science parameters for moo_wavesol.
cpl_error_code moo_params_add_quicklook_fibre_list(moo_params *self, cpl_parameterlist *list)
Add default parameters for quicklook.
moo_compute_fibtrans_params * moo_params_get_compute_fibtrans(const moo_params *self, const cpl_parameterlist *list)
Get compute fibtrans parameters from moons parameters list.
moo_linear_params * moo_params_get_linear(const moo_params *self, const cpl_parameterlist *list)
Get linear parameters from moons parameters list.
moo_correct_bias_params * moo_params_get_correct_bias(const moo_params *self, const cpl_parameterlist *list)
Get correct_bias parameters from moons parameters list.
void moo_molecfit_model_params_delete(moo_molecfit_model_params *self)
Delete a moo_molecfit_model_params.
cpl_error_code moo_params_add_crh(moo_params *self, cpl_parameterlist *list, const char *method)
Add default parameters for remove crh.
void moo_molecfit_calctrans_params_delete(moo_molecfit_calctrans_params *self)
Delete a moo_molecfit_calctrans_params.
moo_extract_params * moo_params_get_extract(const moo_params *self, const cpl_parameterlist *list)
Get extraction parameters from moons parameters list.
cpl_error_code moo_params_add_bool(moo_params *params, cpl_parameterlist *list, const char *name, const char *alias, const char *def, int val)
Add boolean parameter to moons parameters list.
moo_wavesol_params * moo_params_get_science_wavesol(const moo_params *self, const cpl_parameterlist *list)
Get science_wavesol parameters from moons parameters list.
void moo_params_delete(moo_params *self)
Delete a moo_params.
moo_crh_params * moo_params_get_crh(const moo_params *self, const cpl_parameterlist *list)
Get remove crh parameters from moons parameters list.
double moo_params_get_double(const moo_params *self, const cpl_parameterlist *list, const char *name)
Get double parameter from moons parameters list.
cpl_error_code moo_params_add_sub_sky_stare_wnone(moo_params *self, cpl_parameterlist *list)
Add default parameters for moo_sub_sky_stare.
cpl_error_code moo_params_add_bias(moo_params *self, cpl_parameterlist *list)
Add default parameters for bias.
void moo_hot_params_delete(moo_hot_params *self)
Delete a moo_hot_params.
cpl_error_code moo_params_add_correct_bias(moo_params *self, cpl_parameterlist *list, const char *method)
Add default parameters for correct_bias.
cpl_error_code moo_params_add_molecfit_model(moo_params *self, cpl_parameterlist *list)
Add default parameters for molecfit_model.
cpl_error_code moo_params_add_double(moo_params *params, cpl_parameterlist *list, const char *name, const char *alias, const char *def, double val)
Add double parameter to moons parameters list.
cpl_error_code moo_params_add_compute_resp(moo_params *self, cpl_parameterlist *list)
Add default parameters for compute_resp.
moo_molecfit_model_params * moo_params_get_molecfit_model(const moo_params *self, const cpl_parameterlist *list)
Get molecfit model parameters from moons parameters list.
moo_nos_params * moo_params_get_nos(const moo_params *self, const cpl_parameterlist *list)
Get compute noise parameters from moons parameters list.
moo_hot_params * moo_params_get_hot(const moo_params *self, const cpl_parameterlist *list)
Get compute hot map parameters from moons parameters list.
cpl_error_code moo_params_add_keep_temp(moo_params *self, cpl_parameterlist *list)
Add default parameters for keep-temp.
cpl_error_code moo_params_add_localise(moo_params *self, cpl_parameterlist *list)
Add default parameters for localisation.
cpl_error_code moo_params_add_wavesol(moo_params *self, cpl_parameterlist *list)
Add default parameters for moo_wavesol.
cpl_error_code moo_params_add_prepare(moo_params *self, cpl_parameterlist *list)
Add default parameters for prepare.
cpl_error_code moo_params_add_model_flat(moo_params *self, cpl_parameterlist *list)
Add default parameters for model flat.
moo_rebin_params * moo_params_get_rebin(const moo_params *self, const cpl_parameterlist *list)
Get rebin parameters from moons parameters list.
cpl_error_code moo_params_add_coadd(moo_params *self, cpl_parameterlist *list)
Add default parameters for moo_coadd.
moo_params * moo_params_new(const char *pid, const char *recipe_id)
Create a new moo_params.
moo_molecfit_model_params * moo_molecfit_model_params_new(void)
Create a new empty molecfit_model set of parameters.
moo_compute_snr_params * moo_params_get_compute_snr(const moo_params *self, const cpl_parameterlist *list)
Get compute_snr parameters from moons parameters list.
moo_hot_params * moo_hot_params_new(void)
Create a new empty compute hot map set of parameters.
cpl_error_code moo_params_add_rebin(moo_params *self, cpl_parameterlist *list)
Add default parameters for moo_rebin.