73#define RECIPE_ID "xsh_absorp"
74#define RECIPE_AUTHOR "P.Goldoni, L.Guglielmi, R. Haigron, F. Royer, A. Modigliani"
75#define RECIPE_CONTACT "regis.haigron@obspm.fr,amodigli@eso.org"
91static cpl_error_code
xsh_absorp(cpl_parameterlist *, cpl_frameset *);
97"Create a telluric absorption mask";
100"This recipe creates a mask corresponding to the positions of telluric absorption\n\
102 - A set of n Science frames ( n == 1 or >=3, Tag = STD_TELL_SLIT_STARE_arm)\n\
103 - A spectral format table (Tag = SPECTRAL_FORMAT_TAB_arm)\n\
104 - [UVB,VIS] A master bias frame (Tag = MASTER_BIAS_arm)\n\
105 - [OPTIONAL]A master dark frame (Tag = MASTER_DARK_arm)\n\
106 - A master flat frame (Tag = MASTER_FLAT_SLIT_arm)\n\
107 - An order table frame(Tag = ORDER_TAB_EDGES_SLIT_arm)\n\
108 - [OPTIONAL] A table with dispersion coefficients (Tag = DISP_TAB_arm,\n\
109 required if rectify-conserve-flux=TRUE or do_wavemap=TRUE and poly mode\n\
110 - [poly mode] A wave solution frame(Tag = WAVE_TAB_2D_arm)\n\
111 - [physical model mode] A model cfg table (Format = TABLE, Tag = XSH_MOD_CFG_TAB_arm)\n\
112 - [OPTIONAL] A table specifying multiplying factor for break points \n\
113 (Tag = SKY_SUB_BKPTS_arm) to generate\n\
114 - [OPTIONAL] A badpixel map (Tag = BADPIXEL_MAP_arm)\n\
115 - [OPTIONAL,physmod mode] A table listing sky line positions (Tag = SKY_LINE_LIST_arm)\n\
116 this is used to be able to control quality of sky subtraction, for example\n\
117 projecting guess positions on the product SCI_SLIT_STARE_SUB_SKY_arm\n\
119 - TELL_MASK_arm telluric mask\n\
120 - PREFIX_ORDER2D_arm extracted spectrum, order-by-order, 2D\n\
121 - PREFIX_ORDER1D_arm extracted spectrum, order-by-order, 1D\n\
122 - PREFIX_MERGE2D_arm merged spectrum, 2D\n\
123 - PREFIX_MERGE1D_arm merged spectrum, 1D\n\
124 - PREFIX_ON_arm bias (dark) subtracted sci frame\n\
125 - PREFIX_SUB_BACK_SLIT_arm sci frame bias, (dark), inter-order bkg subtracted\n\
126 - PREFIX_NOCRH_arm sci frame corrected from cosmic ray hits\n\
127 - [OPTIONAL,-compute-map=TRUE] PREFIX_WAVE_MAP_arm, wave map image\n\
128 - [OPTIONAL,-compute-map=TRUE] PREFIX_SLIT_MAP_arm, slit map image\n\
129 - PREFIX_DIVFF_arm as PREFIX_SUB_BACK_SLIT_arm, flat fielded\n\
130 - PREFIX_SUB_SKY_arm, as PREFIX_DIVFF_arm, sky subtracted\n\
131 - PREFIX_SKY_arm, 2D sky frame\n\
132 - PREFIX_SKY_ORD1D_arm, 1D sky image (order-by-order)\n\
133 - PREFIX_SCI_SLIT_STARE_BACK_SLIT_arm, inter-order background image\n\
134 - OBJECT_SLIT_STARE_arm, sci frame in PRE format\n\
135 - where PREFIX is SCI, FLUX, TELL if input raw DPR.TYPE contains OBJECT or FLUX or TELLURIC";
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;
195 cpl_parameter* p=NULL;
230 opt_extract_par.
niter = 1;
236 assure( plugin != NULL, CPL_ERROR_NULL_INPUT,
"Null plugin");
239 assure( cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE,
240 CPL_ERROR_TYPE_MISMATCH,
241 "Plugin is not a recipe");
243 recipe = (cpl_recipe *)plugin;
246 recipe->parameters = cpl_parameterlist_new();
247 assure( recipe->parameters != NULL,
248 CPL_ERROR_ILLEGAL_OUTPUT,
249 "Memory allocation failed!");
266 cpl_parameter_set_default_string(p,
"poly");
292 "do-optextract", FALSE,
293 "TRUE if we do the optimal extraction"));
300 "absorp-filter-hsize", 5,
301 "Half size of median filter use to detect tellurics"));
303 "absorp-threshold", 0.02,
304 "Threshold use to detect tellurics"));
307 "do-flatfield", TRUE,
308 "TRUE if we do the flatfielding"));
312 "if TRUE recompute (wave and slit) maps from the dispersion solution. If sky-subtract is set to TRUE this must be set to TRUE."));
316 "if TRUE compute object position trace via Gaussian fit."));
320 if ( cpl_error_get_code() != CPL_ERROR_NONE ){
338 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;
351 xsh_absorp(recipe->parameters, recipe->frames);
354 if ( cpl_error_get_code() != CPL_ERROR_NONE ) {
373 cpl_recipe *recipe = NULL;
378 assure( plugin != NULL, CPL_ERROR_NULL_INPUT,
"Null plugin" );
381 assure( cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE,
382 CPL_ERROR_TYPE_MISMATCH,
"Plugin is not a recipe");
384 recipe = (cpl_recipe *)plugin;
389 if (cpl_error_get_code() != CPL_ERROR_NONE)
407 cpl_parameter* p=NULL;
409 if(cpl_parameter_get_int(p) <= 0) {
421 return cpl_error_get_code();
442 xsh_msg_dbg_low(
"rectify params: radius=%g bin_lambda=%g bin_space=%g",
449 xsh_msg_dbg_low(
"opt extract params: chunk_size=%d lambda_step=%g box_hsize=%d",
454 sub_sky_nbkpts1,sub_sky_nbkpts2);
456 return cpl_error_get_code();
473 int* sub_sky_nbkpts1,
474 int* sub_sky_nbkpts2)
477 cpl_frame* frame=NULL;
478 const char* name=NULL;
479 cpl_propertylist *plist=NULL;
483 check(frame=cpl_frameset_get_first(raws));
484 check(name=cpl_frame_get_filename(frame));
485 check(plist=cpl_propertylist_load(name,0));
500 *sub_sky_nbkpts1*=0.75*
biny;
501 *sub_sky_nbkpts2*=0.75*
biny;
573 return cpl_error_get_code();
588 cpl_frameset* frameset)
591 int recipe_tags_size = 1;
594 cpl_frameset *raws = NULL;
595 cpl_frameset *calib = NULL;
598 cpl_frame *bpmap = NULL;
599 cpl_frame *master_bias = NULL;
600 cpl_frame *master_dark = NULL;
601 cpl_frame *master_flat = NULL;
602 cpl_frame *order_tab_edges = NULL;
603 cpl_frame *wave_tab = NULL ;
604 cpl_frame *model_config_frame = NULL ;
605 cpl_frame *wavemap_frame = NULL ;
606 cpl_frame *slitmap_frame = NULL ;
607 cpl_frame *disp_tab_frame = NULL;
608 cpl_frame *spectralformat_frame = NULL ;
609 cpl_frame *tell_list_frame = NULL;
622 int do_sub_sky = FALSE;
623 int recipe_use_model = 0;
624 int do_optextract = 0;
625 int do_flatfield = 0;
626 int do_compute_map = 0;
627 int do_trace_obj = 0;
640 cpl_frameset * on = NULL, * off = NULL ;
642 cpl_frame * crhm_frame = NULL ;
643 cpl_frame * rmbias = NULL;
644 cpl_frame * rmdark = NULL;
645 cpl_frame * rmbkg = NULL ;
646 cpl_frame * div_frame = NULL ;
647 cpl_frame * sub_sky_frame = NULL ;
648 cpl_frame * sub_sky2_frame = NULL ;
650 cpl_frame * rect_frame = NULL ;
651 cpl_frame * loc_table_frame = NULL ;
652 cpl_frame * clean_frame = NULL ;
653 cpl_frame * rect2_frame = NULL ;
654 cpl_frame * rect2_frame_eso = NULL ;
655 cpl_frame * rect2_frame_tab = NULL ;
658 cpl_frame * sky_frame = NULL ;
659 cpl_frame * sky_frame_eso = NULL ;
660 cpl_frame * res_1D_frame = NULL ;
661 cpl_frame * res_2D_frame = NULL ;
662 cpl_frame * fluxcal_rect_1D_frame = NULL ;
663 cpl_frame * fluxcal_rect_2D_frame = NULL ;
664 cpl_frame * fluxcal_1D_frame = NULL ;
665 cpl_frame * fluxcal_2D_frame = NULL ;
667 cpl_frame * ext_frame = NULL ;
668 cpl_frame * ext_frame_eso = NULL ;
670 cpl_frame *orderoxt1d_eso_frame = NULL;
671 cpl_frame *orderext1d_frame = NULL;
672 cpl_frame *orderoxt1d_frame = NULL;
673 cpl_frame *mergeext1d_frame = NULL;
674 cpl_frame *mergeoxt1d_frame = NULL;
676 cpl_frame* grid_backg=NULL;
677 cpl_frame* frame_backg=NULL;
678 cpl_frame* sky_frame_ima=NULL;
680 const char* ftag=NULL;
682 cpl_frame* single_frame_sky_sub_tab_frame=NULL;
688 cpl_frame* clean_obj=NULL;
689 char *rec_prefix = NULL;
690 cpl_frame* sky_list_frame=NULL;
691 cpl_frame* qc_sky_frame=NULL;
692 cpl_propertylist* plist=NULL;
693 cpl_frame* qc_obj_trace_ord=NULL;
694 cpl_frame* qc_obj_trace_mer=NULL;
696 const char* name=NULL;
697 int pre_overscan_corr=0;
699 cpl_frame *tell_mask_frame = NULL;
700 int absorp_filter_hsize = 5;
701 double absorp_thresh = 0.0;
702 cpl_frame *qc_subex_frame = NULL;
703 cpl_frame *qc_s2ddiv1d_frame = NULL;
704 cpl_frame *qc_model_frame = NULL;
705 cpl_frame *qc_weight_frame = NULL;
713 recipe_tags, recipe_tags_size,
729 check( nb_raw_frames = cpl_frameset_get_size( raws ) ) ;
732 "This recipes accepts either one or at least 3 input frames" ) ;
734 "pre-overscan-corr"));
736 &master_bias,&master_dark,&master_flat,
737 &order_tab_edges,&model_config_frame,
738 &wave_tab,&sky_list_frame,&qc_sky_frame,
739 &bpmap,&single_frame_sky_sub_tab_frame,
741 &recipe_use_model,pre_overscan_corr));
746 if ( tell_list_frame == NULL){
748 return CPL_ERROR_DATA_NOT_FOUND;
756 &crh_clipping_par,&backg_par,&loc_obj_par,
757 &rectify_par,&crh_single_par,&sub_sky_nbkpts1,
758 &do_flatfield,&sub_sky_nbkpts2,&sky_par,
759 &extract_par,&do_optextract,
760 &opt_extract_par,&do_trace_obj));
763 "absorp-filter-hsize"));
765 "absorp-threshold"));
769 check( xsh_parameters_dosky_get(
RECIPE_ID, parameters,&do_sub_sky));
775 &sub_sky_nbkpts1,&sub_sky_nbkpts2));
782 "rectify-conserve-flux=TRUE, you must give a DISP_TAB_ARM input");
784 if ( do_compute_map && recipe_use_model==FALSE){
786 "compute-map=TRUE, physmodel mode, you must give a DISP_TAB_ARM input");
789 sub_sky_nbkpts1,sub_sky_nbkpts2));
808 do_compute_map,recipe_use_model,rec_prefix,
810 disp_tab_frame,order_tab_edges,
811 &wavemap_frame, &slitmap_frame));
813 sprintf(prefix,
"%s_",rec_prefix);
818 pre_overscan_corr,0));
825 xsh_msg(
"Subtract inter-order background");
829 &grid_backg,&frame_backg,0));
833 do_sub_sky,rec_prefix,rmbkg,
834 order_tab_edges, slitmap_frame,
835 wavemap_frame,model_config_frame,
837 sub_sky_nbkpts1, sky_par,
838 &sky_frame,&sky_frame_eso,&sky_frame_ima,
839 wave_tab,disp_tab_frame,
840 spectralformat_frame,nb_raw_frames,
841 &loc_table_frame,&clean_frame,&clean_obj);
851 order_tab_edges, slitmap_frame, wavemap_frame, loc_table_frame,
852 single_frame_sky_sub_tab_frame,
instrument, sub_sky_nbkpts2, sky_par,
853 &sky_frame, &sky_frame_eso, &sky_frame_ima, rec_prefix,0));
855 xsh_msg(
"Prepare S2D products" ) ;
857 sprintf(rec_name,
"%s_%s_%s.fits",rec_prefix,
XSH_ORDER2D,
862 rectify_par,spectralformat_frame,
863 disp_tab_frame,rec_name,
864 &rect2_frame_eso,&rect2_frame_tab,
871 xsh_msg(
"Merge orders with 1D frame" ) ;
873 merge_par,rec_prefix ));
876 xsh_msg(
"Calling xsh_merge_ord with 2D frame" ) ;
878 merge_par,rec_prefix ));
880 xsh_msg(
"Prepare S1D products" ) ;
885 xsh_msg(
"Optimal extraction");
887 wave_tab, model_config_frame, wavemap_frame,
888 slitmap_frame, loc_table_frame,
889 spectralformat_frame, master_flat,
instrument,
890 opt_extract_par, rec_prefix,
891 &orderext1d_frame, &orderoxt1d_frame,
892 &orderoxt1d_eso_frame,
899 merge_par,rec_prefix));
901 merge_par,rec_prefix));
905 name=cpl_frame_get_filename(res_2D_frame);
906 plist=cpl_propertylist_load(name,0);
922 if ( mergeoxt1d_frame != NULL){
924 absorp_filter_hsize, absorp_thresh,
instrument));
928 absorp_filter_hsize, absorp_thresh,
instrument));
937 cpl_frame_get_tag( tell_mask_frame)));
943 cpl_frame_get_tag(rect2_frame_eso)));
947 cpl_frame_get_tag(ext_frame_eso)));
961 cpl_frame_get_tag(rmbkg)));
963 if ( do_sub_sky == 1 && nb_raw_frames == 1 && crh_single_par->
nb_iter > 0){
967 cpl_frame_get_tag(clean_frame)));
971 sprintf(prefix,
"%s_WAVE_MAP_%s",rec_prefix,
978 check(sprintf(prefix,
"%s_SLIT_MAP_%s",rec_prefix,
988 cpl_frame_get_tag(div_frame)));
1002 cpl_frame_get_tag(qc_subex_frame)));
1005 cpl_frame_get_tag(qc_s2ddiv1d_frame)));
1008 cpl_frame_get_tag(qc_model_frame)));
1011 cpl_frame_get_tag(qc_weight_frame)));
1013 if ( do_sub_sky == 1 ) {
1018 cpl_frame_get_tag(sky_frame_ima)));
1021 cpl_frame_get_tag(sky_frame_eso)));
1025 cpl_frame_get_tag(frame_backg)));
1027 if(crhm_frame != NULL) {
1030 cpl_frame_get_tag(crhm_frame)));
1034 if(qc_sky_frame != NULL) {
1114 return CPL_ERROR_NONE;
static xsh_instrument * instrument
int cpl_plugin_get_info(cpl_pluginlist *list)
Build the list of available plugins, for this module.
static char xsh_absorp_description[]
static cpl_error_code xsh_absorp(cpl_parameterlist *, cpl_frameset *)
Interpret the command line options and execute the data processing.
static int xsh_absorp_destroy(cpl_plugin *)
Destroy what has been created by the 'create' function.
static cpl_error_code xsh_params_monitor(xsh_background_param *backg, xsh_rectify_param *rectify_par, xsh_localize_obj_param *loc_obj_par, xsh_opt_extract_param *opt_extract_par, int sub_sky_nbkpts1, int sub_sky_nbkpts2)
static int xsh_absorp_create(cpl_plugin *)
Setup the recipe options.
static int xsh_absorp_exec(cpl_plugin *)
Execute the plugin instance given by the interface.
static cpl_error_code xsh_params_bin_scale(cpl_frameset *raws, xsh_background_param *backg, xsh_opt_extract_param *opt_extract_par, int *sub_sky_nbkpts1, int *sub_sky_nbkpts2)
Interpret the command line options and execute the data processing.
static cpl_error_code xsh_params_set_defaults(cpl_parameterlist *pars, const char *rec_id, xsh_instrument *inst, xsh_rectify_param *rectify_par, xsh_background_param *backg)
static char xsh_absorp_description_short[]
cpl_frame * xsh_compute_absorp(cpl_frame *s1d_frame, cpl_frame *telllist_frame, int filter_hsize, double threshold, xsh_instrument *instr)
Compute the shift in slit between reference wavelength and others for all the slitlets.
cpl_error_code xsh_monitor_spectrum1D_flux(cpl_frame *in_frm, xsh_instrument *instrument)
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()
#define XSH_ASSURE_NOT_ILLEGAL_MSG(cond, msg)
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.
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_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(...)
int xsh_pfits_get_binx(const cpl_propertylist *plist)
find out the BINX value
int xsh_pfits_get_biny(const cpl_propertylist *plist)
find out the BINY value
int xsh_pfits_get_naxis2(const cpl_propertylist *plist)
find out the NAXIS2 value
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....
cpl_frame * xsh_subtract_background(cpl_frame *frame, cpl_frame *ordertable, xsh_background_param *bckg, xsh_instrument *instr, const char *prefix, cpl_frame **grid_frame, cpl_frame **frame_backg, const int save_bkg, const int save_grid, const int save_sub_bkg)
Subtract the inter-order background from PRE frame.
void xsh_free_parameterlist(cpl_parameterlist **p)
Deallocate a parameter list and set the pointer to NULL.
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.
const char * xsh_get_license(void)
Get the pipeline copyright and license.
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.
cpl_error_code xsh_rectify_params_set_defaults(cpl_parameterlist *pars, const char *rec_id, xsh_instrument *inst, xsh_rectify_param *rectify_par)
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_product_vector(cpl_frame *frame, cpl_frameset *frameset, const cpl_parameterlist *parameters, const char *recipe_id, xsh_instrument *instrument, const char *final_prefix)
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.
void xsh_add_product_pre(cpl_frame *frame, cpl_frameset *frameset, const cpl_parameterlist *parameters, const char *recipe_id, xsh_instrument *instr, cpl_propertylist *qclist)
Add DFS keywords to a product frame.
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_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)
cpl_frame * xsh_find_frame_with_tag(cpl_frameset *frames, const char *tag, xsh_instrument *instr)
Find frame with a given tag.
#define XSH_STD_TELL_SLIT_STARE
#define XSH_SLIT_STARE_REMOVE_CRH
#define XSH_SLIT_BIN_SIZE_PIPE_NIR
#define XSH_GET_TAG_FROM_ARM(TAG, instr)
#define XSH_TELL_LINE_LIST
#define XSH_WAVE_BIN_SIZE_PIPE_NIR
#define XSH_OBJECT_SLIT_STARE
cpl_frame * xsh_check_remove_crh_multiple(cpl_frameset *raws, const char *ftag, xsh_stack_param *stack_par, xsh_clipping_param *crh_clipping_par, xsh_instrument *instr, cpl_imagelist **lista, cpl_image **listb)
Check function.
cpl_frame * xsh_check_subtract_bias(cpl_frame *crhm_frame, cpl_frame *master_bias, xsh_instrument *instrument, const char *prefix, const int pre_overscan_corr, const int save_tmp)
Check function to subtract bias.
cpl_frame * xsh_check_subtract_sky_single(int do_subsky, cpl_frame *src_frame, cpl_frame *ordertabedges_frame, cpl_frame *slitmap_frame, cpl_frame *wavemap_frame, cpl_frame *loctab_frame, cpl_frame *definedbreakpoints_frame, xsh_instrument *instrument, int nbkpts, xsh_subtract_sky_single_param *sky_par, cpl_frame *ref_sky_list, cpl_frame *sky_orders_chunks, cpl_frame **sky_spectrum, cpl_frame **sky_spectrum_eso, cpl_frame **sky_img, const char *prefix, const int clean_tmp)
Check function sky subtraction on single frame.
cpl_frame * xsh_check_divide_flat(int do_flatfield, cpl_frame *clean_frame, cpl_frame *master_flat, xsh_instrument *instrument, const char *prefix)
Check function.
cpl_frame * xsh_check_subtract_dark(cpl_frame *rmbias_frame, cpl_frame *master_dark, xsh_instrument *instrument, const char *prefix)
Check function for dark subtraction.
cpl_parameter * xsh_parameters_find(cpl_parameterlist *list, const char *recipe_id, const char *name)
find a parameter
void xsh_parameters_subtract_sky_single_create(const char *recipe_id, cpl_parameterlist *plist, xsh_subtract_sky_single_param p)
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)
void xsh_parameters_stack_create(const char *recipe_id, cpl_parameterlist *list, xsh_stack_param sp)
create the RON determination parameters in a parameters list
xsh_stack_param * xsh_stack_frames_get(const char *recipe_id, cpl_parameterlist *list)
get the detect arclines parameters in a parameters list
double xsh_parameters_get_double(const cpl_parameterlist *list, const char *recipe_id, const char *name)
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)
void xsh_parameters_localize_obj_create(const char *recipe_id, cpl_parameterlist *plist, xsh_localize_obj_param p)
void xsh_parameters_clipping_crh_create(const char *recipe_id, cpl_parameterlist *list, xsh_clipping_param p)
create the crh clipping parameters in a parameters list
void xsh_parameters_rectify_create(const char *recipe_id, cpl_parameterlist *plist, xsh_rectify_param p)
void xsh_parameters_background_create(const char *recipe_id, cpl_parameterlist *list)
create the subtract background parameters in a parameters list
void xsh_parameters_extract_create(const char *recipe_id, cpl_parameterlist *plist, xsh_extract_param p, enum extract_method method)
void xsh_parameters_remove_crh_single_create(const char *recipe_id, cpl_parameterlist *plist, xsh_remove_crh_single_param p)
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)
void xsh_parameters_opt_extract_create(const char *recipe_id, cpl_parameterlist *list, xsh_opt_extract_param p)
Create the optimal extraction parameters in a parameters list.
#define SUBTRACT_SKY_SINGLE_NBKPTS
#define XSH_FREE(POINTER)
cpl_frame * xsh_frame_image_qc_trace_window(cpl_frame *frm_ima, xsh_instrument *instrument, const char *suffix, const int hsize, const int method)
Trace object position in an image.
cpl_frame * xsh_frame_image_ext_qc_trace_window(cpl_frame *frm_ima, xsh_instrument *instrument, const char *suffix, const int hsize, const int method)
Trace object position in an image.
cpl_error_code xsh_slit_stare_get_params(cpl_parameterlist *parameters, const char *rec_id, int *pre_overscan_corr, xsh_background_param **backg_par, xsh_localize_obj_param **loc_obj_par, xsh_rectify_param **rectify_par, xsh_remove_crh_single_param **crh_single_par, int *sub_sky_nbkpts1, int *do_flatfield, int *sub_sky_nbkpts2, xsh_subtract_sky_single_param **sky_par, int *do_optextract, xsh_opt_extract_param **opt_extract_par, int *generate_sdp_format)
cpl_error_code xsh_slit_stare_get_maps(cpl_frameset *calib, int do_compute_map, int recipe_use_model, const char *rec_prefix, xsh_instrument *instrument, cpl_frame *model_config_frame, cpl_frame *crhm_frame, cpl_frame *disp_tab_frame, cpl_frame *order_tab_edges, cpl_frame **wavemap_frame, cpl_frame **slitmap_frame)
cpl_error_code xsh_slit_stare_correct_crh_and_sky(xsh_localize_obj_param *loc_obj_par, xsh_remove_crh_single_param *crh_single_par, xsh_rectify_param *rectify_par, int do_sub_sky, const char *rec_prefix, cpl_frame *rmbkg, cpl_frame *order_tab_edges, cpl_frame *slitmap, cpl_frame *wavemap, cpl_frame *sky_map, cpl_frame *model_config, cpl_frame *single_frame_sky_sub_tab, xsh_instrument *instrument, int sub_sky_nbkpts1, xsh_subtract_sky_single_param *sky_par, cpl_frame *ref_sky_list, cpl_frame *sky_orders_chunks, cpl_frame **sky, cpl_frame **sky_eso, cpl_frame **sky_ima, cpl_frame *wave_tab, cpl_frame *disp_tab, cpl_frame *spectral_format, int nb_raw_frames, cpl_frame **loc_table, cpl_frame **clean, cpl_frame **clean_obj, const int clean_tmp)
correct CRH and sky lines (1st iteration)
cpl_error_code xsh_slit_stare_get_calibs(cpl_frameset *calib, xsh_instrument *instrument, cpl_frame **spectralformat, cpl_frame **mbias, cpl_frame **mdark, cpl_frame **mflat, cpl_frame **otab_edges, cpl_frame **model_cfg, cpl_frame **wave_tab, cpl_frame **sky_list, cpl_frame **sky_orders_chunks, cpl_frame **qc_sky, cpl_frame **bpmap, cpl_frame **sframe_sky_sub_tab, cpl_frame **wmap, cpl_frame **smap, const char *rec_id, int *recipe_use_model, int pscan)