76#define RECIPE_ID "xsh_scired_slit_stare"
77#define RECIPE_AUTHOR "P.Goldoni, L.Guglielmi, R. Haigron, F. Royer, D. Bramich, A. Modigliani"
78#define RECIPE_CONTACT "amodigli@eso.org"
100"Reduce science exposure in SLIT configuration and stare mode";
103"This recipe reduces science exposure in SLIT configuration and stare mode\n\
105 - A set of n Science frames ( n == 1 or >=3, \
106Tag = OBJECT_SLIT_STARE_UVB)\n\
107 - A spectral format table (Tag = SPECTRAL_FORMAT_TAB_arm)\n\
108 - [UVB,VIS] A master bias frame (Tag = MASTER_BIAS_arm)\n\
109 - [OPTIONAL]A master dark frame (Tag = MASTER_DARK_arm)\n\
110 - A master flat frame (Tag = MASTER_FLAT_SLIT_arm)\n\
111 - An order table frame(Tag = ORDER_TAB_EDGES_SLIT_arm)\n\
112 - [OPTIONAL] A table with dispersion coefficients (Tag = DISP_TAB_arm,\n\
113 required in poly mode\n\
114 - [poly mode] A wave solution frame(Tag = WAVE_TAB_2D_arm)\n\
115 - [physical model mode] A model cfg table (Format = TABLE, Tag = XSH_MOD_CFG_TAB_arm)\n\
116 - [OPTIONAL] A table specifying multiplying factor for break points \n\
117 (Tag = SKY_SUB_BKPTS_arm) to generate\n\
118 - [OPTIONAL] A non-linear badpixel map (Tag = BP_MAP_NL_arm)\n\
119 - [OPTIONAL] A reference badpixel map (Tag = BP_MAP_RP_arm)\n\
120 - [OPTIONAL,physmod mode] A table listing sky line positions (Tag = SKY_LINE_LIST_arm)\n\
121 this is used to be able to control quality of sky subtraction, for example\n\
122 projecting guess positions on the product SCI_SLIT_STARE_SUB_SKY_arm\n\
123 and is required if sky-method=BSPLINE\n\
124 - [OPTIONAL] The instrument response table (Tag = RESPONSE_MERGE1D_SLIT_arm)\n\
125 - [OPTIONAL] An atmospheric extinction table (Tag = ATMOS_EXT_arm)\n\
126 - [OPTIONAL] A telluric mask (Tag = TELL_MASK_arm)\n\
127 - [OPTIONAL] The instrument master response table (Tag = MRESPONSE_MERGE1D_SLIT_arm).\n\
128 If both master and individual response are provided the individual response is preferred.\n\
130 - PREFIX_ORDER2D_arm extracted spectrum, order-by-order, 2D\n\
131 - PREFIX_ORDER1D_arm extracted spectrum, order-by-order, 1D\n\
132 - PREFIX_MERGE2D_arm merged spectrum, 2D\n\
133 - PREFIX_MERGE1D_arm merged spectrum, 1D\n\
134 - SKY_SLIT_MERGE2D_arm merged spectrum sky, 2D\n\
135 - PREFIX_SUB_BACK_SLIT_arm sci frame bias, (dark), inter-order bkg subtracted\n\
136 - PREFIX_WAVE_MAP_arm, wave map image\n\
137 - PREFIX_SLIT_MAP_arm, slit map image\n\
138 - PREFIX_DIVFF_arm as PREFIX_SUB_BACK_SLIT_arm, flat fielded\n\
139 - PREFIX_SUB_SKY_arm, as PREFIX_DIVFF_arm, sky subtracted\n\
140 - PREFIX_SKY_arm, 2D sky frame\n\
141 - PREFIX_SKY_ORD1D_arm, 1D sky image (order-by-order)\n\
142 - PREFIX_BACK_SLIT_arm, inter order background image \n\
143 - where PREFIX is SCI, FLUX, TELL if input raw DPR.TYPE contains OBJECT or FLUX or TELLURIC\n\
144 - [OPTIONAL, if response and atm ext are provided] PREFIX_FLUX_ORDER2D_arm (2 dimension)\n\
145 - [OPTIONAL, if response and atm ext are provided] PREFIX_FLUX_ORDER1D_arm (1 dimension)\n\
146 - [OPTIONAL, if response and atm ext are provided] PREFIX_FLUX_MERGE2D_arm (2 dimension)\n\
147 - [OPTIONAL, if response and atm ext are provided] PREFIX_FLUX_MERGE1D_arm (1 dimension)\n\
148 - PREFIX_ON_arm bias (dark) subtracted sci frame";
165 cpl_recipe *recipe = NULL;
166 cpl_plugin *plugin = NULL;
168 recipe = cpl_calloc(1,
sizeof(*recipe));
169 if ( recipe == NULL ){
173 plugin = &recipe->interface ;
175 cpl_plugin_init(plugin,
178 CPL_PLUGIN_TYPE_RECIPE,
189 cpl_pluginlist_append(list, plugin);
191 return (cpl_error_get_code() != CPL_ERROR_NONE);
207 cpl_recipe *recipe = NULL;
240 opt_extract_par.
niter = 1;
247 assure( plugin != NULL, CPL_ERROR_NULL_INPUT,
"Null plugin");
250 assure( cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE,
251 CPL_ERROR_TYPE_MISMATCH,
252 "Plugin is not a recipe");
254 recipe = (cpl_recipe *)plugin;
257 recipe->parameters = cpl_parameterlist_new();
258 assure( recipe->parameters != NULL,
259 CPL_ERROR_ILLEGAL_OUTPUT,
260 "Memory allocation failed!");
294 recipe->parameters,ipol_par)) ;
302 "do-optextract", FALSE,
303 "TRUE if we do the optimal extraction"));
309 "cut-uvb-spectrum", TRUE,
310 "TRUE if recipe cuts the UVB spectrum at 556 nm (dichroich)"));
315 "generate-SDP-format", FALSE,
316 "TRUE if additional files should be generated in Science Data Product"
321 "dummy-association-keys", 0,
322 "Sets the number of dummy (empty) ASSONi, ASSOCi and ASSOMi keywords to"
326 if ( cpl_error_get_code() != CPL_ERROR_NONE ){
344 cpl_recipe *recipe = NULL;
348 assure( plugin != NULL, CPL_ERROR_NULL_INPUT,
"Null plugin" );
351 assure( cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE,
352 CPL_ERROR_TYPE_MISMATCH,
"Plugin is not a recipe");
354 recipe = (cpl_recipe *)plugin;
360 if ( cpl_error_get_code() != CPL_ERROR_NONE ) {
379 cpl_recipe *recipe = NULL;
384 assure( plugin != NULL, CPL_ERROR_NULL_INPUT,
"Null plugin" );
387 assure( cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE,
388 CPL_ERROR_TYPE_MISMATCH,
"Plugin is not a recipe");
390 recipe = (cpl_recipe *)plugin;
395 if (cpl_error_get_code() != CPL_ERROR_NONE)
413 xsh_msg_dbg_low(
"rectify params: radius=%g bin_lambda=%g bin_space=%g",
420 xsh_msg_dbg_low(
"opt extract params: chunk_size=%d lambda_step=%g box_hsize=%d",
425 sub_sky_nbkpts1,sub_sky_nbkpts2);
427 return cpl_error_get_code();
442 cpl_frameset* frameset)
445 const int recipe_tags_size = 4;
452 cpl_frameset *raws = NULL;
453 cpl_frameset *calib = NULL;
454 cpl_frameset *usedframes = NULL;
457 cpl_frame *bpmap = NULL;
458 cpl_frame *master_bias = NULL;
459 cpl_frame *master_dark = NULL;
460 cpl_frame *master_flat = NULL;
461 cpl_frame *order_tab_edges = NULL;
462 cpl_frame *wave_tab = NULL ;
463 cpl_frame *model_config_frame = NULL ;
464 cpl_frame *wavemap_frame = NULL ;
465 cpl_frame *slitmap_frame = NULL ;
466 cpl_frame *disp_tab_frame = NULL;
468 cpl_frame *spectralformat_frame = NULL ;
469 cpl_frame *tellmask_frame = NULL;
487 int do_compute_map = 0;
489 int recipe_use_model = 0;
491 int do_flatfield = 1;
492 int do_optextract = 0;
493 int do_sub_sky = FALSE;
494 int generate_sdp_format = 0;
505 cpl_frame * crhm_frame = NULL ;
507 cpl_frame * rmdark = NULL;
508 cpl_frame * rmbkg = NULL ;
509 cpl_frame * div_frame = NULL ;
512 cpl_frame * sub_sky_frame = NULL ;
513 cpl_frame * sub_sky2_frame = NULL ;
515 cpl_frame * rect_frame = NULL ;
516 cpl_frame * loc_table_frame = NULL ;
517 cpl_frame * clean_frame = NULL ;
518 cpl_frame * rect2_frame = NULL ;
519 cpl_frame * rect2_frame_eso = NULL ;
520 cpl_frame * rect2_frame_tab = NULL ;
523 cpl_frame * rect2_sky_frame = NULL ;
524 cpl_frame * rect2_sky_frame_eso = NULL ;
525 cpl_frame * rect2_sky_frame_tab = NULL ;
528 cpl_frame * sky_frame = NULL ;
529 cpl_frame * sky_frame_eso = NULL ;
530 cpl_frame * res_1D_frame = NULL ;
531 cpl_frame * res_2D_frame = NULL ;
532 cpl_frame * res_2D_sky_frame = NULL ;
534 cpl_frame * fluxcal_rect_1D_frame = NULL ;
535 cpl_frame * fluxcal_rect_2D_frame = NULL ;
536 cpl_frame * fluxcal_1D_frame = NULL ;
537 cpl_frame * fluxcal_2D_frame = NULL ;
539 cpl_frame * ext_frame = NULL ;
540 cpl_frame * ext_frame_eso = NULL ;
542 cpl_frame *orderext1d_frame = NULL;
543 cpl_frame *orderoxt1d_frame = NULL;
544 cpl_frame *orderoxt1d_eso_frame = NULL;
546 cpl_frame *mergeext1d_frame = NULL;
547 cpl_frame *mergeoxt1d_frame = NULL;
548 cpl_frame *fluxcal_rect_opt1D_frame = NULL;
549 cpl_frame *fluxcal_merg_opt1D_frame = NULL;
550 cpl_frame* ext_sky_frame=NULL;
551 cpl_frame* res_1D_sky_frame=NULL;
553 cpl_frame * fluxframe = NULL;
554 cpl_frame * uncalframe = NULL;
560 cpl_frame* grid_backg=NULL;
561 cpl_frame* frame_backg=NULL;
562 cpl_frame* sky_frame_ima=NULL;
567 const char* ftag=NULL;
569 cpl_frame* single_frame_sky_sub_tab_frame=NULL;
573 cpl_frame* clean_obj=NULL;
574 char *rec_prefix = NULL;
575 char sky_prefix[256];
576 cpl_frame* sky_list_frame=NULL;
577 cpl_frame* qc_sky_frame=NULL;
578 cpl_propertylist* plist=NULL;
582 cpl_frame* response_frame=NULL;
583 cpl_frame* frm_atmext=NULL;
584 int pre_overscan_corr=0;
585 cpl_frame *qc_subex_frame = NULL;
586 cpl_frame *qc_s2ddiv1d_frame = NULL;
587 cpl_frame *qc_model_frame = NULL;
588 cpl_frame *qc_weight_frame = NULL;
591 cpl_frameset* crh_clean_lacosmic = NULL;
592 cpl_frameset *sub_bias_set = NULL;
593 cpl_frameset *sub_dark_set = NULL;
594 cpl_frame* sky_map_frm = NULL;
595 cpl_frame* sky_orders_chunks =NULL;
596 int cut_uvb_spectrum=0;
597 cpl_propertylist* qclist = cpl_propertylist_new();
603 recipe_tags, recipe_tags_size,
622 check( nb_raw_frames = cpl_frameset_get_size( raws ) ) ;
625 if(nb_raw_frames>1) {
630 "pre-overscan-corr"));
634 &master_bias,&master_dark,&master_flat,
635 &order_tab_edges,&model_config_frame,
636 &wave_tab,&sky_list_frame,&sky_orders_chunks,
638 &bpmap,&single_frame_sky_sub_tab_frame,
640 &recipe_use_model,pre_overscan_corr));
649 if(response_frame != NULL) {
651 if( frm_atmext==NULL ) {
653 return CPL_ERROR_DATA_NOT_FOUND;
663 &backg_par,&loc_obj_par,
664 &rectify_par,&crh_single_par,&sub_sky_nbkpts1,
665 &do_flatfield,&sub_sky_nbkpts2,&sky_par,
668 &generate_sdp_format));
684 if ( (do_sub_sky && !do_compute_map) &&
685 (wavemap_frame == NULL || slitmap_frame == NULL) ) {
686 xsh_msg_warning(
"sky-subtract is true but wave,slits maps missing create them");
687 do_compute_map = TRUE;
695 &sub_sky_nbkpts1,&sub_sky_nbkpts2));
699 if ( do_compute_map && recipe_use_model==FALSE){
701 "compute-map=TRUE, physmodel mode, you must give a DISP_TAB_ARM input");
705 sub_sky_nbkpts1,sub_sky_nbkpts2));
721 cpl_frame* frm = NULL;
722 cpl_frame* sub = NULL;
726 if (master_bias != NULL) {
729 sub_bias_set = cpl_frameset_new();
730 nraws = cpl_frameset_get_size(raws);
732 for (i = 0; i < nraws; i++) {
733 sprintf(prefix,
"SCI_SUB_%d_", i);
734 frm = cpl_frameset_get_frame(raws, i);
737 pre_overscan_corr, 0);
738 cpl_frameset_insert(sub_bias_set, sub);
741 sub_bias_set = cpl_frameset_duplicate(raws);
746 if (master_dark != NULL) {
749 sub_dark_set = cpl_frameset_new();
750 nraws = cpl_frameset_get_size(sub_bias_set);
752 for (i = 0; i < nraws; i++) {
753 sprintf(prefix,
"SCI_%d_SUBTRACT", i);
754 frm = cpl_frameset_get_frame(sub_bias_set, i);
757 cpl_frameset_insert(sub_dark_set, sub);
761 sub_dark_set = cpl_frameset_duplicate(sub_bias_set);
764 rmdark=cpl_frameset_get_frame(sub_dark_set,0);
767 "xsh_scired_slit_stare"));
768 sprintf(prefix,
"%s_",rec_prefix);
781 do_compute_map,recipe_use_model,rec_prefix,
783 disp_tab_frame,order_tab_edges,
784 &wavemap_frame, &slitmap_frame));
788 xsh_msg(
"Subtract inter-order background");
792 &grid_backg,&frame_backg,1,0,1));
795 cpl_frame* frm_tmp=NULL;
796 rmbkg = cpl_frame_duplicate( rmdark );
798 sprintf(tag,
"%sNO_SUB_BACK_%s",prefix,
800 sprintf(fname,
"%s.fits",tag);
802 cpl_frame_set_filename(rmbkg,fname);
803 cpl_frame_set_tag(rmbkg,tag);
810 do_sub_sky,rec_prefix,rmbkg,
811 order_tab_edges, slitmap_frame,
812 wavemap_frame,sky_map_frm,model_config_frame,
814 sub_sky_nbkpts1, sky_par,sky_list_frame,sky_orders_chunks,
815 &sky_frame,&sky_frame_eso,&sky_frame_ima,
816 wave_tab,disp_tab_frame,
817 spectralformat_frame,nb_raw_frames,
818 &loc_table_frame,&clean_frame,&clean_obj,0);
832 single_frame_sky_sub_tab_frame,
836 sky_list_frame,sky_orders_chunks,
843 xsh_msg(
"Prepare S2D products" ) ;
845 sprintf(rec_name,
"%s_%s_%s.fits",rec_prefix,
XSH_ORDER2D,
850 rectify_par,spectralformat_frame,
851 disp_tab_frame,rec_name,
852 &rect2_frame_eso,&rect2_frame_tab,
858 sprintf(rec_name,
"%s_%s_%s.fits",sky_prefix,
XSH_ORDER2D,
862 wave_tab, model_config_frame,
864 spectralformat_frame,disp_tab_frame,
865 rec_name,&rect2_sky_frame_eso,
866 &rect2_sky_frame_tab,rec_prefix));
873 &rect2_sky_frame_eso,rec_prefix ));
876 merge_par,sky_prefix));
883 &ext_frame_eso,rec_prefix)) ;
885 xsh_msg(
"Merge orders with 1D frame" ) ;
887 merge_par,rec_prefix));
893 xsh_msg(
"Calling xsh_merge_ord with 2D frame" ) ;
894 if( rect2_sky_frame ) {
896 merge_par,sky_prefix));
899 merge_par,rec_prefix));
903 xsh_msg(
"Prepare S1D products" ) ;
906 xsh_msg(
"Optimal extraction");
908 wave_tab, model_config_frame, wavemap_frame,
909 slitmap_frame, loc_table_frame,
910 spectralformat_frame, master_flat,
instrument,
911 opt_extract_par, rec_prefix,
912 &orderext1d_frame, &orderoxt1d_frame,
913 &orderoxt1d_eso_frame,
920 merge_par,rec_prefix));
922 merge_par,rec_prefix));
928 cpl_boolean flux_available = CPL_FALSE;
929 if(response_frame != NULL && frm_atmext != NULL) {
931 response_frame,merge_par,
instrument,rec_prefix,
932 &fluxcal_rect_2D_frame,&fluxcal_rect_1D_frame,
933 &fluxcal_2D_frame,&fluxcal_1D_frame));
934 flux_available = CPL_TRUE;
939 response_frame,merge_par,
instrument,rec_prefix,
940 &fluxcal_rect_opt1D_frame,
941 &fluxcal_merg_opt1D_frame));
947 cpl_propertylist_append_bool(qclist,
"ESO QC FLUX AVAILABLE",flux_available);
956 if(model_config_frame!=NULL && wavemap_frame != NULL&& slitmap_frame != NULL) {
967 if(fluxcal_rect_2D_frame != NULL) {
977 if(res_2D_sky_frame) {
981 if ( do_sub_sky == 1 ) {
986 if(cut_uvb_spectrum) {
993 if(res_2D_sky_frame) {
1003 if(fluxcal_rect_2D_frame != NULL) {
1008 if ( do_optextract){
1022 usedframes = cpl_frameset_duplicate(frameset);
1024 sprintf(prefix,
"%s_ORDER2D",rec_prefix);
1031 cpl_image* itmp = cpl_image_load(cpl_frame_get_filename(res_2D_frame),CPL_TYPE_DOUBLE,0,0);
1033 cpl_image_delete(itmp);
1042 if(res_2D_sky_frame) {
1052 if (do_compute_map){
1070 if ( do_optextract){
1081 cpl_frame_get_tag(qc_subex_frame)));
1084 cpl_frame_get_tag(qc_s2ddiv1d_frame)));
1087 cpl_frame_get_tag(qc_model_frame)));
1090 cpl_frame_get_tag(qc_weight_frame)));
1092 if ( do_sub_sky == 1 ) {
1100 if(frame_backg != NULL) {
1104 if(crhm_frame != NULL) {
1105 sprintf(tag,
"%s_ON",rec_prefix);
1111 if(qc_sky_frame != NULL) {
1117 if(fluxcal_rect_2D_frame != NULL) {
1131 if ( do_optextract){
1144 if (generate_sdp_format) {
1145 cpl_frame * fluxframe_copy = fluxframe;
1146 cpl_frame * uncalframe_copy = uncalframe;
1147 if (fluxframe != NULL) {
1148 check( cpl_frameset_insert(usedframes, fluxframe) );
1152 if (uncalframe != NULL) {
1153 check( cpl_frameset_insert(usedframes, uncalframe) );
1160 if (fluxframe_copy != NULL) {
1161 check( cpl_frameset_erase_frame(usedframes, fluxframe_copy) );
1163 if (uncalframe_copy != NULL) {
1164 check( cpl_frameset_erase_frame(usedframes, uncalframe_copy) );
1193 if(do_compute_map) {
1256 return CPL_ERROR_NONE;
static xsh_instrument * instrument
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)
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.
cpl_frame * xsh_pre_save(const xsh_pre *pre, const char *filename, const char *tag, int temp)
Save PRE on disk.
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)
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.
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_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_scired_slit_stare(cpl_parameterlist *, cpl_frameset *)
Interpret the command line options and execute the data processing.
static int xsh_scired_slit_stare_destroy(cpl_plugin *)
Destroy what has been created by the 'create' function.
int cpl_plugin_get_info(cpl_pluginlist *list)
Build the list of available plugins, for this module.
static int xsh_scired_slit_stare_create(cpl_plugin *)
Setup the recipe options.
static cpl_error_code xsh_params_monitor(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 char xsh_scired_slit_stare_description[]
static char xsh_scired_slit_stare_description_short[]
static int xsh_scired_slit_stare_exec(cpl_plugin *)
Execute the plugin instance given by the interface.
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.
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)
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_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)
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_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_STD_TELL_SLIT_STARE
#define XSH_SLIT_STARE_REMOVE_CRH
#define XSH_STD_FLUX_SLIT_STARE
#define XSH_RESPONSE_MERGE1D_SLIT
#define XSH_GET_TAG_FROM_ARM(TAG, instr)
#define XSH_MRESPONSE_MERGE1D_SLIT
#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.
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)
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
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)
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)
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_image_cut_dichroic_uvb(cpl_frame *frame1d)
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_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_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_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)