74#define RECIPE_ID "xsh_scired_slit_offset"
75#define RECIPE_AUTHOR "P.Goldoni, L.Guglielmi, R. Haigron, F. Royer, D. Bramich, A. Modigliani"
76#define RECIPE_CONTACT "amodigli@eso.org"
97"Reduce science exposure in SLIT configuration and on/off mode";
100"This recipe reduces science exposure in SLIT configuration and on/off mode\n\
102 - A set of n Science frames and n corresponding Sky frames \
103 (excess frames will be dropped), \
104 Tag = STD_FLUX_SLIT_OFFSET_arm, SKY_SLIT_arm\n\
105 - Spectral format table (Tag = SPECTRAL_FORMAT_TAB_arm)\n\
106 - A master flat frame (Tag = MASTER_FLAT_SLIT_arm)\n\
107 - An order table frame(Tag = ORDER_TABLE_EDGES_SLIT_arm)\n\
108 - A wavelength calibration solution frame(Tag = WAVE_TAB_2D_arm)\n\
109 - [OPTIONAL] Table with dispersion coefficients (Tag = DISP_TAB_arm)\n\
110 It is required if -rectify-conserve-flux=TRUE\n\
111 - [OPTIONAL] A non-linear badpixel map (Tag = BP_MAP_NL_arm)\n\
112 - [OPTIONAL] A reference badpixel map (Tag = BP_MAP_RP_arm)\n\
113 - [OPTIONAL] The instrument response table (Tag = RESPONSE_MERGE1D_SLIT_arm)\n\
114 - [OPTIONAL] An atmospheric extinction table (Tag = ATMOS_EXT_arm)\n\
115 - [OPTIONAL] A telluric mask (Tag = TELL_MASK_arm)\n\
116 - [OPTIONAL] The instrument master response table (Tag = MRESPONSE_MERGE1D_SLIT_arm).\n\
117 If both master and individual response are provided the individual response is preferred.\n\
119 - PREFIX_ORDER2D_arm extracted spectrum, order-by-order, 2D\n\
120 - PREFIX_ORDER1D_arm extracted spectrum, order-by-order, 1D\n\
121 - PREFIX_MERGE2D_arm merged spectrum, 2D\n\
122 - PREFIX_MERGE1D_arm merged spectrum, 1D\n\
123 - PREFIX_SKY_arm, 2D sky frame\n\
124 - SKY_SLIT_ORDER2D_arm, 2D sky image (order-by-order)\n\
125 - SKY_SLIT_MERGE2D_arm, 2D sky image (merged)\n\
126 - PREFIX_WAVE_MAP_arm, wave map image\n\
127 - PREFIX_SLIT_MAP_arm, slit map image\n\
128 - where PREFIX is SCI, FLUX, TELL if input raw DPR.TYPE contains OBJECT or FLUX or TELLURIC\n\
129 - [OPTIONAL, if response and atm ext are provided] PREFIX_FLUX_ORDER2D_arm (2 dimension)\n\
130 - [OPTIONAL, if response and atm ext are provided] PREFIX_FLUX_ORDER1D_arm (1 dimension)\n\
131 - [OPTIONAL, if response and atm ext are provided] PREFIX_FLUX_MERGE2D_arm (2 dimension)\n\
132 - [OPTIONAL, if response and atm ext are provided] PREFIX_FLUX_MERGE1D_arm (1 dimension)\n";
150 cpl_recipe *recipe = NULL;
151 cpl_plugin *plugin = NULL;
153 recipe = cpl_calloc(1,
sizeof(*recipe));
154 if ( recipe == NULL ){
158 plugin = &recipe->interface ;
160 cpl_plugin_init(plugin,
163 CPL_PLUGIN_TYPE_RECIPE,
174 cpl_pluginlist_append(list, plugin);
176 return (cpl_error_get_code() != CPL_ERROR_NONE);
192 cpl_recipe *recipe = NULL;
213 assure( plugin != NULL, CPL_ERROR_NULL_INPUT,
"Null plugin");
215 assure( cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE,
216 CPL_ERROR_TYPE_MISMATCH,
217 "Plugin is not a recipe");
219 recipe = (cpl_recipe *)plugin;
222 recipe->parameters = cpl_parameterlist_new();
223 assure( recipe->parameters != NULL,
224 CPL_ERROR_ILLEGAL_OUTPUT,
225 "Memory allocation failed!");
252 recipe->parameters,ipol_par)) ;
269 "if TRUE a 2D sky frame, a 2D rectified, a 2D merged sky are generated"));
272 "cut-uvb-spectrum", TRUE,
273 "TRUE if recipe cuts the UVB spectrum at 556 nm (dichroich)"));
283 "generate-SDP-format", FALSE,
284 "TRUE if additional files should be generated in Science Data Product"
289 "dummy-association-keys", 0,
290 "Sets the number of dummy (empty) ASSONi, ASSOCi and ASSOMi keywords to"
294 if ( cpl_error_get_code() != CPL_ERROR_NONE ){
312 cpl_recipe *recipe = NULL;
316 assure( plugin != NULL, CPL_ERROR_NULL_INPUT,
"Null plugin");
319 assure( cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE,
320 CPL_ERROR_TYPE_MISMATCH,
"Plugin is not a recipe");
322 recipe = (cpl_recipe *)plugin;
328 if ( cpl_error_get_code() != CPL_ERROR_NONE ) {
347 cpl_recipe *recipe = NULL;
352 assure( plugin != NULL, CPL_ERROR_NULL_INPUT,
"Null plugin" );
355 assure( cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE,
356 CPL_ERROR_TYPE_MISMATCH,
"Plugin is not a recipe");
358 recipe = (cpl_recipe *)plugin;
363 if (cpl_error_get_code() != CPL_ERROR_NONE)
380 xsh_msg_dbg_low(
"rectify params: radius=%g bin_lambda=%g bin_space=%g",
387 return cpl_error_get_code();
401 cpl_frameset* frameset)
404 int recipe_tags_size = 3;
407 cpl_frameset* raws = NULL;
409 cpl_frameset * raw_object = NULL;
410 cpl_frameset * raw_sky = NULL;
411 cpl_frameset * calib = NULL;
412 cpl_frameset * usedframes = NULL;
416 int nb_sub_frames = 0;
419 cpl_frame* bpmap = NULL;
420 cpl_frame* master_bias = NULL;
421 cpl_frame* master_dark = NULL;
422 cpl_frame* master_flat = NULL;
423 cpl_frame* order_tab_edges = NULL;
424 cpl_frame * wave_tab = NULL ;
425 cpl_frame * model_config_frame = NULL ;
426 cpl_frame * wavemap = NULL ;
427 cpl_frame * slitmap = NULL ;
428 cpl_frame *disp_tab_frame = NULL;
429 cpl_frame * spectral_format = NULL ;
430 cpl_frame *tellmask_frame = NULL;
443 cpl_frame * loc_table_frame = NULL ;
444 cpl_frame * clean_frame = NULL ;
445 cpl_frameset * sub_frameset = NULL ;
446 cpl_frameset * clean_frameset = NULL ;
447 cpl_frameset * rect_frameset = NULL ;
448 cpl_frameset * rect2_frameset_tables = NULL ;
451 cpl_frame * res1D_frame = NULL ;
452 cpl_frame * res2D_frame = NULL ;
453 cpl_frame * ext_frame = NULL ;
454 cpl_frame * ext_frame_eso = NULL ;
455 cpl_frame * comb_frame = NULL ;
456 cpl_frame * comb_frame_eso = NULL ;
457 cpl_frame* response_ord_frame=NULL;
464 cpl_frame* grid_back=NULL;
465 cpl_frame* frame_backg=NULL;
468 int generate_sdp_format=0;
469 char* rec_prefix=NULL;
470 char sky_prefix[256];
472 cpl_frame* avg_sky=NULL;
473 cpl_frame* rec_sky=NULL;
474 cpl_frame* rec_sky_eso=NULL;
475 cpl_frame* mer_sky=NULL;
476 cpl_frame * rectif_tab = NULL ;
477 cpl_frame * sky_divided = NULL ;
478 cpl_frameset* sky_bias=NULL;
479 cpl_frameset* sky_dark=NULL;
480 cpl_frame * fluxcal_rect_1D_frame = NULL ;
481 cpl_frame * fluxcal_rect_2D_frame = NULL ;
482 cpl_frame * fluxcal_1D_frame = NULL ;
483 cpl_frame * fluxcal_2D_frame = NULL ;
484 cpl_frame* frm_atmext=NULL;
485 cpl_frameset* crh_clean_obj = NULL;
486 cpl_frameset* crh_clean_sky = NULL;
487 cpl_frame* ext_sky_frame=NULL;
488 cpl_frame* ext_sky_frame_eso=NULL;
489 cpl_frame* res_1D_sky_frame=NULL;
490 cpl_frame * fluxframe = NULL;
491 cpl_frame * uncalframe = NULL;
492 cpl_frame* sky_map_frm = NULL;
493 int pre_overscan_corr=0;
498 int cut_uvb_spectrum=0;
500 cpl_propertylist* qclist = cpl_propertylist_new();
506 recipe_tags, recipe_tags_size,
515 "Instrument NOT in Slit Mode" ) ;
524 &master_dark,&order_tab_edges,
525 &model_config_frame,&wave_tab,&master_flat,
526 &wavemap,&slitmap,&spectral_format,
RECIPE_ID));
536 if(response_ord_frame != NULL) {
538 if(frm_atmext==NULL) {
549 &loc_obj_par,&rectify_par,&crh_single_par,
551 &combine_nod_param,&do_flatfield,&gen_sky,
552 &generate_sdp_format));
561 if ( rectify_par->
conserve_flux || model_config_frame == NULL){
563 "if rectify-conserve-flux=TRUE DISP_TAB_ARM is required input");
566 "pre-overscan-corr"));
590 nobj=cpl_frameset_get_size(raw_object);
591 nsky=cpl_frameset_get_size(raw_sky);
595 xsh_msg(
"cmap=%d wavemap=%p slitmap=%p",do_computemap,wavemap,slitmap);
596 if( (do_computemap == 1) &&
597 (wavemap ==NULL || slitmap ==NULL )
599 if (model_config_frame != NULL) {
604 master_flat, model_config_frame, calib,
instrument,
605 do_computemap, use_model, rec_prefix,
606 &wavemap, &slitmap));
611 if( nb_sub_frames==0 ) {
612 xsh_msg_error(
"nb_sub_frames=%d something wrong check your input raws",nb_sub_frames);
629 "Nb of Subtracted Frames: %" CPL_SIZE_FORMAT
"", cpl_frameset_get_size( sub_frameset ));
635 if (master_bias != NULL && pre_overscan_corr == 0) {
639 sky_bias = cpl_frameset_duplicate(crh_clean_sky);
641 if (master_dark != NULL) {
645 sky_dark = cpl_frameset_duplicate(sky_bias);
647 sprintf(sky_tag,
"%s_SKY_%s", rec_prefix, arm_str);
649 if (do_flatfield == 1) {
650 sprintf(sky_tag,
"%s_FF_SKY_%s", rec_prefix, arm_str);
654 sky_divided = cpl_frame_duplicate(avg_sky);
659 if (do_flatfield == 1) {
662 clean_frameset = cpl_frameset_duplicate(sub_frameset);
670 check( clean_size = cpl_frameset_get_size( clean_frameset ) ) ;
671 xsh_msg(
"Nb of clean Frames: %d", clean_size ) ;
676 check( rect_frameset = cpl_frameset_new() ) ;
677 for( i = 0 ; i < nb_sub_frames ; i++ ) {
678 cpl_frame * rectif = NULL ;
679 cpl_frame * rectif_eso = NULL ;
680 cpl_frame * clean = NULL ;
683 sprintf( str,
"%d", i ) ;
684 check( clean = cpl_frameset_get_frame( clean_frameset, i ) ) ;
685 xsh_msg(
"Rectifying Frame '%s'", cpl_frame_get_filename( clean ) ) ;
686 sprintf(file_name,
"RECTIFIED_SLIT_OFFSET_%s_%s.fits",arm_str,str) ;
689 rectify_par, spectral_format,
691 file_name,&rectif_eso,&rectif_tab,
694 check( cpl_frameset_insert( rect_frameset, cpl_frame_duplicate(rectif) ) ) ;
695 check( cpl_frameset_insert( rect_frameset, cpl_frame_duplicate(rectif_eso) ) ) ;
703 sprintf(file_tag,
"%s_%s_%s",rec_prefix,
XSH_ORDER2D, arm_str) ;
706 file_tag,
instrument,&comb_frame_eso,scale_nod));
712 xsh_msg(
"Localize before extraction" ) ;
713 sprintf(file_name,
"LOCALIZE_%s_ALL.fits",arm_str) ;
724 sprintf(file_name,
"%s_RECTIFIED_SKY_%s.fits",sky_prefix,arm_str) ;
725 xsh_msg(
"file_name=%s",file_name);
728 rectify_par, spectral_format,
730 file_name,&rec_sky_eso,&rectif_tab,
737 merge_par,sky_prefix ));
741 &ext_sky_frame_eso,rec_prefix )) ;
744 merge_par,sky_prefix));
749 xsh_msg(
"Calling xsh_extract" ) ;
751 instrument, extract_par,ipol_bp, &ext_frame_eso,
753 xsh_msg(
"Calling xsh_merge_ord with 1D frame" ) ;
755 merge_par,rec_prefix ));
763 xsh_msg(
"Calling xsh_merge_ord with 2D frame" ) ;
767 cpl_boolean flux_available = CPL_FALSE;
768 if(response_ord_frame != NULL && frm_atmext != NULL) {
770 response_ord_frame,merge_par,
instrument,rec_prefix,
771 &fluxcal_rect_2D_frame,&fluxcal_rect_1D_frame,
772 &fluxcal_2D_frame,&fluxcal_1D_frame));
773 flux_available = CPL_TRUE;
776 cpl_propertylist_append_bool(qclist,
"ESO QC FLUX AVAILABLE",flux_available);
779 if(model_config_frame!=NULL && wavemap != NULL&& slitmap != NULL) {
790 if(fluxcal_rect_2D_frame != NULL) {
807 if(cut_uvb_spectrum) {
821 if(fluxcal_rect_2D_frame != NULL) {
836 usedframes = cpl_frameset_duplicate(frameset);
856 cpl_image* itmp = cpl_image_load(cpl_frame_get_filename(res2D_frame),CPL_TYPE_DOUBLE,0,0);
858 cpl_image_delete(itmp);
874 sprintf(file_tag,
"%s_%s_%s",sky_prefix,
XSH_ORDER2D, arm_str) ;
879 sprintf(file_tag,
"%s_%s_%s",sky_prefix,
XSH_MERGE2D, arm_str) ;
888 if(fluxcal_rect_2D_frame != NULL) {
914 if (generate_sdp_format) {
915 cpl_frame * fluxframe_copy = fluxframe;
916 cpl_frame * uncalframe_copy = uncalframe;
917 if (fluxframe != NULL) {
918 check( cpl_frameset_insert(usedframes, fluxframe) );
922 if (uncalframe != NULL) {
923 check( cpl_frameset_insert(usedframes, uncalframe) );
930 if (fluxframe_copy != NULL) {
931 check( cpl_frameset_erase_frame(usedframes, fluxframe_copy) );
933 if (uncalframe_copy != NULL) {
934 check( cpl_frameset_erase_frame(usedframes, uncalframe_copy) );
static xsh_instrument * instrument
cpl_frame * xsh_combine_nod(cpl_frameset *nod_frames, xsh_combine_nod_param *nod_par, const char *tag, xsh_instrument *instrument, cpl_frame **res_frame_ext, const int scale_nod)
void xsh_mark_tell(cpl_frame *s1d_frame, cpl_frame *tellmask_frame)
Mark telluric in spectrum.
cpl_error_code xsh_monitor_spectrum1D_extra_qc(cpl_frame *in_frm, xsh_instrument *instrument, cpl_propertylist *qclist)
cpl_error_code xsh_monitor_spectrum1D_flux(cpl_frame *in_frm, xsh_instrument *instrument)
cpl_frame * xsh_frameset_average_pre(cpl_frameset *set, xsh_instrument *instr, const char *tag)
Average set of frames in PRE format.
cpl_frameset * xsh_pre_frameset_subtract_frame(cpl_frameset *set, cpl_frame *sub, const char *spec, xsh_instrument *instr)
Subtract 2 frames (in XSH_PRE format) Just loads the 2 frames, subtract (xsh_pre_subtract) and save r...
cpl_error_code xsh_spectrum_cut_dichroic_uvb(cpl_frame *frame1d)
cpl_error_code xsh_spectrum_orders_cut_dichroic_uvb(cpl_frame *frame1d, xsh_instrument *instr)
cpl_frame * xsh_divide_flat(cpl_frame *frame, cpl_frame *flat, const char *tag, xsh_instrument *instr)
divide PRE frame with the master FLAT frame
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 assure(CONDITION, ERROR_CODE,...)
#define xsh_error_dump(level)
#define check_msg(COMMAND,...)
#define xsh_error_reset()
cpl_error_code xsh_instrument_nir_corr_if_JH(cpl_frameset *raws, xsh_instrument *instr)
const char * xsh_instrument_arm_tostring(xsh_instrument *i)
Get the string associated with an arm.
void xsh_instrument_free(xsh_instrument **instrument)
free an instrument structure
cpl_frame * xsh_localize_obj(cpl_frame *sci_frame, cpl_frame *skymask_frame, xsh_instrument *instrument, xsh_localize_obj_param *loc_obj_par, xsh_slit_limit_param *slit_limit_param, const char *fname)
Build the localization table.
cpl_frame * xsh_merge_ord(cpl_frame *sci_frame, xsh_instrument *instrument, int merge, const char *rec_prefix)
Merge orders of the rectified frame using merge parameters.
#define xsh_msg_error(...)
Print an error message.
#define xsh_msg(...)
Print a message on info level.
#define xsh_msg_dbg_low(...)
cpl_frame * xsh_rectify(cpl_frame *sci_frame, cpl_frame *order_table_frame, cpl_frame *wavesol_frame, cpl_frame *model_config_frame, xsh_instrument *instrument, xsh_rectify_param *rectify_par, cpl_frame *spectral_format, cpl_frame *disp_tab_frame, const char *fname, cpl_frame **res_frame_ext, cpl_frame **res_frame_tab, const char *prefix)
Create a grid in wavelength with the step in lambda and slit. Steps are defined in the parameters....
static cpl_error_code xsh_params_monitor(xsh_rectify_param *rectify_par, xsh_localize_obj_param *loc_obj_par)
static void xsh_scired_slit_offset(cpl_parameterlist *, cpl_frameset *)
Interpret the command line options and execute the data processing.
int cpl_plugin_get_info(cpl_pluginlist *list)
Build the list of available plugins, for this module.
static int xsh_scired_slit_offset_destroy(cpl_plugin *)
Destroy what has been created by the 'create' function.
static char xsh_scired_slit_offset_description[]
static int xsh_scired_slit_offset_exec(cpl_plugin *)
Execute the plugin instance given by the interface.
static int xsh_scired_slit_offset_create(cpl_plugin *)
Setup the recipe options.
static char xsh_scired_slit_offset_description_short[]
cpl_frameset * xsh_subtract_sky_offset(cpl_frameset *object_raws, cpl_frameset *sky_raws, int nraws, xsh_instrument *instrument)
void xsh_free_parameterlist(cpl_parameterlist **p)
Deallocate a parameter list and set the pointer to NULL.
const char * xsh_set_recipe_sky_file_prefix(char *rec_prefix)
Set recipe sky frames prefix.
cpl_error_code get_average_qc_from_raws(cpl_frameset *fset, xsh_instrument *instrument, cpl_propertylist *qclist)
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.
char * xsh_set_recipe_file_prefix(cpl_frameset *raw, const char *recipe)
Set recipe frames prefix.
cpl_error_code calc_curve_qc(cpl_image *im, xsh_instrument *instrument, cpl_propertylist *qclist)
const char * xsh_get_license(void)
Get the pipeline copyright and license.
void xsh_init(void)
Reset library state.
cpl_error_code xsh_remove_crh_single_params_set_defaults(cpl_parameterlist *pars, const char *rec_id, xsh_instrument *inst, xsh_remove_crh_single_param *crh_single_par)
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.
cpl_error_code xsh_rectify_params_set_defaults(cpl_parameterlist *pars, const char *rec_id, xsh_instrument *inst, xsh_rectify_param *rectify_par)
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.
int xsh_dfs_split_offset(cpl_frameset *input, const char *object_tag, const char *sky_tag, cpl_frameset **object, cpl_frameset **sky)
split input RAW offset sof in OBJECT_... and SKY_... framesets
cpl_frame * xsh_find_disp_tab(cpl_frameset *frames, xsh_instrument *instr)
Find Dispersol tab frame. The frame returned should not be free by the caller.
cpl_frameset * xsh_frameset_ext_table_frames(cpl_frameset *set)
Extract frameset sub set containing only table frames.
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_spectrum(cpl_frame *frame, cpl_frameset *frameset, const cpl_parameterlist *parameters, const char *recipe_id, xsh_instrument *instr, cpl_frame **result_frame, cpl_propertylist *qclist)
void xsh_add_product_orders_spectrum(cpl_frame *frame, cpl_frameset *frameset, const cpl_parameterlist *parameters, const char *recipe_id, xsh_instrument *instr, cpl_frame **result_frame)
cpl_error_code xsh_add_afc_info(cpl_frame *frm_m, cpl_frame *frm_o)
void xsh_add_sdp_product_spectrum(const cpl_frame *flux_cal_frame, const cpl_frame *uncal_frame, cpl_frameset *frameset, const cpl_frameset *usedframes, const cpl_parameterlist *parameters, const char *recipe_id, xsh_instrument *instrument, cpl_propertylist *qclist)
Creates a 1D spectrum product in the Science Data Product format.
cpl_error_code xsh_ensure_raws_input_offset_recipe_is_proper(cpl_frameset **raws, xsh_instrument *instrument)
Make sure input frames is an even number (eventually removes the last from the input list)
cpl_frame * xsh_find_frame_with_tag(cpl_frameset *frames, const char *tag, xsh_instrument *instr)
Find frame with a given tag.
cpl_error_code xsh_frameset_check_uniform_exptime(cpl_frameset *raws, xsh_instrument *inst)
#define XSH_OBJECT_SLIT_OFFSET
#define XSH_STD_FLUX_SLIT_OFFSET
#define XSH_RESPONSE_MERGE1D_SLIT
#define XSH_MRESPONSE_MERGE1D_SLIT
void xsh_check_get_map(cpl_frame *disp_tab_frame, cpl_frame *order_tab_edges, cpl_frame *crhm_frame, cpl_frame *model_config_frame, cpl_frameset *calib, xsh_instrument *instrument, int do_computemap, int recipe_use_model, const char *rec_prefix, cpl_frame **wavemap_frame, cpl_frame **slitmap_frame)
Check function to get wave and slit maps.
void xsh_parameters_pre_overscan(const char *recipe_id, cpl_parameterlist *plist)
void xsh_parameters_new_boolean(cpl_parameterlist *list, const char *recipe_id, const char *name, int value, const char *comment)
cpl_error_code xsh_parameters_decode_bp(const char *recipe_id, cpl_parameterlist *plist, const int ival)
void xsh_parameters_combine_nod_create(const char *recipe_id, cpl_parameterlist *list, xsh_combine_nod_param p)
create the crh clipping parameters in a parameters list
void xsh_parameters_localize_obj_create(const char *recipe_id, cpl_parameterlist *plist, xsh_localize_obj_param p)
xsh_interpolate_bp_param * xsh_parameters_interpolate_bp_get(const char *recipe_id, cpl_parameterlist *list)
void xsh_parameters_rectify_create(const char *recipe_id, cpl_parameterlist *plist, xsh_rectify_param p)
void xsh_parameters_interpolate_bp_create(const char *recipe_id, cpl_parameterlist *plist, xsh_interpolate_bp_param p)
xsh_bary_corr_param * xsh_parameters_bary_corr_get(const char *recipe_id, cpl_parameterlist *list)
get the barycentric correction parameters in a parameters list
void xsh_parameters_bary_corr_create(const char *recipe_id, cpl_parameterlist *list, xsh_bary_corr_param p)
create the barycentric correction parameters in a parameters list
void xsh_parameters_remove_crh_single_create(const char *recipe_id, cpl_parameterlist *plist, xsh_remove_crh_single_param p)
int xsh_parameters_cut_uvb_spectrum_get(const char *recipe_id, const cpl_parameterlist *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)
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)
#define XSH_FREE(POINTER)
cpl_error_code xsh_image_cut_dichroic_uvb(cpl_frame *frame1d)
cpl_error_code xsh_slit_offset_get_params(cpl_parameterlist *parameters, const char *rec_id, xsh_localize_obj_param **loc_obj_par, xsh_rectify_param **rectify_par, xsh_remove_crh_single_param **crh_single_par, xsh_extract_param **extract_par, xsh_combine_nod_param **combine_nod_param, int *do_flatfield, int *gen_sky, int *generate_sdp_format)
cpl_frameset * xsh_frameset_crh_single(cpl_frameset *raws, xsh_remove_crh_single_param *crh_single_par, cpl_frame *sky_map_frm, xsh_instrument *instrument, const char *prefix, const char *spec)
Generates a new frameset with each frame CRH-single rejected from input frameset.
cpl_error_code xsh_flux_calibrate(cpl_frame *rect2D, cpl_frame *rect1D, cpl_frame *atmext, cpl_frame *response, int mpar, xsh_instrument *inst, const char *rec_prefix, cpl_frame **fcal_rect_2D, cpl_frame **fcal_rect_1D, cpl_frame **fcal_2D, cpl_frame **fcal_1D)
cpl_error_code xsh_compute_resampling_accuracy(cpl_frame *wavemap, cpl_frame *slitmap, cpl_frame *order_tab_edges, cpl_frame *model_config, cpl_frame *science, xsh_instrument *instrument)
cpl_frameset * xsh_frameset_mflat_divide(cpl_frameset *input, cpl_frame *mflat, xsh_instrument *instrument)
Generates a new frameset with each frame mflat divided input frameset.
cpl_error_code xsh_compute_wavelength_resampling_accuracy(cpl_frame *wavemap, cpl_frame *order_tab_edges, cpl_frame *model_config, cpl_frame *science, xsh_instrument *instrument)
cpl_error_code xsh_slit_offset_get_calibs(cpl_frameset *calib, xsh_instrument *instrument, cpl_frame **bpmap, cpl_frame **mbias, cpl_frame **mdark, cpl_frame **otab_edges, cpl_frame **model_cfg, cpl_frame **wave_tab, cpl_frame **mflat, cpl_frame **wmap, cpl_frame **smap, cpl_frame **spectral_format, const char *rec_id)