122 int* sub_sky_nbkpts1,
123 int* sub_sky_nbkpts2)
126 cpl_frame* frame=NULL;
127 const char* name=NULL;
128 cpl_propertylist *plist=NULL;
132 check(frame=cpl_frameset_get_frame(raws,0));
133 check(name=cpl_frame_get_filename(frame));
134 check(plist=cpl_propertylist_load(name,0));
149 *sub_sky_nbkpts1*=0.75*
biny;
150 *sub_sky_nbkpts2*=0.75*
biny;
223 return cpl_error_get_code();
231 cpl_frameset *result = NULL;
232 cpl_frameset *rmcrh_set = NULL;
233 const cpl_frame *frame = NULL;
234 cpl_propertylist *header = NULL;
236 const char* nod_name = NULL;
242 int A_number=1, B_number =1;
247 cpl_frame *crhm_frame = NULL;
248 cpl_frameset_iterator* it = NULL;
253 check( result=cpl_frameset_new());
255 it = cpl_frameset_iterator_new(ord_set);
256 frame = cpl_frameset_iterator_get(it);
258 check( nod_name = cpl_frame_get_filename( frame));
259 check( header = cpl_propertylist_load( nod_name, 0));
274 while( frame != NULL){
277 double nrel_ra, nrel_dec;
278 const char *type= NULL;
280 check( nod_name = cpl_frame_get_filename( frame));
281 check( header = cpl_propertylist_load( nod_name, 0));
287 if ( cum_ra == A_cum_ra && cum_dec == A_cum_dec){
289 nod_number = A_number;
293 nod_number = B_number;
296 xsh_msg(
"name %s cumoffset %f %f reloffset %f %f nod_seq_number : %s%d", nod_name,
297 cum_ra, cum_dec, rel_ra, rel_dec, type, nod_number);
301 check( rmcrh_set = cpl_frameset_new());
302 cpl_frameset_insert( rmcrh_set, cpl_frame_duplicate( frame));
304 cpl_frameset_iterator_advance(it, 1);
305 frame = cpl_frameset_iterator_get_const(it);
308 while( frame != NULL){
309 check( nod_name = cpl_frame_get_filename( frame));
310 check( header = cpl_propertylist_load( nod_name, 0));
315 if ( rel_ra == nrel_ra && nrel_dec == rel_dec){
316 cpl_frameset_insert( rmcrh_set, cpl_frame_duplicate( frame));
322 cpl_frameset_iterator_advance(it, 1);
323 frame = cpl_frameset_iterator_get_const(it);
328 sprintf( ftag,
"med_%s%d", type, nod_number);
329 sprintf(name,
"%s.fits",ftag);
332 check( cpl_frameset_insert( result, crhm_frame));
335 if ( cum_ra == A_cum_ra && cum_dec == A_cum_dec){
345 cpl_frameset_iterator_delete(it);
346 if ( cpl_error_get_code() != CPL_ERROR_NONE){
359 cpl_frameset *result = NULL;
360 cpl_frameset *tmp_set = NULL;
361 cpl_frame *frame = NULL;
362 cpl_propertylist *header = NULL;
364 const char* nod_name = NULL;
370 int A_number=1, B_number =1;
374 cpl_vector* vec_ra=NULL;
375 cpl_vector* vec_dec=NULL;
376 cpl_frame *crhm_frame = NULL;
377 double* pvec_ra=NULL;
378 double* pvec_dec=NULL;
390 const char *type= NULL;
392 nraw=cpl_frameset_get_size(ord_set);
395 check( result=cpl_frameset_new());
397 check( frame = cpl_frameset_get_frame( ord_set,0));
399 check( nod_name = cpl_frame_get_filename( frame));
400 check( header = cpl_propertylist_load( nod_name, 0));
408 vec_ra=cpl_vector_new(nraw);
409 vec_dec=cpl_vector_new(nraw);
410 pvec_ra=cpl_vector_get_data(vec_ra);
411 pvec_dec=cpl_vector_get_data(vec_dec);
417 for(i=1;i<nraw;i++) {
418 check( frame = cpl_frameset_get_frame( ord_set,i));
419 check( header = cpl_propertylist_load( nod_name, 0));
424 for(j=0;j<nnod;j++) {
425 if( fabs(pvec_ra[j] - frm_ra) < tol_ra &&
426 fabs(pvec_dec[j] - frm_dec) < tol_dec )
432 pvec_ra[nnod]=frm_ra;
433 pvec_dec[nnod]=frm_dec;
438 cpl_vector_set_size(vec_ra, nnod);
439 cpl_vector_set_size(vec_dec, nnod);
440 cpl_vector_dump(vec_ra,stdout);
441 cpl_vector_dump(vec_dec,stdout);
443 while( frame != NULL){
448 check( nod_name = cpl_frame_get_filename( frame));
449 check( header = cpl_propertylist_load( nod_name, 0));
455 if ( cum_ra == A_cum_ra && cum_dec == A_cum_dec){
457 nod_number = A_number;
461 nod_number = B_number;
467 while( frame != NULL){
470 double nrel_ra, nrel_dec;
472 check( nod_name = cpl_frame_get_filename( frame));
473 check( header = cpl_propertylist_load( nod_name, 0));
479 if ( cum_ra == A_cum_ra && cum_dec == A_cum_dec){
481 nod_number = A_number;
485 nod_number = B_number;
488 xsh_msg(
"name %s cumoffset %f %f reloffset %f %f nod_seq_number : %s%d", nod_name,
489 cum_ra, cum_dec, rel_ra, rel_dec, type, nod_number);
493 check( tmp_set = cpl_frameset_new());
494 cpl_frameset_insert( tmp_set, cpl_frame_duplicate( frame));
496 frame = cpl_frameset_get_next( ord_set);
498 while( frame != NULL){
499 check( nod_name = cpl_frame_get_filename( frame));
500 check( header = cpl_propertylist_load( nod_name, 0));
505 if ( rel_ra == nrel_ra && nrel_dec == rel_dec){
506 cpl_frameset_insert( tmp_set, cpl_frame_duplicate( frame));
511 check( frame = cpl_frameset_get_next( ord_set));
515 sprintf( ftag,
"med_%s%d", type, nod_number);
516 sprintf(name,
"%s.fits",ftag);
519 check( cpl_frameset_insert( result, crhm_frame));
522 if ( cum_ra == A_cum_ra && cum_dec == A_cum_dec){
532 if ( cpl_error_get_code() != CPL_ERROR_NONE){
544 cpl_frame *result = NULL;
546 if ( do_flat == CPL_TRUE){
548 xsh_msg(
"sci name: %s flat name: %s",cpl_frame_get_filename(src),cpl_frame_get_filename(mflat));
552 xsh_msg(
"divide ok1 %s",cpl_frame_get_filename(src));
554 char fname[FILENAME_MAX];
555 sprintf(fname,
"tmp_%s",cpl_frame_get_filename(src));
556 result =
xsh_pre_save(xframe,fname,cpl_frame_get_tag(src),1);
557 cpl_frame_set_filename(result,fname);
665 cpl_frame* frame_o=NULL;
668 const char* fname_i=NULL;
670 cpl_image* image=NULL;
685 next = cpl_frame_get_nextensions(frame_i);
686 fname_i=cpl_frame_get_filename(frame_i);
690 for(k=0; k<next;k++) {
697 image=cpl_image_wrap_float(sx,sy,pdata);
700 median=cpl_image_get_median_window(image,i,1,i,sy);
702 pdata[j*sx+i-1]-=median;
705 cpl_image_unwrap(image);
709 tag_o=cpl_frame_get_tag(frame_i);
710 sprintf(fname_o,
"MED_COR_%s",fname_i);
712 cpl_frame_set_filename(frame_o,fname_o);
723 const char* qual_name,
724 const char* rec_prefix,
726 cpl_frame* order_tab_edges,
728 cpl_frame* model_config_frame,
729 cpl_frame* spectral_format,
730 cpl_frame* disp_tab_frame,
736 cpl_frame **shift2_frame,
737 cpl_frame **shift1_frame)
743 cpl_frame * rec2_frame = NULL ;
744 cpl_frame * rec2eso_frame = NULL ;
745 cpl_frame * rec2tab_frame = NULL ;
746 cpl_frame *shift2eso_frame = NULL;
747 cpl_frame * rec1_frame = NULL ;
748 cpl_frame *shift1eso_frame = NULL;
749 cpl_frame * rec2_frame_median_correct=NULL;
752 sprintf(file_name,
"REC2_%s_%s",qual_name,nod_name);
755 rectify_par,spectral_format,disp_tab_frame,
756 file_name,&rec2eso_frame,&rec2tab_frame,
760 sprintf(file_name,
"SHIFT2_%s_%s",qual_name,nod_name);
767 file_name, &shift2eso_frame,
770 sprintf(file_name,
"REC1_FAST_%s_%s",qual_name,nod_name);
777 file_name, &shift2eso_frame,
780 sprintf(file_name,
"REC1_FAST_%s_%s",qual_name,nod_name);
788 sprintf(file_name,
"SHIFT1_FAST_%s_%s",qual_name,nod_name);
790 rectify_par, file_name,
791 &shift1eso_frame, ref_ra,
803 return cpl_error_get_code();
808 cpl_frameset *nod_set,
809 cpl_frame* spectral_format,
810 cpl_frame* master_flat,
811 cpl_frame* order_tab_edges,
813 cpl_frame* model_config_frame,
814 cpl_frame* disp_tab_frame,
819 const int do_flatfield,
821 const int compute_eff,
822 const char* rec_prefix,
823 cpl_frameset **comb_eff_set)
829 cpl_frame * div2_frame = NULL ;
830 cpl_frame * eff2_frame = NULL ;
831 cpl_frame *shift1_frame = NULL;
832 cpl_frame *shift2_frame = NULL;
833 cpl_frame *shift1_eff_frame = NULL;
834 cpl_frame *shift2_eff_frame = NULL;
836 double* ref_dec=NULL;
837 double* ref_eff_ra=NULL;
838 double* ref_eff_dec=NULL;
839 cpl_frameset* comb_set=NULL;
846 check( comb_set = cpl_frameset_new());
849 check( *comb_eff_set = cpl_frameset_new());
853 check( nb_pairs = cpl_frameset_get_size( nod_set));
855 for( i = 0; i< nb_pairs; i++){
856 cpl_frame *nod_frame = NULL;
857 const char* nod_name = NULL;
861 nod_frame = cpl_frameset_get_frame( nod_set, i);
862 nod_name = cpl_frame_get_filename( nod_frame);
874 sprintf(name,
"%s.fits",tag);
881 div2_frame,order_tab_edges,
882 wave_tab,model_config_frame,
886 rectify_par,&ref_ra,&ref_dec,
887 &shift1_frame,&shift2_frame));
889 cpl_frameset_insert( comb_set, shift2_frame);
890 cpl_frameset_insert( comb_set, shift1_frame);
893 if(disp_tab_frame != NULL) {
897 xsh_msg(
"before %s",cpl_frame_get_filename(nod_frame));
900 xsh_msg(
"after %s",cpl_frame_get_filename(eff2_frame));
903 eff2_frame,order_tab_edges,
904 wave_tab,model_config_frame,
909 &ref_eff_ra,&ref_eff_dec,
914 cpl_frameset_insert( *comb_eff_set, shift2_eff_frame);
915 cpl_frameset_insert( *comb_eff_set, shift1_eff_frame);
941 cpl_frameset *nod_set,
942 cpl_frame* spectral_format,
943 cpl_frame* master_flat,
944 cpl_frame* order_tab_edges,
946 cpl_frame* model_config_frame,
947 cpl_frame* disp_tab_frame,
949 cpl_frame *skymask_frame,
954 const char *throw_name,
955 const int do_flatfield,
956 const char* rec_prefix
960 cpl_frame * a_b = NULL;
967 double *throw_shift = NULL;
968 double *throw_tab = NULL;
969 FILE* throw_file = NULL;
971 cpl_frame * loc_a_b = NULL, * loc_b_a = NULL ;
972 cpl_frame * loc_a_b_0 = NULL;
974 cpl_frameset *comb_set = NULL;
979 check( comb_set = cpl_frameset_new());
981 check( nb_nod = cpl_frameset_get_size( nod_set));
983 file_exist=access(throw_name, F_OK);
984 if (file_exist != 0) {
985 xsh_msg_error(
"The Name %s of ASCII file containing the list of throw shifts with respect to the first exposure was not found. Exit.",throw_name);
986 cpl_error_set(cpl_func, CPL_ERROR_FILE_NOT_FOUND);
990 if ( strcmp( throw_name,
"") != 0 && file_exist ==0 ){
991 char throw_line[200];
994 xsh_msg(
"Load Throw shifts from file %s", throw_name);
995 throw_file = fopen( throw_name,
"r");
1001 while (fgets( throw_line, 200, throw_file) != NULL){
1006 sscanf( throw_line,
"%199s",shiftval);
1007 if (iline < nb_nod){
1008 throw_tab[iline] = atof( shiftval);
1012 if (iline != nb_nod){
1013 xsh_error_msg(
"Invalid number of lines in ASCII file %s : %d - expected number : %d",
1014 throw_name, iline, nb_nod);
1016 fclose( throw_file);
1021 for( i = 0; i<nb_nod ; i++) {
1023 cpl_frame * divided = NULL ;
1024 cpl_frame * shifted_a_b = NULL;
1025 cpl_frame * shifted_a_b_eso = NULL;
1026 cpl_frame * shifted_a_b_tab = NULL;
1027 cpl_frame *inv_shifted_a_b = NULL;
1028 cpl_frame *loc_rec = NULL;
1029 cpl_frame *loc_rec_eso = NULL;
1030 cpl_frame *loc_rec_tab = NULL;
1031 cpl_frame *inv_loc_rec = NULL;
1035 if (throw_tab != NULL){
1036 throw_shift = &throw_tab[i];
1047 check( a_b = cpl_frameset_get_frame( nod_set, i));
1058 sprintf(file_tag,
"SLIT_NOD_NOCRH_FF_%s", str);
1062 if ( i > 1 && throw_shift == NULL){
1064 xsh_msg(
"TEST %d : on fait loc_ab et loc_ba", i);
1065 sprintf(file_name,
"LOC_REC_%s.fits", str);
1068 rectify_par, spectral_format, disp_tab_frame,
1069 file_name, &loc_rec_eso, &loc_rec_tab, rec_prefix));
1070 xsh_msg(
"Localize the object (A%d)", i/2);
1071 sprintf( file_name,
"LOCALIZE_%s.fits", str);
1077 sprintf(file_name,
"DRL_INV_LOC_REC_%s", str);
1081 xsh_msg(
"Localize the object (B%d)", i/2);
1082 sprintf(file_name,
"INV_LOCALIZE_%s.fits", str);
1087 xsh_msg(
"TEST %d : loc_ab = loc_ba", i);
1092 xsh_msg(
"Rectify and shift");
1093 sprintf(file_name,
"SHIFT_REC_NOCRH_%s.fits", str);
1110 if ( i==0 && throw_shift == NULL){
1111 xsh_msg(
"Localize the object (A0)");
1112 sprintf(file_name,
"LOCALIZE_%s.fits", str);
1118 sprintf(file_name,
"DRL_INV_LOC_REC_%s", str);
1121 xsh_msg(
"Localize the object (B0)");
1122 sprintf(file_name,
"INV_LOCALIZE_%s.fits", str);
1126 check( cpl_frameset_insert( comb_set, shifted_a_b));
1140 if (throw_file != NULL) fclose(throw_file);
1141 if ( cpl_error_get_code() != CPL_ERROR_NONE || file_exist!=0){
1154 cpl_frame* order_tab_edges,cpl_frame* master_flat,
1155 cpl_frame* model_config_frame,cpl_frame* disp_tab,
1157 const char* rec_prefix, cpl_frame** wavemap,
1158 cpl_frame** slitmap)
1162 cpl_frame* ref_frame=NULL;
1163 int recipe_use_model=FALSE;
1165 ref_frame=cpl_frameset_get_frame(raws,0);
1168 ref_frame = master_flat;
1171 ref_frame, model_config_frame, calib,
instrument,
1172 do_computemap, recipe_use_model, rec_prefix,
1175return cpl_error_get_code();
1181 const char* recipe_id,
int pscan,cpl_frame** spectral_format,
1182 cpl_frame** master_bias,
1183 cpl_frame** bpmap,cpl_frame** order_tab_edges,cpl_frame** master_flat)
1208 return cpl_error_get_code();
1213 const int do_computemap,
1214 cpl_frame** model_config_frame, cpl_frame** wave_tab,
1215 cpl_frame** wavemap)
1217 int recipe_use_model=FALSE;
1218 cpl_boolean mode_phys;
1223 recipe_use_model = TRUE;
1237 xsh_msg(
"RECIPE USE REFERENCE MODEL");
1240 xsh_msg(
"RECIPE USE OPTIMISED 2D MODEL");
1243 xsh_msg(
"RECIPE USE OPTIMISED AFC MODEL");
1246 xsh_msg(
"RECIPE USE WAVE SOLUTION");
1248 recipe_use_model = FALSE;
1253 if(do_computemap && recipe_use_model==FALSE) {
1257 return cpl_error_get_code();
1260static cpl_error_code
1262 const int use_sky_mask, cpl_frame** disp_tab_frame,
1263 cpl_frame** response_ord_frame, cpl_frame** frm_atmext,
1264 cpl_frame** skymask_frame) {
1268 xsh_msg(
"To compute efficiency, you must provide a DISP_TAB_ARM input");
1271 if ( use_sky_mask == TRUE){
1280 if(*response_ord_frame != NULL) {
1282 if(*frm_atmext==NULL) {
1288 return cpl_error_get_code();
1294 cpl_frame** frm_atmext)
1304 if(*response_ord_frame != NULL) {
1306 if(*frm_atmext==NULL) {
1311 return cpl_error_get_code();
1316 cpl_frameset* calib,
1319 cpl_frame** master_bias,
1320 cpl_frame** master_flat,
1321 cpl_frame** order_tab_edges,
1322 cpl_frame** wave_tab,
1323 cpl_frame** model_config_frame,
1324 cpl_frame** wavemap,
1325 cpl_frame** slitmap,
1326 cpl_frame** disp_tab_frame,
1327 cpl_frame** spectral_format,
1328 cpl_frame** skymask_frame,
1329 cpl_frame** response_ord_frame,
1330 cpl_frame** frm_atmext,
1334 const char* rec_prefix,
1335 const char* recipe_id)
1340 master_bias, bpmap, order_tab_edges, master_flat);
1341 int recipe_use_model=FALSE;
1342 cpl_frame* ref_frame=NULL;
1343 cpl_boolean mode_phys;
1349 recipe_use_model = TRUE;
1363 xsh_msg(
"RECIPE USE REFERENCE MODEL");
1366 xsh_msg(
"RECIPE USE OPTIMISED 2D MODEL");
1369 xsh_msg(
"RECIPE USE OPTIMISED AFC MODEL");
1372 xsh_msg(
"RECIPE USE WAVE SOLUTION");
1374 recipe_use_model = FALSE;
1380 if(do_computemap && recipe_use_model==FALSE) {
1385 xsh_msg(
"To compute efficiency, you must provide a DISP_TAB_ARM input");
1388 if ( recipe_use_model){
1389 ref_frame=cpl_frameset_get_frame(raws,0);
1392 ref_frame = *master_flat;
1395 ref_frame, *model_config_frame, calib,
instrument,
1396 do_computemap, recipe_use_model, rec_prefix,
1400 if ( use_skymask == TRUE){
1410 return cpl_error_get_code();
1419 cpl_frame** master_bias,
1420 cpl_frame** master_flat,
1421 cpl_frame** order_tab_edges,
1422 cpl_frame** wave_tab,
1423 cpl_frame** model_config_frame,
1424 cpl_frame** wavemap,
1425 cpl_frame** slitmap,
1426 cpl_frame** disp_tab_frame,
1427 cpl_frame** spectral_format,
1428 cpl_frame** skymask_frame,
1429 cpl_frame** response_ord_frame,
1430 cpl_frame** frm_atmext,
1434 const char* rec_prefix,
1435 const char* recipe_id)
1440 master_bias, bpmap, order_tab_edges, master_flat);
1443 model_config_frame, wave_tab, wavemap);
1446 response_ord_frame, frm_atmext, skymask_frame);
1448 return cpl_error_get_code();
1457static cpl_error_code
1464 xsh_msg_dbg_low(
"rectify params: radius=%g bin_lambda=%g bin_space=%g",
1471 return cpl_error_get_code();
1487 int* rectify_fast,
int* pscan,
1488 int* generate_sdp_format,
1502 cpl_msg_info(__func__,
" Fetched crh_single params %f, %f, %f, %d",
1503 (*crh_single_par)->crh_frac_max,
1504 (*crh_single_par)->sigma_lim, (*crh_single_par)->f_lim,
1505 (*crh_single_par)->nb_iter);
1519 "generate-SDP-format"));
1523 return cpl_error_get_code();
1530 cpl_frame* response,
1533 const char* rec_prefix,
1534 cpl_frame** fcal_rect_1D,
1535 cpl_frame** fcal_1D)
1539 char file_name[256];
1541 cpl_frame* nrm_1D=NULL;
1542 const char* tag=NULL;
1545 tag=cpl_frame_get_tag(rect1D);
1553 xsh_msg(
"file_tag1=%s",file_tag);
1554 sprintf(file_name,
"%s.fits",file_tag);
1563 sprintf(file_name,
"%s.fits",file_tag);
1568 xsh_msg(
"file_tag2=%s",file_tag);
1573 return cpl_error_get_code();
1582 cpl_frame* response,
1585 const char* rec_prefix,
1586 cpl_frame** fcal_rect_2D,
1587 cpl_frame** fcal_2D)
1592 char file_name[256];
1594 cpl_frame* nrm_2D=NULL;
1599 sprintf(file_name,
"%s.fits",file_tag);
1610 return cpl_error_get_code();
1619 cpl_frame* response,
1622 const char* rec_prefix,
1623 cpl_frame** fcal_rect_2D,
1624 cpl_frame** fcal_rect_1D,
1625 cpl_frame** fcal_2D,
1626 cpl_frame** fcal_1D)
1631 fcal_rect_2D,fcal_2D));
1633 fcal_rect_1D,fcal_1D));
1638 return cpl_error_get_code();
1645 cpl_frame** spectral_format,
1649 cpl_frame** otab_edges,
1650 cpl_frame** model_cfg,
1654 cpl_frame** ifu_cfg_tab,
1655 cpl_frame** ifu_cfg_cor,
1656 cpl_frame** wavesol,
1658 int * recipe_use_model,
1677 return CPL_ERROR_DATA_NOT_FOUND;
1689 if( *model_cfg == NULL) {
1697 if ( *model_cfg == NULL){
1698 xsh_msg(
"RECIPE USE WAVE SOLUTION");
1699 *recipe_use_model = FALSE;
1703 *recipe_use_model = TRUE;
1706 if( ( *model_cfg !=NULL) && (*wavesol != NULL) ) {
1708 xsh_msg_error(
"You cannot provide both a %s and a %s frame. Decide if you are in poly or physical model mode. We exit",
1713 if(( *model_cfg == NULL) && ( *wavesol == NULL) ) {
1725 if( *mflat == NULL) {
1730 if( *otab_edges == NULL) {
1742 return cpl_error_get_code();
1748 cpl_frame** sky_list, cpl_frame** model_cfg, cpl_frame** qc_sky,
1749 cpl_frame** sframe_sky_sub_tab, cpl_frame** sky_orders_chunks)
1753 if ( *model_cfg != NULL){
1755 if ( *sky_list != NULL){
1758 *sky_list,1,1,9,1));
1767 xsh_msg_warning(
"Data reduction with user defined break points number from file %s",
1768 cpl_frame_get_filename(*sframe_sky_sub_tab));
1774 return cpl_error_get_code();
1781 cpl_frame** spectralformat,
1785 cpl_frame** otab_edges,
1786 cpl_frame** model_cfg,
1787 cpl_frame** wave_tab,
1788 cpl_frame** sky_list,
1789 cpl_frame** sky_orders_chunks,
1792 cpl_frame** sframe_sky_sub_tab,
1796 int * recipe_use_model,
1801 cpl_boolean mode_phys;
1815 return CPL_ERROR_DATA_NOT_FOUND;
1826 cpl_error_set(cpl_func, CPL_ERROR_FILE_NOT_FOUND);
1845 xsh_msg(
"RECIPE USE REFERENCE MODEL");
1848 xsh_msg(
"RECIPE USE OPTIMIZED 2D MODEL");
1851 xsh_msg(
"RECIPE USE OPTIMIZED AFC MODEL");
1853 *recipe_use_model = TRUE;
1855 xsh_msg(
"RECIPE USE WAVE SOLUTION");
1857 *recipe_use_model = FALSE;
1861 if ( *model_cfg != NULL){
1863 if ( *sky_list != NULL){
1866 *sky_list,1,1,9,1));
1876 xsh_msg_warning(
"Data reduction with user defined break points number from file %s",
1877 cpl_frame_get_filename(*sframe_sky_sub_tab));
1886 return cpl_error_get_code();
1892 cpl_frame** spectralformat,
1896 cpl_frame** otab_edges,
1897 cpl_frame** model_cfg,
1898 cpl_frame** wave_tab,
1899 cpl_frame** sky_list,
1900 cpl_frame** sky_orders_chunks,
1903 cpl_frame** sframe_sky_sub_tab,
1907 int * recipe_use_model,
1913 bpmap, otab_edges, mflat);
1924 int do_computemap=1;
1932 sframe_sky_sub_tab, sky_orders_chunks);
1936 return cpl_error_get_code();
1941 cpl_frame** bpmap,cpl_frame** mbias,
1942 cpl_frame** mdark, cpl_frame** otab_edges,
1943 cpl_frame** model_cfg, cpl_frame** wave_tab,
1944 cpl_frame** mflat, cpl_frame** wmap, cpl_frame** smap,
1945 cpl_frame** spectral_format,
const char* rec_id)
1950 mbias, bpmap, otab_edges, mflat);
1958 int do_computemap=1;
1967 return cpl_error_get_code();
1974 int* pre_overscan_corr,
1979 int* sub_sky_nbkpts1,
1981 int* sub_sky_nbkpts2,
1985 int* generate_sdp_format)
1989 "pre-overscan-corr"));
1998 rec_id,parameters));
2001 rec_id,parameters));
2010 "generate-SDP-format"));
2014 return cpl_error_get_code();
2028 int* generate_sdp_format)
2035 if ( (*rectify_par)->rectify_full_slit == 1 ){
2040 xsh_msg(
"Use Max Possible Slit" ) ;
2057 "generate-SDP-format"));
2061 return cpl_error_get_code();
2103 const char* rec_prefix,
2105 cpl_frame* order_tab_edges,
2109 cpl_frame* model_config,
2110 cpl_frame* single_frame_sky_sub_tab,
2112 int sub_sky_nbkpts1,
2114 cpl_frame* ref_sky_list,
2115 cpl_frame* sky_orders_chunks,
2117 cpl_frame** sky_eso,
2118 cpl_frame** sky_ima,
2119 cpl_frame* wave_tab,
2120 cpl_frame* disp_tab,
2121 cpl_frame* spectral_format,
2123 cpl_frame** loc_table,
2125 cpl_frame** clean_obj,
const int clean_tmp)
2131 cpl_frame * sub_sky = NULL ;
2132 cpl_frame * rect = NULL ;
2137 xsh_msg(
"Preliminary sky subtraction for CRH single or automatic localization");
2138 xsh_msg(
"Sky will be put back later");
2140 sprintf(sky_tag,
"%s_TMPSKY",rec_prefix);
2141 sprintf(sky_name,
"%s.fits",sky_tag);
2149 order_tab_edges, slitmap, wavemap, NULL,
2150 single_frame_sky_sub_tab,
instrument, sub_sky_nbkpts1,
2151 sky_par,ref_sky_list, sky_orders_chunks,sky, sky_eso, sky_ima, sky_tag,clean_tmp));
2159 sub_sky = cpl_frame_duplicate(rmbkg);
2165 sprintf(rec_name,
"%s_%s_%s.fits",
2170 wave_tab, model_config,
2172 spectral_format, disp_tab,
2173 rec_name, NULL, NULL,rec_prefix));
2176 loc_obj_par, NULL, NULL));
2188 *clean = cpl_frame_duplicate(sub_sky);
2197 *clean_obj=cpl_frame_duplicate(*clean);
2207 check( *clean_obj=cpl_frame_duplicate(rmbkg));
2217 return cpl_error_get_code();
2224 int do_compute_map,
int recipe_use_model,
2226 cpl_frame* model_config_frame,cpl_frame* crhm_frame,
2227 cpl_frame* disp_tab_frame, cpl_frame* order_tab_edges,
2228 cpl_frame** wavemap_frame, cpl_frame** slitmap_frame)
2230 char wave_map_tag[256];
2231 char slit_map_tag[256];
2233 if ( do_compute_map){
2234 if (recipe_use_model){
2244 wave_map_tag,slit_map_tag,
2245 wavemap_frame, slitmap_frame,0));
2248 xsh_msg(
"Compute the wave map and the slit map");
2251 wavemap_frame, slitmap_frame,
2256 xsh_msg(
"Get the wave map and the slit map from sof" ) ;
2262 return cpl_error_get_code();
2268 cpl_frame* response,cpl_frame* atmext,
2271 cpl_frame** fluxcal_2D,
2272 cpl_frame** fluxcal_1D)
2275 cpl_frame* nrm_1D=NULL;
2276 cpl_frame* nrm_2D=NULL;
2291 return cpl_error_get_code();
2297 cpl_frame* atm_ext, cpl_frame* high_abs_win,
2301 cpl_frame* eff=NULL;
2304 xsh_msg_error(
"An error occurred during efficiency computation");
2305 xsh_msg_error(
"The recipe recovers without efficiency product generation");
2315static cpl_error_code
2319 const char* name = NULL;
2320 cpl_table* tab = NULL;
2327 cpl_table* ext = NULL;
2331 name = cpl_frame_get_filename(order_tab_edges);
2332 tab = cpl_table_load(name, 2, 0);
2334 ord_min = cpl_table_get_column_min(tab,
"ORDER");
2335 ord_max = cpl_table_get_column_max(tab,
"ORDER");
2336 ord_avg = 0.5 * (ord_min + ord_max);
2338 next = cpl_table_and_selected_int(tab,
"ORDER", CPL_EQUAL_TO, ord_avg);
2339 ext = cpl_table_extract_selected(tab);
2342 *xcen = (int) cpl_table_get_double(ext,
"CENTER_X", next / 2, &status);
2345 *ycen = (int) cpl_table_get_double(ext,
"CENTER_Y", next / 2, &status);
2351 return cpl_error_get_code();
2355 const int xcen,
const int ycen,
const int direction,
double* dif) {
2363 const char* name = NULL;
2364 cpl_image* map_ima = NULL;
2370 name = cpl_frame_get_filename(frm_ima);
2371 map_ima = cpl_image_load(name, CPL_TYPE_DOUBLE, 0, 0);
2372 nx = cpl_image_get_size_x(map_ima);
2373 map = cpl_image_get_data_double(map_ima);
2387 fmin = map[
nx * ymin + xcen];
2388 fmax = map[
nx * ymax + xcen];
2393 fmin = map[
nx * ycen + xmin];
2394 fmax = map[
nx * ycen + xmax];
2397 *dif = fabs(0.5 * (fmax - fmin));
2401 return cpl_error_get_code();
2407 const double srms,
const double serr,
const double sys_err) {
2418 return cpl_error_get_code();
2422 const double wrms,
const double werr,
const double sys_err) {
2437 return cpl_error_get_code();
2475 cpl_frame* order_tab_edges,
2476 cpl_frame* model_config,
2480 cpl_propertylist* plist=NULL;
2481 const char* name=NULL;
2482 const char* tag=NULL;
2486 cpl_table* tab=NULL;
2487 cpl_table* ext=NULL;
2497 cpl_image* wmap_ima=NULL;
2498 cpl_image* smap_ima=NULL;
2499 cpl_frame* frm_tmp=NULL;
2501 cpl_image* ima=NULL;
2502 cpl_propertylist* phead=NULL;
2503 cpl_propertylist* xhead=NULL;
2504 cpl_image* xima=NULL;
2528 name=cpl_frame_get_filename(model_config);
2529 plist=cpl_propertylist_load(name,0);
2551 serr=srms/sqrt(nline);
2552 werr=wrms/sqrt(nline);
2553 name=cpl_frame_get_filename(science);
2554 tag=cpl_frame_get_tag(science);
2558 if(strstr(tag,
"MERGE2D")!=NULL) {
2562 cpl_propertylist_insert_after_int(
s->flux_header,
"DATE",
XSH_LAMNLIN,nline);
2571 }
else if(strstr(tag,
"ORDER2D")!=NULL) {
2579 const char *tname =
"tmp_ima.fits";
2582 nbext = cpl_frame_get_nextensions( science);
2583 check(phead = cpl_propertylist_load( name, 0 ));
2584 ima=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
2586 sprintf(cmd,
"mv %s %s",name,tname);
2590 cpl_propertylist_insert_after_int(phead,
"DATE",
XSH_LAMNLIN,nline);
2597 check(cpl_image_save(ima, name, CPL_BPP_IEEE_FLOAT,
2598 phead,CPL_IO_DEFAULT));
2599 for( i = 0 ; i<=nbext ; i++ ) {
2603 check(xima = cpl_image_load( tname, CPL_TYPE_FLOAT, 0,i ));
2604 check(xhead = cpl_propertylist_load( tname ,i));
2606 extension = CPL_IO_DEFAULT ;
2607 check(cpl_image_save(xima, name, CPL_BPP_IEEE_FLOAT,
2611 extension = CPL_IO_EXTEND ;
2612 check(cpl_image_save(xima, name, CPL_BPP_IEEE_FLOAT,xhead,extension));
2615 sprintf(cmd,
"rm tmp_ima.fits");
2635 return cpl_error_get_code();
2642 cpl_frame* order_tab_edges,
2643 cpl_frame* model_config,
2647 cpl_propertylist* plist=NULL;
2648 cpl_frame* frm_tmp=NULL;
2649 const char* name=NULL;
2650 const char* tag=NULL;
2653 cpl_table* tab=NULL;
2654 cpl_table* ext=NULL;
2663 cpl_image* wmap_ima=NULL;
2665 cpl_vector*
vec=NULL;
2669 cpl_propertylist* xhead=NULL;
2670 cpl_vector* xvec=NULL;
2671 cpl_table* xtab=NULL;
2672 cpl_propertylist* phead=NULL;
2686 name=cpl_frame_get_filename(model_config);
2687 plist=cpl_propertylist_load(name,0);
2691 rms_y = cpl_propertylist_get_double(plist,
2704 werr=wrms/sqrt(nline);
2705 name=cpl_frame_get_filename(science);
2706 tag=cpl_frame_get_tag(science);
2708 xsh_msg(
"process frame %s %s",name,tag);
2709 if(strstr(tag,
"MERGE1D")!=NULL) {
2712 cpl_propertylist_insert_after_int(
s->flux_header,
"DATE",
XSH_LAMNLIN,nline);
2719 }
else if( strstr(tag,
"ORDER1D")!=NULL ) {
2724 const char *tname =
"tmp_ima.fits";
2725 nbext = cpl_frame_get_nextensions( science);
2726 check(phead = cpl_propertylist_load( name, 0 ));
2728 vec=cpl_vector_load(name,0);
2730 sprintf(cmd,
"mv %s %s",name,tname);
2733 cpl_propertylist_insert_after_int(phead,
"DATE",
XSH_LAMNLIN,nline);
2737 check(cpl_vector_save(
vec, name, CPL_BPP_IEEE_FLOAT,
2738 phead,CPL_IO_DEFAULT));
2739 for( i = 0 ; i<=nbext ; i++ ) {
2743 check(xvec = cpl_vector_load( tname,i ));
2744 check(xhead = cpl_propertylist_load( tname ,i));
2746 extension = CPL_IO_DEFAULT ;
2747 check(cpl_vector_save(xvec, name, CPL_BPP_IEEE_FLOAT,
2751 extension = CPL_IO_EXTEND ;
2752 check(cpl_vector_save(xvec, name, CPL_BPP_IEEE_FLOAT,xhead,extension));
2755 sprintf(cmd,
"rm tmp_ima.fits");
2758 }
else if(strstr(tag,
"SKY_ORD1D")!=NULL) {
2764 const char *tname =
"tmp_tab.fits";
2765 nbext = cpl_frame_get_nextensions( science);
2766 check(phead = cpl_propertylist_load( name, 0 ));
2768 check(tab=cpl_table_load(name,1,0));
2770 sprintf(cmd,
"mv %s %s",name,tname);
2773 cpl_propertylist_insert_after_int(phead,
"DATE",
XSH_LAMNLIN,nline);
2777 check(cpl_table_save(tab, phead, NULL, name, CPL_IO_DEFAULT));
2778 for( i = 0 ; i<=nbext ; i++ ) {
2782 check(xtab = cpl_table_load( tname,1, i ));
2783 check(xhead = cpl_propertylist_load( tname ,i));
2785 extension = CPL_IO_DEFAULT ;
2786 check(cpl_table_save(xtab, phead, NULL, name, extension));
2789 extension = CPL_IO_EXTEND ;
2790 check(cpl_table_save(xtab, phead, NULL, name, extension));
2794 sprintf(cmd,
"rm tmp_tab.fits");
2798 xsh_msg(
"processed frame %s",tag);
2812 return cpl_error_get_code();
2835 cpl_frame* sky_map_frm,
2839 cpl_frameset* clean=NULL;
2840 cpl_frame* frm=NULL;
2846 cpl_frame * rm_crh = NULL ;
2847 cpl_image * sky_map_ima = NULL;
2848 cpl_mask * sky_map_msk = NULL;
2851 if( sky_map_frm != NULL ) {
2852 sky_map_ima = cpl_image_load(cpl_frame_get_filename(sky_map_frm),CPL_TYPE_FLOAT,0,0);
2853 sky_map_msk=cpl_mask_threshold_image_create(sky_map_ima,0.1,1.1);
2856 nraws=cpl_frameset_get_size(raws);
2857 check( clean = cpl_frameset_new() ) ;
2859 if ( crh_single_par->
nb_iter > 0 ) {
2860 xsh_msg(
"Detect crh (single frame) as removecrhsingle_niter %d > 0", crh_single_par->
nb_iter ) ;
2861 for ( i = 0 ; i < nraws ; i++ ) {
2863 frm = cpl_frameset_get_frame( raws, i ) ;
2864 sprintf(ftag,
"%s_%s_NO_CRH_%s_%d",prefix,spec,arm_str,i) ;
2865 sprintf(fname,
"%s.fits",ftag) ;
2869 cpl_frameset_insert( clean, rm_crh ) ;
2872 xsh_msg_warning(
"Skip Remove crh (single frame) on not sky corrected frame" ) ;
2873 cpl_frameset_delete(clean);
2874 clean=cpl_frameset_duplicate(raws);
2876 if( sky_map_frm != NULL ) {
2908 cpl_frame * divided = NULL;
2909 cpl_frame * frm = NULL;
2914 cpl_frameset* output = NULL;
2918 nraw = cpl_frameset_get_size(input);
2919 output = cpl_frameset_new();
2921 for (i = 0; i < nraw; i++) {
2922 frm = cpl_frameset_get_frame(input, i);
2924 sprintf(ftag,
"FF_%d_SLIT_OFFSET_%s", i,arm_str);
2925 sprintf(fname,
"%s.fits", ftag);
2934 cpl_frameset_insert(output, divided );
static 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.
xsh_rec_list * xsh_rec_list_load(cpl_frame *frame, xsh_instrument *instrument)
load an rec list from a frame
float * xsh_rec_list_get_data1(xsh_rec_list *list, int idx)
cpl_frame * xsh_rec_list_save(xsh_rec_list *list, const char *filename, const char *tag, int is_temp)
Save a rec list in a frame.
cpl_frame * xsh_rec_list_frame_invert(cpl_frame *rec_frame, const char *tag, xsh_instrument *instrument)
Invert the rectified flux images of the input frame into a new frame.
void xsh_rec_list_free(xsh_rec_list **list)
free memory associated to a rec_list
xsh_spectrum * xsh_spectrum_load(cpl_frame *s1d_frame)
Load a 1D spectrum structure.
cpl_frame * xsh_spectrum_save(xsh_spectrum *s, const char *filename, const char *tag)
save a spectrum
void xsh_spectrum_free(xsh_spectrum **s)
free memory associated to an 1D spectrum
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
#define XSH_ASSURE_NOT_NULL_MSG(pointer, msg)
#define XSH_ASSURE_NOT_ILLEGAL(cond)
#define xsh_error_reset()
#define xsh_error_msg(...)
#define XSH_ASSURE_NOT_NULL(pointer)
void xsh_instrument_update_from_spectralformat(xsh_instrument *i, cpl_frame *spectralformat_frame)
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.
cpl_frame * xsh_localize_obj(cpl_frame *sci_frame, cpl_frame *skymask_frame, xsh_instrument *instrument, xsh_localize_obj_param *loc_obj_par, xsh_slit_limit_param *slit_limit_param, const char *fname)
Build the localization table.
cpl_frame * xsh_merge_ord(cpl_frame *sci_frame, xsh_instrument *instrument, int merge, const char *rec_prefix)
Merge orders of the rectified frame using merge parameters.
#define xsh_msg_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(...)
#define xsh_msg_dbg_high(...)
double xsh_pfits_get_ra_cumoffset(const cpl_propertylist *plist)
int xsh_pfits_get_binx(const cpl_propertylist *plist)
find out the BINX value
double xsh_pfits_get_dec_cumoffset(const cpl_propertylist *plist)
int xsh_pfits_get_biny(const cpl_propertylist *plist)
find out the BINY value
double xsh_pfits_get_dec_reloffset(const cpl_propertylist *plist)
double xsh_pfits_get_ra_reloffset(const cpl_propertylist *plist)
cpl_frame * xsh_rectify_and_shift(cpl_frame *sci_frame, cpl_frame *orderlist_frame, cpl_frame *wavesol_frame, cpl_frame *model_frame, xsh_instrument *instrument, xsh_rectify_param *rectify_par, cpl_frame *spectralformat_frame, cpl_frame *loc_frame, cpl_frame *loc0_frame, double *throw_shift, cpl_frame *disp_tab_frame, const char *res_name, cpl_frame **res_frame_ext, cpl_frame **res_frame_tab)
cpl_frame * shift_with_kw(cpl_frame *rec_frame, xsh_instrument *instrument, xsh_rectify_param *rectify_par, const char *fname, cpl_frame **res_frame_ext, double **ref_ra, double **ref_dec, int flag)
This function creates a structure containing for each order the shift to be applied.
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_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_add_sky_model(cpl_frame *sub_sky_frame, cpl_frame *sky_frame, xsh_instrument *instrument, const char *rec_prefix)
cpl_frame * xsh_normalize_spectrum(const cpl_frame *obj_frame, const cpl_frame *atm_ext_frame, cpl_boolean correct_binning, xsh_instrument *instrument, const char *tag_o)
Normalize a spectrum.
void xsh_free_vector(cpl_vector **v)
Deallocate a vector and set the pointer to NULL.
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.
cpl_frame * xsh_normalize_spectrum_ord(const cpl_frame *obj_frame, const cpl_frame *atm_ext_frame, cpl_boolean correct_binning, xsh_instrument *instrument, const char *tag_o)
Normalize a spectrum.
cpl_frame * xsh_util_multiply_by_response_ord(cpl_frame *extracted_sci, cpl_frame *response, const char *tag_o)
Multiply input frame by response frame.
void xsh_free_mask(cpl_mask **m)
Deallocate an image mask and set the pointer to NULL.
void xsh_frame_image_save(cpl_frame *frm, const char *name_o)
save an image frame
cpl_frame * xsh_util_multiply_by_response(cpl_frame *merged_sci, cpl_frame *response, const char *tag_o)
Multiply input frame by response frame.
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_rectify_params_set_defaults(cpl_parameterlist *pars, const char *rec_id, xsh_instrument *inst, xsh_rectify_param *rectify_par)
void xsh_free_table(cpl_table **t)
Deallocate a table and set the pointer to NULL.
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.
enum localize_method method
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_master_dark(cpl_frameset *frames, xsh_instrument *instr)
Find master dark frame.
cpl_frame * xsh_find_spectral_format(cpl_frameset *frames, xsh_instrument *instr)
Find spectral format frame.
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_frame * xsh_find_order_tab_edges(cpl_frameset *frames, xsh_instrument *instr)
Find an order tab EDGES.
cpl_frame * xsh_find_master_bias(cpl_frameset *frames, xsh_instrument *instr)
Find master bias frame.
int xsh_print_rec_status(const int val)
Check if an error has happened and returns error kind and location.
cpl_boolean xsh_mode_is_physmod(cpl_frameset *set, xsh_instrument *instrument)
cpl_frame * xsh_find_slitmap(cpl_frameset *frames, xsh_instrument *instr)
Find a slit map.
cpl_frame * xsh_find_wave_tab(cpl_frameset *frames, xsh_instrument *instr)
Find a wave tab 2D or a wave tab ARC.
cpl_frame * xsh_find_frame_with_tag(cpl_frameset *frames, const char *tag, xsh_instrument *instr)
Find frame with a given tag.
cpl_frame * xsh_find_master_flat(cpl_frameset *frames, xsh_instrument *instr)
Find master flat frame.
#define XSH_MOD_CFG_OPT_AFC
#define XSH_MOD_CFG_OPT_2D
#define XSH_SLIT_MAP_MODEL
#define XSH_ORDER_TAB_EDGES_IFU
#define XSH_SKY_SUB_BKPTS
#define XSH_RESPONSE_MERGE1D_SLIT
#define XSH_WAVE_MAP_MODEL
#define XSH_SKY_ORDERS_CHUNKS
#define XSH_MRESPONSE_MERGE1D_SLIT
#define XSH_SKY_LINE_LIST
#define XSH_MASTER_FLAT_SLIT
#define XSH_GET_TAG_FROM_MODE(TAG, instr)
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_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_error_code xsh_model_temperature_update_frame(cpl_frame **model_config_frame, cpl_frame *ref_frame, xsh_instrument *instrument, int *found_temp)
cpl_frame * xsh_util_physmod_model_THE_create(cpl_frame *config_frame, xsh_instrument *instrument, cpl_frame *wave_list, const int binx, const int biny, const int num_ph, const int sky)
int xsh_parameters_rectify_fast_get(const char *recipe_id, cpl_parameterlist *list)
cpl_parameter * xsh_parameters_find(cpl_parameterlist *list, const char *recipe_id, const char *name)
find a parameter
int xsh_parameters_get_boolean(const cpl_parameterlist *list, const char *recipe_id, const char *name)
xsh_slit_limit_param * xsh_parameters_slit_limit_get(const char *recipe_id, cpl_parameterlist *list)
xsh_localize_obj_param * xsh_parameters_localize_obj_get(const char *recipe_id, cpl_parameterlist *list)
int xsh_parameters_subtract_sky_single_get_second(const char *recipe_id, cpl_parameterlist *list)
xsh_extract_param * xsh_parameters_extract_get(const char *recipe_id, cpl_parameterlist *list)
xsh_opt_extract_param * xsh_parameters_opt_extract_get(const char *recipe_id, cpl_parameterlist *list)
Get the optimal extraction parameters in a parameters list.
xsh_rectify_param * xsh_parameters_rectify_get(const char *recipe_id, cpl_parameterlist *list)
xsh_remove_crh_single_param * xsh_parameters_remove_crh_single_get(const char *recipe_id, cpl_parameterlist *list)
int xsh_parameters_get_int(const cpl_parameterlist *list, const char *recipe_id, const char *name)
xsh_combine_nod_param * xsh_parameters_combine_nod_get(const char *recipe_id, cpl_parameterlist *list)
get the combine nod parameters in a parameters list
xsh_subtract_sky_single_param * xsh_parameters_subtract_sky_single_get(const char *recipe_id, cpl_parameterlist *list)
int xsh_parameters_subtract_sky_single_get_first(const char *recipe_id, cpl_parameterlist *list)
xsh_background_param * xsh_parameters_background_get(const char *recipe_id, cpl_parameterlist *list)
get the background parameters in a parameters list
#define XSH_QC_MODEL_ANNEAL_RESY_RMS
#define XSH_QC_MODEL_NDAT
#define XSH_QC_MODEL_ANNEAL_RESX_RMS
#define XSH_FREE(POINTER)
#define XSH_CALLOC(POINTER, TYPE, SIZE)
cpl_frame * xsh_efficiency_compute(cpl_frame *frm_sci, cpl_frame *frm_cat, cpl_frame *frm_atmext, cpl_frame *high_abs_win, xsh_instrument *instrument)
computes efficiency
cpl_error_code xsh_scired_slit_nod_get_calibs(cpl_frameset *raws, cpl_frameset *calib, xsh_instrument *instrument, cpl_frame **bpmap, cpl_frame **master_bias, cpl_frame **master_flat, cpl_frame **order_tab_edges, cpl_frame **wave_tab, cpl_frame **model_config_frame, cpl_frame **wavemap, cpl_frame **slitmap, cpl_frame **disp_tab_frame, cpl_frame **spectral_format, cpl_frame **skymask_frame, cpl_frame **response_ord_frame, cpl_frame **frm_atmext, int do_computemap, int use_skymask, int pscan, const char *rec_prefix, const char *recipe_id)
double xsh_get_systematic_spatial_accuracy(xsh_instrument *instrument)
static cpl_error_code xsh_plist_set_wave_accuracy(cpl_propertylist *header, const double wrms, const double werr, const double sys_err)
cpl_frameset * xsh_nod_group_by_reloff(cpl_frameset *ord_set, xsh_instrument *instrument, xsh_stack_param *stack_par)
cpl_error_code xsh_slit_offset_get_params(cpl_parameterlist *parameters, const char *rec_id, xsh_localize_obj_param **loc_obj_par, xsh_rectify_param **rectify_par, xsh_remove_crh_single_param **crh_single_par, xsh_extract_param **extract_par, xsh_combine_nod_param **combine_nod_param, int *do_flatfield, int *gen_sky, int *generate_sdp_format)
cpl_error_code xsh_get_calibs_to_flux_calibrate(cpl_frameset *calib, xsh_instrument *instrument, cpl_frame **response_ord_frame, cpl_frame **frm_atmext)
static cpl_frame * xsh_nod_median_correct_list_per_wavelength(cpl_frame *frame_i, xsh_instrument *inst)
static cpl_error_code xsh_get_central_xy(cpl_frame *order_tab_edges, xsh_instrument *instrument, int *xcen, int *ycen)
cpl_frameset * xsh_scired_slit_nod_accurate(cpl_frameset *nod_set, cpl_frame *spectral_format, cpl_frame *master_flat, cpl_frame *order_tab_edges, cpl_frame *wave_tab, cpl_frame *model_config_frame, cpl_frame *disp_tab_frame, cpl_frame *wavemap, cpl_frame *skymask_frame, xsh_instrument *instrument, xsh_remove_crh_single_param *crh_single_par, xsh_rectify_param *rectify_par, xsh_localize_obj_param *loc_obj_par, const char *throw_name, const int do_flatfield, const char *rec_prefix)
cpl_error_code xsh_get_slit_stare_calibs(cpl_frameset *calib, xsh_instrument *instrument, cpl_frame **sky_list, cpl_frame **model_cfg, cpl_frame **qc_sky, cpl_frame **sframe_sky_sub_tab, cpl_frame **sky_orders_chunks)
static cpl_error_code xsh_plist_set_spat_accuracy(cpl_propertylist *header, const double srms, const double serr, const double sys_err)
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_calibs2(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_get_dispersion_calibs(cpl_frameset *calib, xsh_instrument *instrument, const int do_computemap, cpl_frame **model_config_frame, cpl_frame **wave_tab, cpl_frame **wavemap)
cpl_error_code xsh_respon_slit_nod_get_calibs(cpl_frameset *calib, xsh_instrument *instrument, cpl_frame **bpmap, cpl_frame **master_bias, cpl_frame **master_flat, cpl_frame **order_tab_edges, cpl_frame **wave_tab, cpl_frame **model_config_frame, cpl_frame **wavemap, cpl_frame **slitmap, cpl_frame **disp_tab_frame, cpl_frame **spectral_format, cpl_frame **skymask_frame, cpl_frame **response_ord_frame, cpl_frame **frm_atmext, int do_computemap, int use_skymask, int pscan, const char *rec_prefix, const char *recipe_id)
cpl_error_code xsh_ifu_stare_get_calibs(cpl_frameset *calib, xsh_instrument *inst, cpl_frame **spectral_format, cpl_frame **mbias, cpl_frame **mdark, cpl_frame **mflat, cpl_frame **otab_edges, cpl_frame **model_cfg, cpl_frame **bpmap, cpl_frame **wmap, cpl_frame **smap, cpl_frame **ifu_cfg_tab, cpl_frame **ifu_cfg_cor, cpl_frame **wavesol, const char *rec_id, int *recipe_use_model, int pscan)
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)
double xsh_get_systematic_wave_accuracy(xsh_instrument *instrument)
static cpl_error_code xsh_frame_image_get_step(cpl_frame *frm_ima, const int xcen, const int ycen, const int direction, double *dif)
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_scired_get_proper_maps(cpl_frameset *raws, cpl_frameset *calib, cpl_frame *order_tab_edges, cpl_frame *master_flat, cpl_frame *model_config_frame, cpl_frame *disp_tab, xsh_instrument *instrument, const int do_computemap, const char *rec_prefix, cpl_frame **wavemap, cpl_frame **slitmap)
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_scired_util_spectra_flux_calibrate(cpl_frame *res2D, cpl_frame *res1D, cpl_frame *response, cpl_frame *atmext, xsh_instrument *inst, const char *prefix, cpl_frame **fluxcal_2D, cpl_frame **fluxcal_1D)
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_frameset * xsh_nod_group_by_reloff2(cpl_frameset *ord_set, xsh_instrument *instrument, xsh_stack_param *stack_par)
cpl_error_code xsh_get_normal_calibs(cpl_frameset *calib, xsh_instrument *instrument, const char *recipe_id, int pscan, cpl_frame **spectral_format, cpl_frame **master_bias, cpl_frame **bpmap, cpl_frame **order_tab_edges, cpl_frame **master_flat)
cpl_frameset * xsh_frameset_mflat_divide(cpl_frameset *input, cpl_frame *mflat, xsh_instrument *instrument)
Generates a new frameset with each frame mflat divided input frameset.
static cpl_error_code xsh_get_response_calibs(cpl_frameset *calib, xsh_instrument *instrument, const int use_sky_mask, cpl_frame **disp_tab_frame, cpl_frame **response_ord_frame, cpl_frame **frm_atmext, cpl_frame **skymask_frame)
static cpl_frame * xsh_frame_divide_flat(int do_flat, cpl_frame *src, cpl_frame *mflat, const char *tag, xsh_instrument *instr)
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)
static cpl_error_code xsh_nod_rectify_and_shift_with_key(const char *nod_name, const char *qual_name, const char *rec_prefix, cpl_frame *frame2D, cpl_frame *order_tab_edges, cpl_frame *wave_tab, cpl_frame *model_config_frame, cpl_frame *spectral_format, cpl_frame *disp_tab_frame, xsh_instrument *instrument, const int corr_sky, xsh_rectify_param *rectify_par, double **ref_ra, double **ref_dec, cpl_frame **shift2_frame, cpl_frame **shift1_frame)
static cpl_error_code xsh_scired_nod_params_monitor(xsh_rectify_param *rectify_par, xsh_localize_obj_param *loc_obj_par)
monitor param values
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_slit_offset_get_calibs(cpl_frameset *calib, xsh_instrument *instrument, cpl_frame **bpmap, cpl_frame **mbias, cpl_frame **mdark, cpl_frame **otab_edges, cpl_frame **model_cfg, cpl_frame **wave_tab, cpl_frame **mflat, cpl_frame **wmap, cpl_frame **smap, cpl_frame **spectral_format, const char *rec_id)
cpl_error_code xsh_flux_calibrate2D(cpl_frame *rect2D, cpl_frame *atmext, cpl_frame *response, int mpar, xsh_instrument *inst, const char *rec_prefix, cpl_frame **fcal_rect_2D, cpl_frame **fcal_2D)
cpl_frameset * xsh_scired_slit_nod_fast(cpl_frameset *nod_set, cpl_frame *spectral_format, cpl_frame *master_flat, cpl_frame *order_tab_edges, cpl_frame *wave_tab, cpl_frame *model_config_frame, cpl_frame *disp_tab_frame, cpl_frame *wavemap, xsh_instrument *instrument, xsh_remove_crh_single_param *crh_single_par, xsh_rectify_param *rectify_par, const int do_flatfield, const int corr_sky, const int compute_eff, const char *rec_prefix, cpl_frameset **comb_eff_set)
cpl_error_code xsh_scired_nod_get_parameters(cpl_parameterlist *parameters, xsh_instrument *instrument, xsh_remove_crh_single_param **crh_single_par, xsh_rectify_param **rectify_par, xsh_extract_param **extract_par, xsh_combine_nod_param **combine_nod_par, xsh_slit_limit_param **slit_limit_par, xsh_localize_obj_param **loc_obj_par, int *rectify_fast, int *pscan, int *generate_sdp_format, const char *rec_id)
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)