77#define RECIPE_ID "xsh_2dmap"
78#define RECIPE_AUTHOR "R. Haigron, P. Bristow, D. Bramich, A. Modigliani"
79#define RECIPE_CONTACT "amodigli@eso.org"
94static void xsh_2dmap(cpl_parameterlist *, cpl_frameset *);
100"Creates a wavelength and spatial resampling solution, a clean arc line list";
103"This recipe creates a wavelength and spatial resampling solution, a clean arc line list.\n\
104 a residual map and a wave map.\n\
106 Raw Frame (Tag = WAVE_arm)\n\
107 Arc Line List (Tag = ARC_LINE_LIST_arm)\n\
108 Order Table (Tag = ORDER_TAB_EDGES_arm)\n\
109 Master Bias (Tag = MASTER_BIAS_arm)\n\
110 [poly mode] Wave Solution (Tag = WAVE_TAB_GUESS_arm)\n\
111 [poly mode] Theoretical Map (Tag = THEO_TAB_MULT_arm)\n\
112 [physical model mode] model cfg table (Tag = XSH_MOD_CFG_OPT_FMT_arm)\n\
113 [OPTIONAL] Master Dark (Tag = MASTER_DARK_arm)\n\
114 [OPTIONAL] Non-linear Bad Pixel Map (Tag = BP_MAP_NL_arm)\n\
115 [OPTIONAL] Reference Bad Pixel Map (Tag = BP_MAP_RP_arm)\n\
116 [OPTIONAL] Reference list to monitor line intensity (Tag = ARC_LINE_LIST_INTMON_arm)\n \
117Prepare the frames.\n\
119 Subtract Master Bias.\n\
120 Subtract Master Dark.\n\
123 Compute Wavelength Solution, clean arc line list, residual table, wave map\n\
125 Wavelength table solution, PRO.CATG = WAVE_TAB_2D_arm [poly mode]\n\
126 A Residual tab, PRO.CATG=WAVE_RESID_TAB_SLIT_arm\n\
127 A Wavelelength image map, PRO.CATG=WAVE_MAP_arm. [if model-wavemap-compute=TRUE]\n\
128 A Slit image map, PRO.CATG=SLIT_MAP_NIR [if model-wavemap-compute=TRUE]\n\
129 A Dispersion solution table, PRO.CATG=DISP_TAB_NIR\n\
130 An Arc frame in pre format bias subtracted, \n\
131 PRO.CATG=WAVE_ON_arm\n\
132 The optimized model cfg frame, PRO.CATG=XSH_MOD_CFG_OPT_2D_arm [if physical model mode].\n";
152 cpl_recipe *recipe = NULL;
153 cpl_plugin *plugin = NULL;
155 recipe = cpl_calloc(1,
sizeof(*recipe));
156 if ( recipe == NULL ){
160 plugin = &recipe->interface ;
162 cpl_plugin_init(plugin,
165 CPL_PLUGIN_TYPE_RECIPE,
176 cpl_pluginlist_append(list, plugin);
178 return (cpl_error_get_code() != CPL_ERROR_NONE);
194 cpl_recipe *recipe = NULL;
197 {6, 3, 0, 5, 4, 1, 5, 5.0,
201 cpl_parameter* p=NULL;
208 assure( plugin != NULL, CPL_ERROR_NULL_INPUT,
"Null plugin");
211 assure( cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE,
212 CPL_ERROR_TYPE_MISMATCH,
213 "Plugin is not a recipe");
215 recipe = (cpl_recipe *)plugin;
218 recipe->parameters = cpl_parameterlist_new();
219 assure( recipe->parameters != NULL,
220 CPL_ERROR_ILLEGAL_OUTPUT,
221 "Memory allocation failed!");
234 recipe->parameters, detarc_clip_param));
242 "Number/10 of annealing iterations "
243 "(physical model mode)."));
247 "model-anneal-factor",1.0,
248 "Multiplier applied to the automatic "
249 "parameter ranges (i.e. when scenario!=0). "
250 "For routine operations should be 1.0. "
251 "(physical model mode)."));
254 sprintf(paramname,
"xsh.%s.%s",
RECIPE_ID,
"model-scenario");
257 check(p=cpl_parameter_new_enum(paramname,CPL_TYPE_INT,
258 "selects preset flag and range combinations "
259 "appropriate to common scenarios: \n"
262 " 0 - No scenario, input cfg flags and limits"
264 " 1 - scenario appropriate for the startup"
265 "recipe (large ranges for parameters "
266 "affecting single ph exposures, dist "
268 " 2 - Like 1, but includes parameters "
269 "affecting all ph positions\n"
270 " 3 - Scenario for use in fine tuning cfg "
271 "to match routine single pinhole exposures. "
272 "All parameters affecting 1ph exposures "
273 "except dist coeffs are included and "
274 "parameter ranges are small. (For use by "
275 "predict in 1ph case).\n"
276 " 4 - Like 3 but includes parameters "
277 "affecting all ph positions (Standard for "
278 "use by predict in 9ph case and 2dmap).\n"
281 ,
RECIPE_ID,4,9,-1,0,1,2,3,4,5,6,8));
283 check(cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
285 check(cpl_parameterlist_append(recipe->parameters,p));
288 if ( cpl_error_get_code() != CPL_ERROR_NONE ){
306 cpl_recipe *recipe = NULL;
309 assure( plugin != NULL, CPL_ERROR_NULL_INPUT,
"Null plugin" );
312 assure( cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE,
313 CPL_ERROR_TYPE_MISMATCH,
"Plugin is not a recipe");
315 recipe = (cpl_recipe *)plugin;
317 xsh_2dmap(recipe->parameters, recipe->frames);
320 if ( cpl_error_get_code() != CPL_ERROR_NONE ) {
339 cpl_recipe *recipe = NULL;
342 assure( plugin != NULL, CPL_ERROR_NULL_INPUT,
"Null plugin" );
345 assure( cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE,
346 CPL_ERROR_TYPE_MISMATCH,
"Plugin is not a recipe");
348 recipe = (cpl_recipe *)plugin;
353 if (cpl_error_get_code() != CPL_ERROR_NONE)
367 cpl_frame* spectralformat_frame,
368 cpl_frame* theo_tab_frame)
371 cpl_table* tab_edges=NULL;
372 cpl_table* tab_spectral_format=NULL;
373 cpl_table* theo_tab=NULL;
374 const char* name=NULL;
380 check(name=cpl_frame_get_filename(order_tab_edges_frame));
381 check(tab_edges=cpl_table_load(name,1,0));
382 check(ord_min_ref=cpl_table_get_column_min(tab_edges,
"ABSORDER"));
383 check(ord_max_ref=cpl_table_get_column_max(tab_edges,
"ABSORDER"));
385 check(name=cpl_frame_get_filename(spectralformat_frame));
386 check(tab_spectral_format=cpl_table_load(name,1,0));
387 check(ord_min=cpl_table_get_column_min(tab_spectral_format,
"ORDER"));
388 check(ord_max=cpl_table_get_column_max(tab_spectral_format,
"ORDER"));
390 if(ord_min != ord_min_ref) {
391 xsh_msg_error(
"Edge order table's ord_min != spectral format table's ord_min");
392 return CPL_ERROR_INCOMPATIBLE_INPUT;
396 if(ord_max != ord_max_ref) {
397 xsh_msg_error(
"Edge order table's ord_max != spectral format table's ord_max");
398 return CPL_ERROR_INCOMPATIBLE_INPUT;
402 if(theo_tab_frame != NULL) {
403 check(name=cpl_frame_get_filename(theo_tab_frame));
404 check(theo_tab=cpl_table_load(name,1,0));
405 check(ord_min=cpl_table_get_column_min(theo_tab,
"Order"));
406 check(ord_max=cpl_table_get_column_max(theo_tab,
"Order"));
408 if(ord_min != ord_min_ref) {
409 xsh_msg_error(
"Theo table's ord_min != spectral format table's ord_min");
410 return CPL_ERROR_INCOMPATIBLE_INPUT;
414 if(ord_max != ord_max_ref) {
415 xsh_msg_error(
"Theo table's ord_max != spectral format table's ord_max");
416 return CPL_ERROR_INCOMPATIBLE_INPUT;
429 return cpl_error_get_code();
438 cpl_parameter* p=NULL;
440 if(cpl_parameter_get_double(p) <= 0) {
451 if(cpl_parameter_get_int(p) <= 0) {
460 return cpl_error_get_code();
474static void xsh_2dmap(cpl_parameterlist* parameters, cpl_frameset* frameset)
476 const char* recipe_tags[1] = {
XSH_WAVE};
477 int recipe_tags_size = 1;
483 int model_map_compute=CPL_TRUE;
486 cpl_frameset* raws = NULL;
487 cpl_frameset* calib = NULL;
488 cpl_frameset* on = NULL;
489 cpl_frameset* off = NULL;
490 cpl_frameset* on_off = NULL;
491 cpl_frame* dmap_rmbias = NULL;
492 cpl_frame* dmap_rmdark = NULL;
495 cpl_frame* model_config_frame = NULL;
496 cpl_frame* opt_model_config_frame = NULL;
497 cpl_frame* spectralformat_frame = NULL;
498 cpl_frame* bpmap = NULL;
499 cpl_frame* master_bias = NULL;
500 cpl_frame* master_dark = NULL;
501 cpl_frame* theo_tab_mult = NULL;
502 cpl_frame* resid_map = NULL;
503 cpl_frame* resid_dan = NULL;
504 cpl_frame* arclines = NULL;
505 cpl_frame* clean_arclines = NULL;
506 cpl_frame* wave_tab_guess = NULL;
507 cpl_frame* wave_tab_2d = NULL;
508 cpl_frame * order_tab_edges = NULL ;
509 cpl_frame * wave_map = NULL ;
510 cpl_frame * line_intmon = NULL ;
511 char wave_map_tag[256];
512 char slit_map_tag[256];
514 char *prefix = NULL ;
518 cpl_parameter * p =NULL;
519 cpl_frame *dispersol_frame = NULL;
520 cpl_frame *slitmap_frame = NULL;
521 int pre_overscan_corr=0;
522 cpl_propertylist* plist=NULL;
524 cpl_boolean mode_phys;
570 if( (model_config_frame!=NULL) && (theo_tab_mult != NULL) ) {
572 xsh_msg_error(
"You cannot provide both a %s and a %s frame. Decide if you are in poly or physical model mode. We exit",
577 if((model_config_frame==NULL) && (theo_tab_mult == NULL) ) {
592 xsh_msg(
"Frame %s not provided",
608 if(theo_tab_mult!=NULL) {
640 spectralformat_frame));
646 "pre-overscan-corr"));
648 check( detect_arclines_clipping =
661 cpl_frame* multi_pin_hole = NULL;
665 pre_overscan_corr,CPL_TRUE));
666 check(multi_pin_hole = cpl_frameset_get_frame(raws,0));
667 if(master_bias != NULL) {
672 dmap_rmbias=cpl_frame_duplicate(multi_pin_hole);
674 if(master_dark != NULL) {
678 ".fits", (
void*)NULL )) ;
683 dmap_rmdark=cpl_frame_duplicate(dmap_rmbias);
696 check(dmap_rmdark = cpl_frame_duplicate(
697 cpl_frameset_get_frame(on_off,0)));
707 plist=cpl_propertylist_load(cpl_frame_get_filename(dmap_rmdark),0);
712 if(model_config_frame!=NULL) {
715 arclines, wave_tab_guess, NULL,
716 model_config_frame, spectralformat_frame, NULL,
717 &clean_arclines, &wave_tab_2d,
719 detect_arclines_p, detect_arclines_clipping,
726 check(resid_map = cpl_frame_duplicate(resid_dan));
727 cpl_table* resid = NULL;
728 cpl_table* ext = NULL;
729 const char* fname = NULL;
732 cpl_propertylist* phead = NULL;
733 cpl_propertylist* xhead = NULL;
735 fname = cpl_frame_get_filename(resid_dan);
736 resid = cpl_table_load(fname, 1, 0);
737 phead = cpl_propertylist_load(fname, 0);
739 sprintf(rtag,
"WAVE_RESID_TAB_LINES_GFIT_%s",
741 sprintf(fout,
"%s.fits", rtag);
743 check(cpl_table_and_selected_int(resid,
"Flag", CPL_EQUAL_TO, 0));
744 ext = cpl_table_extract_selected(resid);
745 cpl_table_save(ext, phead, xhead, fout, CPL_IO_DEFAULT);
750 cpl_frame_set_filename(resid_map, fout);
751 check(cpl_frame_set_tag(resid_map, rtag));
759 arclines, wave_tab_guess, NULL,
760 model_config_frame, spectralformat_frame, NULL,
761 &clean_arclines, &wave_tab_2d,
763 detect_arclines_p, detect_arclines_clipping,
769 sprintf(slit_map_tag,
"SLIT_MAP_%s",
772 sprintf(wave_map_tag,
"WAVE_MAP_%s",
777 order_tab_edges, wave_tab_2d, model_config_frame,
instrument));
783 if ( model_config_frame == NULL){
787 spectralformat_frame,
789 wave_map_tag, &dispersol_frame,
794 sprintf(paramname,
"xsh.%s.%s",
RECIPE_ID,
"model-maxit");
795 check(p = cpl_parameterlist_find(parameters,paramname));
796 check(maxit=cpl_parameter_get_int(p));
798 sprintf(paramname,
"xsh.%s.%s",
RECIPE_ID,
"model-anneal-factor");
799 check(p = cpl_parameterlist_find(parameters,paramname));
800 check(ann_fac=cpl_parameter_get_double(p));
802 sprintf(paramname,
"xsh.%s.%s",
RECIPE_ID,
"model-scenario");
803 check(p = cpl_parameterlist_find(parameters,paramname));
804 check(scenario=cpl_parameter_get_int(p));
805 xsh_msg_dbg_low(
"maxit=%d ann_fac=%g scenario=%d",maxit,ann_fac,scenario);
813 if (model_map_compute){
815 wave_map_tag,slit_map_tag,
816 &wave_map, &slitmap_frame,0));
822 opt_model_config_frame,
826 spectralformat_frame,
835 if ( model_config_frame == NULL){
850 if ( wave_tab_2d != NULL){
855 if(model_config_frame!=NULL) {
868 if ( wave_map != NULL){
872 if (slitmap_frame != NULL){
876 if ( dispersol_frame != NULL){
880 sprintf(tag,
"WAVE_ON");
891 if(opt_model_config_frame!=NULL) {
896 xsh_msg(
"xsh_2dmap success!!");
901 XSH_FREE( detect_arclines_clipping);
static xsh_instrument * instrument
static int xsh_2dmap_exec(cpl_plugin *)
Execute the plugin instance given by the interface.
static cpl_error_code xsh_params_set_defaults(cpl_parameterlist *pars, xsh_detect_arclines_param *arclines_p, xsh_instrument *inst)
static char xsh_2dmap_description_short[]
static int xsh_2dmap_create(cpl_plugin *)
Setup the recipe options.
int cpl_plugin_get_info(cpl_pluginlist *list)
Build the list of available plugins, for this module.
static int xsh_2dmap_destroy(cpl_plugin *)
Destroy what has been created by the 'create' function.
static char xsh_2dmap_description[]
static void xsh_2dmap(cpl_parameterlist *, cpl_frameset *)
Interpret the command line options and execute the data processing.
static cpl_error_code xsh_verify_2dmap_poly_input(cpl_frame *order_tab_edges_frame, cpl_frame *spectralformat_frame, cpl_frame *theo_tab_frame)
void xsh_data_check_spectralformat(cpl_frame *spectralformat_frame, cpl_frame *orderlist_frame, cpl_frame *wavesol_frame, cpl_frame *model_config_frame, xsh_instrument *instr)
Check the borders of wavelength foreach orders in spectral format.
cpl_error_code xsh_frame_table_resid_merge(cpl_frame *self, cpl_frame *right, const int solution_type)
void xsh_detect_arclines_dan(cpl_frame *frame, cpl_frame *theo_tab_frame, cpl_frame *arc_lines_tab_frame, cpl_frame *wave_tab_guess_frame, cpl_frame *order_tab_recov_frame, cpl_frame *config_model_frame, cpl_frame *spectralformat_frame, cpl_frame **resid_tab_orders_frame, cpl_frame **arc_lines_clean_tab_frame, cpl_frame **wave_tab_frame, cpl_frame **resid_tab_frame, xsh_sol_wavelength solwave_type, xsh_detect_arclines_param *da, xsh_clipping_param *dac, xsh_instrument *instr, const char *rec_id, const int clean_tmp, const int resid_tab_name_sw)
detect the position on the detector of emission lines listed in a catalogue, from expected position v...
void xsh_detect_arclines(cpl_frame *frame, cpl_frame *theo_tab_frame, cpl_frame *arc_lines_tab_frame, cpl_frame *wave_tab_guess_frame, cpl_frame *order_tab_recov_frame, cpl_frame *config_model_frame, cpl_frame *spectralformat_frame, cpl_frame **resid_tab_orders_frame, cpl_frame **arc_lines_clean_tab_frame, cpl_frame **wave_tab_frame, cpl_frame **resid_tab_frame, xsh_sol_wavelength solwave_type, xsh_detect_arclines_param *da, xsh_clipping_param *dac, xsh_instrument *instr, const char *rec_id, const int clean_tmp, const int resid_tab_name_sw)
detect the position on the detector of emission lines listed in a catalogue, from expected position v...
void xsh_prepare(cpl_frameset *frames, cpl_frame *bpmap, cpl_frame *mbias, const char *prefix, xsh_instrument *instr, const int pre_overscan_corr, const bool flag_neg_and_thresh_pix)
This function transform RAW frames dataset in PRE frames dataset attaching the default bad pixel map ...
#define XSH_ASSURE_NOT_ILLEGAL(cond)
#define assure(CONDITION, ERROR_CODE,...)
#define xsh_error_dump(level)
#define xsh_error_reset()
#define cknull_msg(NULLEXP,...)
void xsh_instrument_update_from_spectralformat(xsh_instrument *i, cpl_frame *spectralformat_frame)
const char * xsh_instrument_arm_tostring(xsh_instrument *i)
Get the string associated with an arm.
XSH_ARM xsh_instrument_get_arm(xsh_instrument *i)
Get an arm on instrument structure.
void xsh_instrument_free(xsh_instrument **instrument)
free an instrument structure
cpl_frame * xsh_model_pipe_anneal(cpl_frame *cfg_frame, cpl_frame *resid_frame, int maxit, double ann_fac, int scenario, int rec_id)
Run the annealing (optimisation) algoritm to improve the fit of the model parameter set to a given wa...
#define xsh_msg_warning(...)
Print an warning message.
#define xsh_msg_error(...)
Print an error message.
#define xsh_msg(...)
Print a message on info level.
#define xsh_msg_dbg_low(...)
double xsh_pfits_get_exptime(const cpl_propertylist *plist)
find out the exposure time
cpl_frameset * xsh_subtract_nir_on_off(cpl_frameset *on, cpl_frameset *off, xsh_instrument *instr)
(NIR only) subtract the OFF set of files from the On set of files
cpl_frame * xsh_subtract_bias(cpl_frame *frame, cpl_frame *bias, xsh_instrument *instr, const char *type, const int pre_overscan_corr, const int save_tmp)
Subtract the master bias frame from PRE frame.
cpl_frame * xsh_subtract_dark(cpl_frame *frame, cpl_frame *dark, const char *filename, xsh_instrument *instr)
subtract the master dark frame from PRE frame
cpl_error_code xsh_wavecal_qclog_intmon(cpl_frame *line_check, const cpl_frame *line_intmon, const double exptime, xsh_instrument *inst)
computes intmon QC log
void xsh_free_parameterlist(cpl_parameterlist **p)
Deallocate a parameter list and set the pointer to NULL.
cpl_error_code xsh_check_input_is_unbinned(cpl_frame *in)
Check if an input frame is not binned.
cpl_error_code xsh_table_merge_clean_and_resid_tabs(cpl_frame *frm_resid, cpl_frame *frm_clean)
void xsh_free_frame(cpl_frame **f)
Deallocate a frame and set the pointer to NULL.
void xsh_free_frameset(cpl_frameset **f)
Deallocate a frame set and set the pointer to NULL.
const char * xsh_get_license(void)
Get the pipeline copyright and license.
char * xsh_stringcat_any(const char *s,...)
Concatenate an arbitrary number of strings.
void xsh_init(void)
Reset library state.
cpl_error_code xsh_begin(cpl_frameset *frames, const cpl_parameterlist *parameters, xsh_instrument **instrument, cpl_frameset **raws, cpl_frameset **calib, const char *tag_list[], int tag_list_size, const char *recipe_id, unsigned int binary_version, const char *short_descr)
Recipe initialization.
void xsh_free_table(cpl_table **t)
Deallocate a table and set the pointer to NULL.
void xsh_free_propertylist(cpl_propertylist **p)
Deallocate a property list and set the pointer to NULL.
cpl_error_code xsh_end(const char *recipe_id, cpl_frameset *frames, cpl_parameterlist *parameters)
Recipe termination.
void xsh_add_temporary_file(const char *name)
Add temporary file to temprary files list.
cpl_error_code xsh_wavetab_qc(cpl_frame *frm_tab, const int is_poly)
Monitor min/max/med/avg distance between detected lines on each ordee.
cpl_frame * xsh_create_dispersol_physmod(cpl_frame *pre_frame, cpl_frame *order_tab_frame, cpl_frame *mod_cfg_frame, cpl_frame *wave_map_frame, cpl_frame *slit_map_frame, xsh_dispersol_param *dispsol_param, cpl_frame *spectral_format_frame, xsh_instrument *instrument, const int clean_tmp)
cpl_error_code xsh_wavemap_qc(cpl_frame *frm_map, const cpl_frame *frm_tab)
Monitor Flux level along the orders traces given by an input table.
void xsh_create_model_map(cpl_frame *model_frame, xsh_instrument *instrument, const char *wtag, const char *stag, cpl_frame **wavemap_frame, cpl_frame **slitmap_frame, const int save_tmp)
cpl_frame * xsh_create_poly_wavemap(cpl_frame *pre_frame, cpl_frame *wave_tab_2d_frame, cpl_frame *order_tab_frame, cpl_frame *spectral_format_frame, xsh_dispersol_param *dispsol_par, xsh_instrument *instrument, const char *wm_tag, cpl_frame **dispersol_frame, cpl_frame **slitmap_frame)
cpl_frame * xsh_find_order_tab_edges(cpl_frameset *frames, xsh_instrument *instr)
Find an order tab EDGES.
cpl_boolean xsh_mode_is_physmod(cpl_frameset *set, xsh_instrument *instrument)
void xsh_add_product_image(cpl_frame *frame, cpl_frameset *frameset, const cpl_parameterlist *parameters, const char *recipe_id, xsh_instrument *instrument, const char *final_prefix)
void xsh_add_product_table(cpl_frame *frame, cpl_frameset *frameset, const cpl_parameterlist *parameters, const char *recipe_id, xsh_instrument *instrument, const char *final_prefix)
Save Table product (input frame has several extensions, 1 table per extension)
void xsh_dfs_split_nir(cpl_frameset *input, cpl_frameset **on, cpl_frameset **off)
split input RAW NIR sof in ON and OFF
cpl_frame * xsh_find_frame_with_tag(cpl_frameset *frames, const char *tag, xsh_instrument *instr)
Find frame with a given tag.
#define XSH_ARC_LINE_LIST_INTMON
#define XSH_MOD_CFG_OPT_FMT
#define XSH_SPECTRAL_FORMAT
#define XSH_ARC_LINE_LIST
#define XSH_THEO_TAB_MULT
#define XSH_DETECT_ARCLINES_TYPE_POLY
#define XSH_DETECT_ARCLINES_TYPE_MODEL
cpl_frame * xsh_check_load_master_bpmap(cpl_frameset *calib, xsh_instrument *inst, const char *rec_id)
cpl_parameter * xsh_parameters_find(cpl_parameterlist *list, const char *recipe_id, const char *name)
find a parameter
void xsh_parameters_pre_overscan(const char *recipe_id, cpl_parameterlist *plist)
void xsh_parameters_clipping_detect_arclines_create(const char *recipe_id, cpl_parameterlist *list, xsh_clipping_param p)
Create the arclines clipping parameters in a parameters list.
cpl_error_code xsh_parameters_decode_bp(const char *recipe_id, cpl_parameterlist *plist, const int ival)
void xsh_parameters_new_double(cpl_parameterlist *list, const char *recipe_id, const char *name, double value, const char *comment)
xsh_detect_arclines_param * xsh_parameters_detect_arclines_get(const char *recipe_id, cpl_parameterlist *list)
get the detect arclines parameters in a parameters list
void xsh_parameters_dispersol_create(const char *recipe_id, cpl_parameterlist *list, xsh_dispersol_param p)
Create the dispersol compute parameters in a parameters list.
xsh_clipping_param * xsh_parameters_clipping_detect_arclines_get(const char *recipe_id, cpl_parameterlist *list)
Get the arclines clipping parameters in a parameters list.
int xsh_parameters_get_int(const cpl_parameterlist *list, const char *recipe_id, const char *name)
void xsh_parameters_generic(const char *recipe_id, cpl_parameterlist *plist)
void xsh_parameters_detect_arclines_create(const char *recipe_id, cpl_parameterlist *list, xsh_detect_arclines_param p)
create the detect arclines parameters in a parameters list
cpl_error_code xsh_recipe_params_check(cpl_parameterlist *parameters, xsh_instrument *instrument, const char *rec_id)
void xsh_parameters_new_int(cpl_parameterlist *list, const char *recipe_id, const char *name, int value, const char *comment)
xsh_dispersol_param * xsh_parameters_dispersol_get(const char *recipe_id, cpl_parameterlist *list)
Get the dispersion solution compute parameters in a parameters list.
#define DECODE_BP_FLAG_DEF
#define XSH_FREE(POINTER)