53 cpl_frame* bpmap = NULL;
54 cpl_frame* bpmap_nl = NULL;
55 cpl_frame* bpmap_rp = NULL;
56 cpl_frame* bp_nl_frame = NULL;
57 cpl_frame* frm = NULL;
59 cpl_propertylist* plist = NULL;
60 cpl_image* image = NULL;
61 cpl_frameset* set=NULL;
65 const char* bp_nl_name;
96 set=cpl_frameset_new();
101 cpl_frameset_insert(set,cpl_frame_duplicate(bpmap_rp));
109 bp_nl_name = cpl_frame_get_filename(bp_nl_frame);
110 plist = cpl_propertylist_load(bp_nl_name, 0);
118 if ((naxis1 == 2144 &&
binx == 1) || (naxis1 == 1072 &&
binx == 2)) {
123 if ((naxis1 == 2106 &&
binx == 1) || (naxis1 == 1053 &&
binx == 2)) {
128 if (naxis1 == 2048) {
134 bpmap_nl=cpl_frame_duplicate(bp_nl_frame);
136 cpl_frameset_insert(set,cpl_frame_duplicate(bpmap_nl));
159 sz=cpl_frameset_get_size(set);
161 bpmap = cpl_frame_duplicate(cpl_frameset_get_frame(set, 0));
163 frm=cpl_frameset_get_frame(set,i);
170 image = cpl_image_load(cpl_frame_get_filename(bpmap), CPL_TYPE_INT, 0, 0);
172 plist = cpl_propertylist_load(cpl_frame_get_filename(bpmap), 0);
173 sprintf(name,
"%s.fits", tag_ou);
176 cpl_frame_set_tag(bpmap, tag_ou);
177 cpl_frame_set_filename(bpmap, name);
205 cpl_frame *crhm_frame, cpl_frame *model_config_frame, cpl_frameset *calib,
207 const char *rec_prefix,
208 cpl_frame **wavemap_frame, cpl_frame **slitmap_frame)
210 char wave_map_tag[256];
211 char slit_map_tag[256];
214 if ( recipe_use_model){
215 int found_temp= CPL_TRUE;
217 xsh_msg(
"Compute with MODEL the wave map and the slit map");
225 wave_map_tag,slit_map_tag, wavemap_frame, slitmap_frame,0));
228 xsh_msg(
"Compute with POLY the wave map and the slit map");
231 wavemap_frame, slitmap_frame,rec_prefix));
235 cpl_frame *tmp = NULL;
237 xsh_msg(
"Get the wave map and the slit map");
239 check_msg( *slitmap_frame = cpl_frame_duplicate( tmp),
"If compute-map is set to FALSE you must provide a SLIT_MAP_ARM frame in input");
241 check_msg( *wavemap_frame = cpl_frame_duplicate( tmp),
"If compute-map is set to FALSE you must provide a SLIT_MAP_ARM frame in input");
265 int size_raw_frameset =0;
266 cpl_frame *result = NULL;
270 check( size_raw_frameset = cpl_frameset_get_size( raws));
272 if ( size_raw_frameset >= 2 ) {
273 xsh_msg(
"---Remove crh (multiple frames)");
275 "Error in xsh_remove_crh");
279 check( result = cpl_frame_duplicate(cpl_frameset_get_frame( raws,0)));
298 cpl_frame *master_bias,
301 const int pre_overscan_corr,
const int save_tmp)
303 cpl_frame *result = NULL;
310 char rmbias_tag[256];
312 sprintf( rmbias_tag,
"%s_%s_%s", prefix,
"ON",
315 check( result = cpl_frame_duplicate( crhm_frame));
316 cpl_frame_set_tag( result, rmbias_tag);
321 if( master_bias != NULL) {
325 pre_overscan_corr,save_tmp));
328 result = cpl_frame_duplicate( crhm_frame);
349 cpl_frame *result = NULL;
350 char result_name[256];
356 if(master_dark != NULL) {
358 sprintf( result_name,
"%s_DARK.fits", prefix);
364 result = cpl_frame_duplicate( rmbias_frame);
388 cpl_frame *result = NULL;
389 char result_tag[256];
395 if( do_flatfield == CPL_TRUE) {
397 sprintf( result_tag,
"%s_DIVFF_%s", prefix,
404 check( result = cpl_frame_duplicate( clean_frame));
427 char result_tag[256];
428 char result_name[256];
429 cpl_frame *result = NULL;
436 if ( nb_raws_frame == 1 && crh_single_par->
nb_iter > 0) {
437 xsh_msg(
"---Remove crh (single frame)");
438 sprintf( result_tag,
"%s_NOCRH_%s", prefix,
440 sprintf( result_name,
"%s.fits",result_tag);
444 instrument, NULL,crh_single_par, result_tag));
447 check( result = cpl_frame_duplicate( subsky_frame));
478 cpl_frame *src_frame,
479 cpl_frame *ordertabedges_frame,
480 cpl_frame *slitmap_frame,
481 cpl_frame *wavemap_frame,
482 cpl_frame *loctab_frame,
483 cpl_frame *definedbreakpoints_frame,
487 cpl_frame* ref_sky_list,
488 cpl_frame* sky_orders_chunks,
489 cpl_frame **sky_spectrum,
490 cpl_frame **sky_spectrum_eso,
495 char result_tag[256];
496 char result_name[256];
497 cpl_frame *result = NULL;
501 if ( do_subsky == CPL_TRUE){
502 xsh_msg(
"---Sky subtraction (single frame)");
504 slitmap_frame, wavemap_frame, loctab_frame,ref_sky_list,sky_orders_chunks,
505 definedbreakpoints_frame,
instrument, nbkpts, sky_par, sky_spectrum,
506 sky_spectrum_eso, prefix,clean_tmp));
507 sprintf( result_tag,
"%s_SKY_%s", prefix,
509 sprintf( result_name,
"%s.fits", result_tag);
512 if(strstr(result_name,
"TMPSKY")!=NULL) {
517 xsh_msg(
"[No sky subtraction]");
518 check( result = cpl_frame_duplicate( src_frame));
521 if ( do_subsky == CPL_TRUE){
525 XSH_ASSURE_NOT_NULL_MSG( slitmap_frame,
"Required slitmap frame is missing, provide it or set compute-map to TRUE");
533 xsh_msg(
"---Sky subtraction (single frame)");
536 slitmap_frame, wavemap_frame, loctab_frame,ref_sky_list,
538 definedbreakpoints_frame,
instrument, nbkpts, sky_par,
539 sky_spectrum, sky_spectrum_eso, prefix,clean_tmp));
540 sprintf( result_tag,
"%s_SKY_%s", prefix,
542 sprintf( result_name,
"%s.fits", result_tag);
546 if(strstr(result_name,
"TMPSKY")!=NULL) {
551 xsh_msg(
"[No sky subtraction]");
553 check( result = cpl_frame_duplicate( src_frame));
575 cpl_frame *sci_frame, cpl_frameset *wave_frameset,
576 cpl_frame *order_tab_frame, cpl_frame *disp_tab_frame,
582 if( model_frame!=NULL) {
589 cpl_frame *wavesol_frame = NULL;
591 wavesol_frame = cpl_frameset_get_frame( wave_frameset, i);
599 if ( disp_tab_frame != NULL){
612void xsh_check_localize_and_nocrh(
int nb_frames, loc_obj_par
615 check( loc_table_frame = xsh_localize_obj( NULL,
616 instrument, loc_obj_par, NULL, NULL));
619 (nb_raw_frames == 1 && crh_single_par->nb_iter > 0)){
620 xsh_msg(
"Preliminary sky subtraction for CRH single or localize auto");
621 xsh_msg(
"Sky will be put back later");
623 sprintf(sky_tag,
"%s_TMP_SKY_%s",rec_prefix,
624 xsh_instrument_arm_tostring(instrument));
626 check( sub_sky_frame = xsh_subtract_sky_single( rmbkg, order_tab_edges,
627 slitmap_frame, wavemap_frame,
629 single_frame_sky_sub_tab_frame,
631 sub_sky_nbkpts1, sky_par,
645 sky_frame_ima=xsh_save_sky_model(rmbkg,sub_sky_frame,sky_tag,instrument,decode_bp);
649 if( loc_obj_par->method != LOC_MANUAL_METHOD){
650 xsh_msg(
"Localize auto");
651 sprintf(rec_name,
"%s_%s_%s.fits",
652 rec_prefix,XSH_ORDER2D,
653 xsh_instrument_arm_tostring(instrument));
657 check( rect_frame = xsh_rectify( sub_sky_frame, order_tab_edges,
658 wave_tab, model_config_frame,
659 instrument, rectify_par,
660 spectralformat_frame, disp_tab_frame,
661 rec_name, NULL, NULL,rec_prefix));
664 check( loc_table_frame = xsh_localize_obj( rect_frame, instrument,
665 loc_obj_par, NULL, NULL));
669 crh_single_par, wavemap_frame,
instrument, rec_prefix));
674 char * obj_nocrh_tag = NULL ;
675 char * obj_nocrh_name = NULL ;
682 ".fits",(
void*)NULL) ;
686 strcpy(sky_name,cpl_frame_get_filename(sky_frame_ima));
687 check(sky_image=cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0));
688 check(cpl_image_add(pre_sci->data,sky_image));
700 check( clean_obj=cpl_frame_duplicate(rmbkg));
static xsh_instrument * instrument
cpl_error_code xsh_badpixelmap_coadd(cpl_frame *self, const cpl_frame *right, const int mode)
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_frame * xsh_divide_flat(cpl_frame *frame, cpl_frame *flat, const char *tag, xsh_instrument *instr)
divide PRE frame with the master FLAT frame
cpl_frame * xsh_bpmap_2pre(cpl_frame *bpmap, const char *prefix, xsh_instrument *inst)
This function transform a BP map from raw to pre format.
#define XSH_ASSURE_NOT_NULL_MSG(pointer, msg)
#define XSH_ASSURE_NOT_ILLEGAL(cond)
#define check_msg(COMMAND,...)
#define XSH_ASSURE_NOT_NULL(pointer)
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.
#define xsh_msg(...)
Print a message on info level.
void xsh_pfits_set_pcatg(cpl_propertylist *plist, const char *value)
Write the PCATG value.
int xsh_pfits_get_binx(const cpl_propertylist *plist)
find out the BINX value
int xsh_pfits_get_naxis1(const cpl_propertylist *plist)
find out the NAXIS1 value
cpl_frame * xsh_remove_crh_multiple(cpl_frameset *rawFrames, const char *name, xsh_stack_param *stack_param, xsh_clipping_param *crh_clipping, xsh_instrument *inst, cpl_imagelist **, cpl_image **, const int save_tmp)
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.
cpl_frame * xsh_save_sky_model(cpl_frame *obj_frame, cpl_frame *sub_sky_frame, const char *sky_tag, xsh_instrument *instrument)
cpl_frame * xsh_subtract_sky_single(cpl_frame *sci_frame, cpl_frame *order_table_frame, cpl_frame *slitmap_frame, cpl_frame *wavemap_frame, cpl_frame *locTable_frame, cpl_frame *ref_sky_list, cpl_frame *sky_orders_chunks, cpl_frame *usr_defined_break_points_frame, xsh_instrument *instrument, int nbkpts, xsh_subtract_sky_single_param *sky_par, cpl_frame **sky_spectrum, cpl_frame **sky_spectrum_eso, const char *rec_prefix, const int clean_tmp)
Subtract the sky background for single frame. If sky_spectrum is NOT NULL it is saved as a product,...
cpl_frame * xsh_subtract_bias(cpl_frame *frame, cpl_frame *bias, xsh_instrument *instr, const char *type, const int pre_overscan_corr, const int save_tmp)
Subtract the master bias frame from PRE frame.
cpl_frame * xsh_subtract_dark(cpl_frame *frame, cpl_frame *dark, const char *filename, xsh_instrument *instr)
subtract the master dark frame from PRE frame
void xsh_free_image(cpl_image **i)
Deallocate an image 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_stringcat_any(const char *s,...)
Concatenate an arbitrary number of strings.
void xsh_free_propertylist(cpl_propertylist **p)
Deallocate a property list and set the pointer to NULL.
void xsh_add_temporary_file(const char *name)
Add temporary file to temprary files list.
void xsh_create_map(cpl_frame *dispsol_frame, cpl_frame *ordertab_frame, cpl_frame *pre_frame, xsh_instrument *instrument, cpl_frame **wavemap_frame, cpl_frame **slitmap_frame, const char *rec_prefix)
void xsh_create_model_map(cpl_frame *model_frame, xsh_instrument *instrument, const char *wtag, const char *stag, cpl_frame **wavemap_frame, cpl_frame **slitmap_frame, const int save_tmp)
cpl_frame * xsh_find_wavemap(cpl_frameset *frames, xsh_instrument *instr)
Find Wave Map frame. The frame returned should not be free by the caller.
cpl_frame * xsh_find_slitmap(cpl_frameset *frames, xsh_instrument *instr)
Find a slit map.
cpl_frame * xsh_find_frame_with_tag(cpl_frameset *frames, const char *tag, xsh_instrument *instr)
Find frame with a given tag.
#define XSH_SLIT_MAP_MODEL
#define XSH_WAVE_MAP_MODEL
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.
void xsh_check_afc(int check_flag, cpl_frame *model_frame, cpl_frame *sci_frame, cpl_frameset *wave_frameset, cpl_frame *order_tab_frame, cpl_frame *disp_tab_frame, xsh_instrument *instrument)
Check AFC frame.
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_frame * xsh_check_load_master_bpmap(cpl_frameset *calib, xsh_instrument *inst, const char *rec_id)
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.
cpl_frame * xsh_check_remove_crh_single(int nb_raws_frame, cpl_frame *subsky_frame, xsh_remove_crh_single_param *crh_single_par, xsh_instrument *instrument, const char *prefix)
Check function.
cpl_error_code xsh_model_temperature_update_frame(cpl_frame **model_config_frame, cpl_frame *ref_frame, xsh_instrument *instrument, int *found_temp)
#define XSH_FREE(POINTER)
cpl_error_code xsh_frame_check_model_cfg_is_proper_for_sci(cpl_frame *model_config_frame, cpl_frame *sci_frame, xsh_instrument *instrument)
Check if a model configuration frame has been corrected for flexures.
cpl_error_code xsh_frame_check_model_cfg_is_afc_corrected(cpl_frame *model_config_frame)
utility to check if a frame has been corrected for flexures