75#define RECIPE_ID "xsh_respon_slit_stare"
76#define RECIPE_AUTHOR "P.Goldoni, L.Guglielmi, R. Haigron, F. Royer, D. Bramich, A. Modigliani"
77#define RECIPE_CONTACT "amodigli@eso.org "
98"Compute the response function in SLIT stare mode";
101"This recipe computes the response function for arm\n\
103 - A RAW frame (Tag = STD_FLUX_SLIT_STARE_arm, Type = RAW)\n\
104 - [UVB,VIS] A master bias frame (Tag = MASTER_BIAS_arm, Type = PRE)\n\
105 - A master dark frame (Tag = MASTER_DARK_arm Type = PRE)\n\
106 - A master flat frame (Tag = MASTER_FLAT_SLIT_arm Type = PRE)\n\
107 - An order table frame(Tag = ORDER_TAB_EDGES_arm Type = ORD)\n\
108 - A wave solution frame(Tag = WAVE_TAB_2D_arm, Type = WAV)\n\
109 - [OPTIONAL] Table with dispersion coefficients (Tag = DISP_TAB_arm)\n\
110 - [OPTIONAL] A telluric model catalog (Tag = TELL_MOD_CAT_arm arm=VIS,NIR)\n\
111 - A standard star fluxes catalog (Tag = FLUX_STD_CATALOG_arm Type = FLX)\n\
112 - A table to set response sampling points (Tag = RESP_FIT_POINTS_CAT_arm)\n\
113 - An atmospheric extinction table (Tag = ATMOS_EXT_arm)\n\
114 if provided this is the one used to flux calibrate the spectra\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\
118 and is required if sky-method=BSPLINE\n\
120 - [If STD is in catal] The response ord-by-ord function (Tag = PREFIX_RESPONSE_ORDER1D_SLIT_arm)\n\
121 - [If STD is in catal] The response merged function (Tag = PREFIX_RESPONSE_MERGE1D_SLIT_arm)\n\
122 - The extracted 2D specturm (Tag = PREFIX_ORDER2D_arm)\n\
123 - The extracted 1D specturm (Tag = PREFIX_ORDER1D_arm)\n\
124 - The merged 2D specturm (Tag = PREFIX_MERGE2D_arm)\n\
125 - The merged 1D specturm (Tag = PREFIX_MERGE1D_arm)\n\
126 - The merged 2D sky frame (Tag = SLY_SLIT_MERGED2D)\n\
127 - [If STD is in catal] Flux calibrated merged 2D spectrum (Tag = PREFIX_FLUX_ORDER2D_arm)\n\
128 - [If STD is in catal] Flux calibrated merged 1D spectrum (Tag = PREFIX_FLUX_ORDER1D_arm)\n\
129 - [If STD is in catal] Flux calibrated merged 2D spectrum (Tag = PREFIX_FLUX_MERGE2D_arm)\n\
130 - [If STD is in catal] Flux calibrated merged 1D spectrum (Tag = PREFIX_FLUX_MERGE1D_arm)\n\
131 - [If STD is in catal] The efficiency (Tag = EFFICIENCY_SLIT_arm)\n\
132 - where PREFIX is SCI, FLUX, TELL if input raw DPR.TYPE contains OBJECT or FLUX or TELLURIC";
149 cpl_recipe *recipe = NULL;
150 cpl_plugin *plugin = NULL;
152 recipe = cpl_calloc(1,
sizeof(*recipe));
153 if ( recipe == NULL ){
157 plugin = &recipe->interface ;
159 cpl_plugin_init(plugin,
162 CPL_PLUGIN_TYPE_RECIPE,
173 cpl_pluginlist_append(list, plugin);
175 return (cpl_error_get_code() != CPL_ERROR_NONE);
191 cpl_recipe *recipe = NULL;
226 opt_extract_par.
niter = 1;
233 assure( plugin != NULL, CPL_ERROR_NULL_INPUT,
"Null plugin");
236 assure( cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE,
237 CPL_ERROR_TYPE_MISMATCH,
238 "Plugin is not a recipe");
240 recipe = (cpl_recipe *)plugin;
243 recipe->parameters = cpl_parameterlist_new();
244 assure( recipe->parameters != NULL,
245 CPL_ERROR_ILLEGAL_OUTPUT,
246 "Memory allocation failed!");
275 recipe->parameters,ipol_par)) ;
278 "do-optextract", FALSE,
279 "TRUE if we do the optimal extraction"));
290 "correct-tellurics", TRUE,
291 "TRUE if during response computation we apply telluric correction"));
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)
385 xsh_msg_dbg_low(
"rectify params: radius=%g bin_lambda=%g bin_space=%g",
392 xsh_msg_dbg_low(
"opt extract params: chunk_size=%d lambda_step=%g box_hsize=%d",
397 sub_sky_nbkpts1,sub_sky_nbkpts2);
399 return cpl_error_get_code();
414 cpl_frameset* frameset)
417 int recipe_tags_size = 2;
420 cpl_frameset* raws = NULL;
421 cpl_frameset* calib = NULL;
424 cpl_frame * bpmap = NULL;
425 cpl_frame * master_bias = NULL;
426 cpl_frame * master_dark = NULL;
427 cpl_frame * master_flat = NULL;
428 cpl_frame * order_tab_edges = NULL;
429 cpl_frame * wave_tab = NULL ;
430 cpl_frame * model_config_frame = NULL ;
431 cpl_frame * wavemap_frame = NULL ;
432 cpl_frame * slitmap_frame = NULL ;
433 cpl_frame * disp_tab_frame = NULL;
434 cpl_frame * spectralformat_frame = NULL ;
435 cpl_frame * fluxcal_1D_frame = NULL ;
436 cpl_frame * fluxcal_2D_frame = NULL ;
437 cpl_frame * fluxcal_rect_1D_frame = NULL ;
438 cpl_frame * fluxcal_rect_2D_frame = NULL ;
440 cpl_frame* sky_list_frame=NULL;
441 cpl_frame* qc_sky_frame=NULL;
446 cpl_frame* high_abs_win=NULL;
456 int do_sub_sky = FALSE;
457 int recipe_use_model = 0 ;
458 int do_optextract = 0;
459 int do_flatfield = 1;
460 int do_compute_map = FALSE ;
461 int generate_sdp_format = 0;
473 cpl_frame * std_flux_frame = NULL ;
475 cpl_frame * rmbias = NULL;
476 cpl_frame * rmdark = NULL;
477 cpl_frame * rmbkg = NULL ;
478 cpl_frame * div_frame = NULL ;
479 cpl_frame * sub_sky_frame = NULL ;
480 cpl_frame * sub_sky2_frame = NULL ;
483 cpl_frame * rect_frame = NULL ;
484 cpl_frame * loc_table_frame = NULL ;
485 cpl_frame * clean_frame = NULL ;
486 cpl_frame * rect2_frame = NULL ;
487 cpl_frame * rect2_frame_eso = NULL ;
488 cpl_frame * rect2_frame_tab = NULL ;
490 cpl_frame * rect2_sky_frame = NULL ;
491 cpl_frame * rect2_sky_frame_eso = NULL ;
492 cpl_frame * rect2_sky_frame_tab = NULL ;
495 cpl_frame * rect_eff_frame_eso = NULL ;
496 cpl_frame * rect_frame_tab = NULL ;
497 cpl_frame * rect_eff_frame_tab = NULL ;
499 cpl_frame * div_clean_frame = NULL ;
500 cpl_frame * tell_frame = NULL ;
501 cpl_frame * res_1D_frame = NULL ;
504 cpl_frame * sky_frame = NULL ;
505 cpl_frame * sky_frame_eso = NULL ;
507 cpl_frame * response_frame = NULL ;
509 cpl_frame * response_ord_frame = NULL ;
510 cpl_frame* sky_frame_ima=NULL;
511 cpl_frame* clean_obj=NULL;
513 cpl_frame * ext_frame = NULL ;
514 cpl_frame * ext_frame_eso = NULL ;
516 cpl_frame *orderext1d_frame = NULL;
517 cpl_frame *orderoxt1d_frame = NULL;
518 cpl_frame *orderoxt1d_eso_frame = NULL;
520 cpl_frame *mergeoxt1d_frame = NULL;
530 cpl_frame* grid_backg=NULL;
531 cpl_frame* frame_backg=NULL;
532 cpl_frame* res_2D_frame=NULL;
533 cpl_frame* res_2D_sky_frame=NULL;
535 char* rec_prefix=NULL;
536 char sky_prefix[256];
538 cpl_frame* frm_atmext=NULL;
539 cpl_frame* frm_std_cat=NULL;
540 cpl_frame* frm_eff=NULL;
543 cpl_frame* eff_frame=NULL;
544 cpl_frame* rect_eff_frame=NULL;
545 cpl_frame* ext_eff_frame=NULL;
546 cpl_frame* ext_eff_frame2=NULL;
547 int pre_overscan_corr=0;
548 cpl_frame* single_frame_sky_sub_tab_frame=NULL;
550 cpl_frame *fluxcal_rect_opt1D_frame = NULL;
551 cpl_frame *fluxcal_merg_opt1D_frame = NULL;
552 cpl_frame *qc_subex_frame = NULL;
553 cpl_frame *qc_s2ddiv1d_frame = NULL;
554 cpl_frame *qc_model_frame = NULL;
555 cpl_frame *qc_weight_frame = NULL;
556 cpl_frame* tell_mod_cat=NULL;
557 cpl_frame* rm_crh = NULL;
558 cpl_frame* frame_ord_by_ord=NULL;
559 cpl_frame* frame_merged=NULL;
560 cpl_frame* resp_fit_points_cat_frame=NULL;
561 cpl_frame* ext_sky_frame=NULL;
562 cpl_frame* res_1D_sky_frame=NULL;
570 cpl_frame* sky_orders_chunks =NULL;
571 cpl_propertylist* qclist = cpl_propertylist_new();
572 cpl_frame* reference_response = NULL;
578 recipe_tags, recipe_tags_size,
588 "Instrument NOT in Slit Mode" ) ;
604 &backg_par,&loc_obj_par,
605 &rectify_par,&crh_single_par,&sub_sky_nbkpts1,
606 &do_flatfield,&sub_sky_nbkpts2,&sky_par,
609 &generate_sdp_format));
620 if ( do_sub_sky == 1 && (wavemap_frame == NULL || slitmap_frame == NULL) ) {
621 xsh_msg_warning(
"sky-subtract is true but wave,slits maps missing create them");
622 do_compute_map = TRUE;
631 &sub_sky_nbkpts1,&sub_sky_nbkpts2));
636 sub_sky_nbkpts1,sub_sky_nbkpts2));
639 "pre-overscan-corr"));
643 "correct-tellurics"));
650 check( nb_raw_frames = cpl_frameset_get_size( raws));
654 "Pls provide a STD FLUX frame in input");
662 xsh_msg(
"Calling xsh_prepare" ) ;
667 "xsh_respon_slit_stare"));
678 &master_bias,&master_dark,&master_flat,
679 &order_tab_edges,&model_config_frame,
680 &wave_tab,&sky_list_frame,&sky_orders_chunks,&qc_sky_frame,
681 &bpmap,&single_frame_sky_sub_tab_frame,
683 &recipe_use_model,pre_overscan_corr));
686 if(resp_fit_points_cat_frame==NULL) {
694 if(frm_atmext==NULL) {
696 return CPL_ERROR_DATA_NOT_FOUND;
700 if(frm_std_cat==NULL) {
702 return CPL_ERROR_DATA_NOT_FOUND;
709 xsh_msg(
"To compute efficiency, you must provide a DISP_TAB_ARM input");
723 if ( do_compute_map && recipe_use_model == FALSE){
735 xsh_msg(
"Calling xsh_find_std_flux" ) ;
737 "Pls provide a STD FLUX telluric" ) ;
749 do_compute_map,recipe_use_model,rec_prefix,
751 disp_tab_frame,order_tab_edges,
752 &wavemap_frame, &slitmap_frame));
753 sprintf(prefix,
"%s",rec_prefix);
756 instrument,
"STD_FLUX_",pre_overscan_corr,1));
766 sprintf(fname,
"%s.fits",ftag) ;
772 xsh_msg(
"Subtract inter-order background");
776 &grid_backg,&frame_backg,0,0,0));
783 do_sub_sky,rec_prefix,rmbkg,
784 order_tab_edges, slitmap_frame,
785 wavemap_frame,sky_map_frm,model_config_frame,
786 single_frame_sky_sub_tab_frame,
790 &sky_frame,&sky_frame_eso,
792 wave_tab,disp_tab_frame,
793 spectralformat_frame,nb_raw_frames,
794 &loc_table_frame,&clean_frame,
800 cpl_frameset* extra=cpl_frameset_new();
801 cpl_frameset_insert(extra,cpl_frame_duplicate(clean_obj));
803 clean_obj=cpl_frameset_get_frame(extra,0);
806 cpl_frameset_delete(extra);
817 single_frame_sky_sub_tab_frame,
845 check( div_clean_frame = cpl_frame_duplicate( sub_sky2_frame ) ) ;
847 xsh_msg(
"Prepare S2D products" ) ;
849 sprintf(rec_name,
"%s_%s_%s.fits",rec_prefix,
XSH_ORDER2D,
854 rectify_par,spectralformat_frame,
855 disp_tab_frame,rec_name,
856 &rect2_frame_eso,&rect2_frame_tab,rec_prefix));
861 sprintf(rec_name,
"%s_%s_%s.fits",sky_prefix,
XSH_ORDER2D,
866 rectify_par,spectralformat_frame,
867 disp_tab_frame,rec_name,
868 &rect2_sky_frame_eso,&rect2_sky_frame_tab,
871 xsh_msg(
"rec2=%p loc=%p rec2_eso=%p",rect2_sky_frame,loc_table_frame,rect2_sky_frame_eso);
877 &rect2_sky_frame_eso,rec_prefix )) ;
880 merge_par,sky_prefix));
885 instrument, &extract_par,ipol_bp,&ext_frame_eso,
888 xsh_msg(
"Merge orders with 1D frame" ) ;
890 merge_par,rec_prefix));
894 xsh_msg(
"Calling xsh_merge_ord with 2D frame" ) ;
896 merge_par,rec_prefix));
897 if(rect2_sky_frame) {
899 merge_par,sky_prefix));
901 xsh_msg(
"Prepare S1D products" ) ;
905 xsh_msg(
"Optimal extraction");
907 wave_tab, model_config_frame, wavemap_frame,
908 slitmap_frame, loc_table_frame,
909 spectralformat_frame, master_flat,
instrument,
910 opt_extract_par, rec_prefix,
911 &orderext1d_frame, &orderoxt1d_frame,
912 &orderoxt1d_eso_frame,
922 merge_par,rec_prefix));
927 xsh_msg(
"Calling xsh_mark_tell (TBW)" ) ;
929 check( tell_frame = cpl_frame_duplicate( ext_frame ) ) ;
932 if(frm_std_cat!=NULL && frm_atmext!=NULL &&
933 resp_fit_points_cat_frame != NULL) {
934 xsh_msg(
"Calling xsh_compute_response" ) ;
938 frame_ord_by_ord=orderoxt1d_eso_frame;
939 frame_merged= mergeoxt1d_frame;
941 frame_ord_by_ord=ext_frame_eso;
942 frame_merged=res_1D_frame;
950 xsh_msg_warning(
"Some error occurred computing response frame. Recover from it.");
959 resp_fit_points_cat_frame,
962 exptime,corr_tell )) == NULL) {
963 xsh_msg_warning(
"Some error occurred computing response frame. Recover from it.");
973 if( response_frame != NULL) {
976 response_frame,merge_par,
instrument,rec_prefix,
977 &fluxcal_rect_2D_frame,&fluxcal_rect_1D_frame,
978 &fluxcal_2D_frame,&fluxcal_1D_frame));
980 if(reference_response != NULL){
983 cpl_table* ref_resp = cpl_table_load(cpl_frame_get_filename(reference_response),1,0);
984 cpl_table* master_resp = cpl_table_load(cpl_frame_get_filename(response_frame),1,0);
985 if(ref_resp != NULL && master_resp != NULL){
999 response_frame,merge_par,
instrument,rec_prefix,
1000 &fluxcal_rect_opt1D_frame,
1001 &fluxcal_merg_opt1D_frame));
1007 if(response_ord_frame != NULL && disp_tab_frame != NULL) {
1009 xsh_msg(
"Calling xsh_multiply_flat" ) ;
1010 sprintf(file_tag,
"SLIT_STARE_NOCRH_NOT_FF_%s",arm_str) ;
1015 check(eff_frame=cpl_frame_duplicate(div_clean_frame));
1017 sprintf(file_name,
"%s_EFF_%s_%s.fits",rec_prefix,
XSH_ORDER2D,
1027 spectralformat_frame,
1030 &rect_eff_frame_eso,
1031 &rect_eff_frame_tab,
1033 xsh_msg(
"Calling xsh_extract" ) ;
1036 &ext_eff_frame2,rec_prefix)) ;
1037 xsh_msg(
"name %s",cpl_frame_get_filename(ext_eff_frame2));
1045 if(model_config_frame!=NULL && wavemap_frame != NULL&& slitmap_frame != NULL) {
1056 if(fluxcal_rect_2D_frame != NULL) {
1066 if(res_2D_sky_frame) {
1070 if ( do_sub_sky == 1 ) {
1078 if(response_ord_frame!=NULL) {
1083 if(response_frame!=NULL) {
1095 cpl_image* itmp = cpl_image_load(cpl_frame_get_filename(res_2D_frame),CPL_TYPE_DOUBLE,0,0);
1097 cpl_image_delete(itmp);
1107 if(res_2D_sky_frame) {
1113 if(fluxcal_2D_frame != NULL) {
1128 if ( do_optextract){
1137 cpl_frame_get_tag(qc_subex_frame)));
1140 cpl_frame_get_tag(qc_s2ddiv1d_frame)));
1143 cpl_frame_get_tag(qc_model_frame)));
1146 cpl_frame_get_tag(qc_weight_frame)));
1236 return CPL_ERROR_NONE;
static xsh_instrument * instrument
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)
xsh_pre * xsh_pre_load(cpl_frame *frame, xsh_instrument *instr)
Load a xsh_pre structure from a frame.
void xsh_pre_free(xsh_pre **pre)
Free a xsh_pre structure.
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)
#define XSH_ASSURE_NOT_NULL(pointer)
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_warning(...)
Print an warning message.
#define xsh_msg_dbg_medium(...)
#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_multiply_flat(cpl_frame *frame, cpl_frame *flat, const char *filename, xsh_instrument *instr)
multiply PRE frame with the master FLAT frame
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_remove_crh_single(cpl_frame *sci_frame, xsh_instrument *instrument, cpl_mask *sky_map, xsh_remove_crh_single_param *single_par, const char *name)
Remove cosmic rays from a single frame.
static cpl_error_code xsh_respon_slit_stare(cpl_parameterlist *, cpl_frameset *)
Interpret the command line options and execute the data processing.
static char xsh_respon_slit_stare_description_short[]
int cpl_plugin_get_info(cpl_pluginlist *list)
Build the list of available plugins, for this module.
static int xsh_respon_slit_stare_exec(cpl_plugin *)
Execute the plugin instance given by the interface.
static int xsh_respon_slit_stare_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_respon_slit_stare_create(cpl_plugin *)
Setup the recipe options.
static char xsh_respon_slit_stare_description[]
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.
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.
cpl_error_code get_chromatic_eff(cpl_frame *eff, cpl_propertylist *qclist)
void xsh_init(void)
Reset library state.
cpl_error_code xsh_frame_table_monitor_flux_qc(cpl_frame *frm, const char *colw, const char *colf, const char *prefix, xsh_instrument *instrument)
Computes statistics on spectrum for QC.
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 calc_resp_qc(cpl_table *mtab, cpl_table *rtab, xsh_instrument *instrument, int lower, int upper, const char *label, cpl_propertylist *qclist)
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_frame * xsh_compute_response_ord(cpl_frame *spectrum_frame, cpl_frame *flux_std_star_cat_frame, cpl_frame *atmos_ext_frame, cpl_frame *high_abs_win_frame, xsh_instrument *instrument, double exptime)
cpl_frame * xsh_compute_response2(cpl_frame *obs_std_star, cpl_frame *flux_std_star_cat, cpl_frame *atmos_ext, cpl_frame *high_abs, cpl_frame *resp_fit_points, cpl_frame *tell_mod_cat, xsh_instrument *instrument, double exptime, const int tell_corr)
cpl_error_code xsh_calib_nir_respon_corr_if_JH(cpl_frameset *calib, xsh_instrument *instr)
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_error_code xsh_calib_nir_corr_if_JH(cpl_frameset *calib, xsh_instrument *instr, const char *recid)
cpl_error_code xsh_frameset_uniform_bin(cpl_frameset **raws, cpl_frameset **calib, xsh_instrument *instrument)
int xsh_print_rec_status(const int val)
Check if an error has happened and returns error kind and location.
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_std_flux(cpl_frameset *frames)
Find standard star frame.
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)
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_STD_FLUX_SLIT_STARE
#define XSH_RESP_FIT_POINTS_CAT
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.
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)
int xsh_parameters_subtract_sky_single_get_true(const char *recipe_id, cpl_parameterlist *list)
void xsh_parameters_new_boolean(cpl_parameterlist *list, const char *recipe_id, const char *name, int value, const char *comment)
int xsh_parameters_get_boolean(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_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_background_create(const char *recipe_id, cpl_parameterlist *list)
create the subtract background parameters in a parameters list
void xsh_parameters_interpolate_bp_create(const char *recipe_id, cpl_parameterlist *plist, xsh_interpolate_bp_param p)
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_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_error_code xsh_stare_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)
Corrects parameters for binning.
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_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_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_frame * xsh_compute_efficiency(cpl_frame *mer1D, cpl_frame *std_cat, cpl_frame *atm_ext, cpl_frame *high_abs_win, xsh_instrument *instr)
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_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_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)
cpl_error_code xsh_flux_calibrate1D(cpl_frame *rect1D, cpl_frame *atmext, cpl_frame *response, int mpar, xsh_instrument *inst, const char *rec_prefix, cpl_frame **fcal_rect_1D, cpl_frame **fcal_1D)