22 #include <irplib_stdstar.h>
25 #include "sinfo_dfs.h"
28 #include "sinfo_tpl_utils.h"
30 #include "sinfo_utilities_scired.h"
31 #include "sinfo_functions.h"
32 #include "sinfo_pfits.h"
33 #include "sinfo_spiffi_types.h"
34 #include "sinfo_utils_wrappers.h"
35 #include "sinfo_error.h"
38 sinfo_sess2deg(
const double sess);
41 sinfo_set_spect_coord1(cpl_propertylist** plist,
47 sinfo_set_spect_coord2(cpl_propertylist** plist,
54 sinfo_set_coord1(cpl_propertylist** plist,
58 const int is_science);
60 sinfo_set_coord2(cpl_propertylist** plist,
64 const int is_science);
66 sinfo_set_coord3(cpl_propertylist** plist,
73 sinfo_set_cd_matrix2(cpl_propertylist** plist,
81 sinfo_set_cd_matrix3(cpl_propertylist** plist,
90 sinfo_new_change_plist_cube (cpl_propertylist * plist,
99 sinfo_new_change_plist_image (cpl_propertylist * plist,
105 sinfo_new_change_plist_spectrum (cpl_propertylist * plist,
111 sinfo_new_image_getvig(
112 cpl_image * image_in,
133 sinfo_check_input_data(object_config* cfg)
144 if(sinfo_is_fits_file(cfg->wavemap) != 1) {
150 if (cfg->halocorrectInd == 1)
152 if(sinfo_is_fits_file(cfg->halospectrum) != 1) {
159 if (cfg->northsouthInd == 0) {
160 if (sinfo_is_fits_file(cfg->poslist) != 1)
163 cfg->poslist,PRO_SLIT_POS);
168 if (sinfo_is_fits_file(cfg->distlist) != 1)
171 cfg->distlist,PRO_SLITLETS_DISTANCE);
189 sinfo_hms2deg(
const double hms)
207 hrs=(int)(rest/10000.);
210 rest=rest-(double)(hrs*10000.);
211 min=(int)(rest/100.);
214 sec=rest-(double)(min*100.);
217 deg=hrs*15+(double)(min/4.)+(double)(sec/240.);
235 sinfo_sess2deg(
const double sess)
253 grad=(int)(rest/10000.);
256 rest=rest-(double)(grad*10000.);
257 min=(int)(rest/100.);
260 sec=rest-(double)(min*100.);
263 deg=grad+(double)(min/60.)+(double)(sec/3600.);
287 sinfo_auto_size_cube(
float* offsetx,
303 sinfo_msg (
"Computation of output cube size") ;
304 for ( n = 0 ; n < nframes ; n++ ) {
305 float offx = offsetx[n];
306 float offy = offsety[n];
314 if(offx > max_offx) max_offx=offx;
315 if(offy > max_offy) max_offy=offy;
316 if(offx < min_offx) min_offx=offx;
317 if(offy < min_offy) min_offy=offy;
324 *ref_offx=(min_offx+max_offx)/2;
325 *ref_offy=(min_offy+max_offy)/2;
326 *size_x+=2*floor(max_offx-min_offx+0.5);
327 *size_y+=2*floor(max_offy-min_offy+0.5);
328 sinfo_msg(
"Output cube size: %d x %d",*size_x,*size_y);
329 sinfo_msg(
"Ref offset. x: %f y: %f",*ref_offx,*ref_offy);
344 sinfo_auto_size_cube5(object_config * cfg,
345 float* ref_offx,
float* ref_offy,
346 float* min_offx,
float* min_offy,
347 float* max_offx,
float* max_offy)
353 cpl_propertylist * plist=NULL;
354 sinfo_msg (
"Automatic computation of output cube size") ;
355 for ( n = 0 ; n < cfg->nframes ; n++ ) {
356 char* name = cfg->framelist[n] ;
357 plist=cpl_propertylist_load(name,0);
358 float offx = sinfo_pfits_get_cumoffsetx(plist);
359 if(cpl_error_get_code() != CPL_ERROR_NONE) {
367 float offy = sinfo_pfits_get_cumoffsety(plist);
368 sinfo_free_propertylist(&plist);
369 if(cpl_error_get_code() != CPL_ERROR_NONE) {
384 if(offx > *max_offx) *max_offx=offx;
385 if(offy > *max_offy) *max_offy=offy;
386 if(offx < *min_offx) *min_offx=offx;
387 if(offy < *min_offy) *min_offy=offy;
390 *ref_offx=(*min_offx+*max_offx)/2;
391 *ref_offy=(*min_offy+*max_offy)/2;
393 if(cfg->size_x == 0) cfg->size_x=2*floor(*max_offx-*min_offx+0.5)+64 ;
403 if(cfg->size_y == 0) cfg->size_y=2*floor(*max_offy-*min_offy+0.5)+64 ;
405 sinfo_msg(
"Output cube size: %d x %d",cfg->size_x,cfg->size_y);
406 sinfo_msg(
"Ref offset. x: %f y: %f",*ref_offx,*ref_offy);
407 sinfo_msg(
"Max offset. x: %f y: %f",*max_offx,*max_offy);
408 sinfo_msg(
"Min offset. x: %f y: %f",*min_offx,*min_offy);
424 sinfo_read_distances(
const int nslits,
const char* distlist)
428 float * distances = NULL;
429 char tbl_distances_name[FILE_NAME_SZ];
430 cpl_table* tbl_distances = NULL;
432 sinfo_msg(
"Read distances");
433 distances = (
float*) cpl_calloc (nslits - 1,
sizeof (
float));
435 if ( NULL == distances )
442 if(cpl_error_get_code() != CPL_ERROR_NONE) {
448 strcpy(tbl_distances_name,distlist);
449 tbl_distances = cpl_table_load(tbl_distances_name,1,0);
450 if(cpl_error_get_code() != CPL_ERROR_NONE) {
457 for (i =0 ; i< nslits-1; i++){
458 float tmp_float=cpl_table_get_float(tbl_distances,
"slitlet_distance",i,status);
459 if(cpl_error_get_code() != CPL_ERROR_NONE) {
465 sinfo_new_array_set_value(distances,tmp_float,i);
467 cpl_table_delete(tbl_distances);
482 sinfo_read_slitlets_edges(
const int nslits,
const char* poslist)
486 char tbl_slitpos_name[FILE_NAME_SZ];
487 cpl_table* tbl_slitpos=NULL;
492 float ** slit_edges = NULL;
494 slit_edges = sinfo_new_2Dfloatarray(nslits, 2) ;
496 strcpy(tbl_slitpos_name,poslist);
497 tbl_slitpos = cpl_table_load(tbl_slitpos_name,1,0);
498 if(cpl_error_get_code() != CPL_ERROR_NONE) {
503 n = cpl_table_get_nrow(tbl_slitpos);
509 for (i =0 ; i< nslits; i++){
510 float edge_x=cpl_table_get_double(tbl_slitpos,
"pos1",i,status);
511 float edge_y=cpl_table_get_double(tbl_slitpos,
"pos2",i,status);
512 if(cpl_error_get_code() != CPL_ERROR_NONE) {
517 sinfo_new_array2D_set_value(slit_edges,edge_x,i,0);
518 sinfo_new_array2D_set_value(slit_edges,edge_y,i,1);
520 cpl_table_delete(tbl_slitpos);
521 if(cpl_error_get_code() != CPL_ERROR_NONE) {
556 cpl_imagelist * sinfo_new_cube_getvig(
557 cpl_imagelist * cube_in,
563 cpl_imagelist * cube_out ;
575 if (cube_in==NULL)
return NULL ;
581 if ((loleft_x>upright_x) ||
582 (loleft_y>upright_y)) {
595 cube_out = cpl_imagelist_new() ;
597 for (i=0 ; i<cpl_imagelist_get_size(cube_in) ; i++) {
599 cpl_image* i_img=cpl_imagelist_get(cube_in,i);
601 cpl_image* o_img = sinfo_new_image_getvig(i_img,
603 upright_x, upright_y) ;
604 cpl_imagelist_set(cube_out,o_img,i);
628 sinfo_new_image_getvig(
629 cpl_image * image_in,
635 cpl_image * slit_img ;
646 if (image_in==NULL)
return NULL ;
648 ilx=cpl_image_get_size_x(image_in);
649 ily=cpl_image_get_size_y(image_in);
650 pidata=cpl_image_get_data_float(image_in);
652 if ((loleft_x<1) || (loleft_x>ilx) ||
653 (loleft_y<1) || (loleft_y>ily) ||
654 (upright_x<1) || (upright_x>ilx) ||
655 (upright_y<1) || (upright_y>ily) ||
656 (loleft_x>upright_x) || (loleft_y>upright_y)) {
658 "cannot extract such zone: aborting slit extraction",
659 loleft_x, loleft_y, upright_x, upright_y) ;
663 outlx = upright_x - loleft_x + 1 ;
664 outly = upright_y - loleft_y + 1 ;
665 slit_img = cpl_image_new(outlx, outly,CPL_TYPE_FLOAT) ;
666 podata=cpl_image_get_data_float(slit_img);
668 for (j=0 ; j<outly ; j++) {
669 pixelvalue* inpt = pidata+loleft_x-1 + (j+loleft_y-1)*ilx ;
670 pixelvalue* outpt = podata + j*outlx ;
671 for (i=0 ; i<outlx ; i++) {
690 sinfo_new_set_wcs_cube(cpl_imagelist* cub,
const char* name,
double clambda,
691 double dis,
double cpix,
double cx,
double cy)
693 cpl_propertylist* plist=NULL;
695 if ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {
697 cpl_propertylist_delete(plist) ;
701 sinfo_new_change_plist_cube(plist, clambda, dis, cpix, cx, cy) ;
702 sinfo_plist_set_extra_keys(plist,
"IMAGE",
"DATA",
"RMSE",
703 "DATA",
"ERRS",
"QUAL",0);
704 if (cpl_imagelist_save(cub, name, CPL_BPP_IEEE_FLOAT,
705 plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
707 cpl_propertylist_delete(plist) ;
710 cpl_propertylist_delete(plist) ;
731 sinfo_set_wcs_cal_image(cpl_image* img,
740 cpl_propertylist* plist=NULL;
742 if ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {
744 cpl_propertylist_delete(plist) ;
748 sinfo_msg(
"crpix1=%g crval1=%g cdelt1=%g",crpix1,crval1,cdelt1);
749 sinfo_set_coord1(&plist,crpix1,crval1,cdelt1,0);
750 sinfo_msg(
"crpix2=%g crval2=%g cdelt2=%g",crpix2,crval2,cdelt2);
751 sinfo_set_coord2(&plist,crpix2,crval2,cdelt2,0);
752 cpl_propertylist_erase_regexp(plist,
"^CDELT*",0);
763 sinfo_set_cd_matrix2(&plist,cd1_1,cd1_2,cd2_1,cd2_2);
765 if (cpl_image_save(img, name, CPL_BPP_IEEE_FLOAT,
766 plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
768 cpl_propertylist_delete(plist) ;
771 cpl_propertylist_delete(plist) ;
786 sinfo_new_set_wcs_image(cpl_image* img,
791 cpl_propertylist* plist=NULL;
793 if ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {
795 cpl_propertylist_delete(plist) ;
798 sinfo_new_change_plist_image(plist, cx, cy) ;
800 if (cpl_image_save(img, name, CPL_BPP_IEEE_FLOAT,
801 plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
803 cpl_propertylist_delete(plist) ;
806 cpl_propertylist_delete(plist) ;
822 sinfo_new_set_wcs_spectrum(cpl_image* img,
const char* name,
double clambda,
823 double dis,
double cpix)
825 cpl_propertylist* plist=NULL;
827 if ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {
829 cpl_propertylist_delete(plist) ;
832 sinfo_new_change_plist_spectrum(plist, clambda, dis,cpix) ;
834 if (cpl_image_save(img, name, CPL_BPP_IEEE_FLOAT,
835 plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
837 cpl_propertylist_delete(plist) ;
840 cpl_propertylist_delete(plist) ;
856 sinfo_new_change_plist_cube (cpl_propertylist * plist,
869 double cd1_1, cd1_2, cd2_1, cd2_2 ;
871 char firsttext[2*FILE_NAME_SZ] ;
875 double cdelt3=dispersion;
877 double crpix1=center_x;
878 double crpix2=center_y;
883 double crval3=cenLambda;
886 strcpy(firsttext,
"sinfo_rec_objnod -f \0") ;
888 float pixelscale = sinfo_pfits_get_pixscale(plist)/2. ;
895 double ra=sinfo_pfits_get_targ_alpha(plist);
896 double dec=sinfo_pfits_get_targ_delta(plist);
899 ra=sinfo_hms2deg(ra);
900 dec=sinfo_sess2deg(dec);
907 angle = sinfo_pfits_get_posangle(plist) ;
909 if(cpl_error_get_code() != CPL_ERROR_NONE) {
912 cdelt1=sign_swap*pixelscale / 3600.;
913 cdelt2= +pixelscale / 3600.;
916 radangle = angle * PI_NUMB / 180. ;
917 cd1_1 = +cdelt1*cos(radangle);
918 cd1_2 = -cdelt2*sin(radangle);
919 cd2_1 = +cdelt1*sin(radangle);
920 cd2_2 = +cdelt2*cos(radangle);
923 sinfo_set_coord1(&plist,crpix1,crval1,cdelt1,1);
924 sinfo_set_coord2(&plist,crpix2,crval2,cdelt2,1);
925 sinfo_set_coord3(&plist,crpix3,crval3,cdelt3);
926 sinfo_set_cd_matrix2(&plist,cd1_1,cd1_2,cd2_1,cd2_2);
927 sinfo_set_cd_matrix3(&plist,0,0,0,0,dispersion);
945 sinfo_set_coord1(cpl_propertylist** plist,
949 const int is_science)
953 cpl_propertylist_erase_regexp(*plist,
"^CTYPE1",0);
954 cpl_propertylist_insert_after_string(*plist,
"EXPTIME",
"CTYPE1",
"RA---TAN");
955 cpl_propertylist_set_comment(*plist,
"CTYPE1",
"Projected Rectascension");
957 cpl_propertylist_erase_regexp(*plist,
"^CTYPE1",0);
958 cpl_propertylist_insert_after_string(*plist,
"EXPTIME",
"CTYPE1",
"PIPXEL");
959 cpl_propertylist_set_comment(*plist,
"CTYPE1",
"pixel unit");
962 cpl_propertylist_erase_regexp(*plist,
"^CRPIX1",0);
963 cpl_propertylist_insert_after_double(*plist,
"CTYPE1",
"CRPIX1", crpix1) ;
964 cpl_propertylist_set_comment(*plist,
"CRPIX1",
"Reference pixel in RA" ) ;
966 cpl_propertylist_erase_regexp(*plist,
"^CRVAL1",0);
967 cpl_propertylist_insert_after_double(*plist,
"CRPIX1",
"CRVAL1", crval1 ) ;
968 cpl_propertylist_set_comment(*plist,
"CRVAL1",
"Reference RA" ) ;
970 cpl_propertylist_erase_regexp(*plist,
"^CDELT1",0);
971 cpl_propertylist_insert_after_double(*plist,
"CRVAL1",
"CDELT1",cdelt1 ) ;
972 cpl_propertylist_set_comment(*plist,
"CDELT1",
"pixel scale" ) ;
974 cpl_propertylist_erase_regexp(*plist,
"^CUNIT1",0);
975 cpl_propertylist_insert_after_string(*plist,
"CDELT1",
"CUNIT1",
"deg" ) ;
976 cpl_propertylist_set_comment(*plist,
"CUNIT1",
"RA-UNIT" ) ;
978 cpl_propertylist_erase_regexp(*plist,
"^CUNIT1",0);
979 cpl_propertylist_insert_after_string(*plist,
"CDELT1",
"CUNIT1",
"PIXEL" ) ;
980 cpl_propertylist_set_comment(*plist,
"CUNIT1",
"pixel unit" ) ;
995 sinfo_set_coord2(cpl_propertylist** plist,
999 const int is_science)
1002 cpl_propertylist_erase_regexp(*plist,
"^CTYPE2",0);
1003 cpl_propertylist_insert_after_string(*plist,
"CUNIT1",
"CTYPE2",
"DEC--TAN");
1004 cpl_propertylist_set_comment(*plist,
"CTYPE2",
"Projected Declination") ;
1006 cpl_propertylist_erase_regexp(*plist,
"^CTYPE2",0);
1007 cpl_propertylist_insert_after_string(*plist,
"CUNIT1",
"CTYPE2",
"PIXEL");
1008 cpl_propertylist_set_comment(*plist,
"CTYPE2",
"pixel unit") ;
1010 cpl_propertylist_erase_regexp(*plist,
"^CRPIX2",0);
1011 cpl_propertylist_insert_after_double(*plist,
"CTYPE2",
"CRPIX2",crpix2 ) ;
1012 cpl_propertylist_set_comment(*plist,
"CRPIX2",
"Reference pixel in DEC") ;
1014 cpl_propertylist_erase_regexp(*plist,
"^CRVAL2",0);
1015 cpl_propertylist_insert_after_double(*plist,
"CRPIX2",
"CRVAL2",crval2) ;
1016 cpl_propertylist_set_comment(*plist,
"CRVAL2",
"Reference DEC") ;
1018 cpl_propertylist_erase_regexp(*plist,
"^CDELT2",0);
1019 cpl_propertylist_insert_after_double(*plist,
"CRVAL2",
"CDELT2",cdelt2 ) ;
1020 cpl_propertylist_set_comment(*plist,
"CDELT2",
"pixel scale") ;
1022 cpl_propertylist_erase_regexp(*plist,
"^CUNIT2",0);
1023 cpl_propertylist_insert_after_string(*plist,
"CDELT2",
"CUNIT2",
"deg" ) ;
1024 cpl_propertylist_set_comment(*plist,
"CUNIT2",
"DEC-UNIT") ;
1026 cpl_propertylist_erase_regexp(*plist,
"^CUNIT2",0);
1027 cpl_propertylist_insert_after_string(*plist,
"CDELT2",
"CUNIT2",
"PIXEL" ) ;
1028 cpl_propertylist_set_comment(*plist,
"CUNIT2",
"pixel unitT") ;
1044 sinfo_set_coord3(cpl_propertylist** plist,
1046 const double crval3,
1047 const double cdelt3)
1049 cpl_propertylist_erase_regexp(*plist,
"^CTYPE3",0);
1050 cpl_propertylist_insert_after_string(*plist,
"EXPTIME",
"CTYPE3",
"WAVE" ) ;
1051 cpl_propertylist_set_comment(*plist,
"CTYPE3",
"wavelength axis in microns") ;
1053 cpl_propertylist_erase_regexp(*plist,
"^CRPIX3",0);
1054 cpl_propertylist_insert_after_double(*plist,
"CTYPE3",
"CRPIX3", (
double)crpix3 ) ;
1055 cpl_propertylist_set_comment(*plist,
"CRPIX3",
"Reference pixel in z") ;
1057 cpl_propertylist_erase_regexp(*plist,
"^CRVAL3",0);
1058 cpl_propertylist_insert_after_double(*plist,
"CRPIX3",
"CRVAL3", crval3) ;
1059 cpl_propertylist_set_comment(*plist,
"CRVAL3",
"central wavelength") ;
1061 cpl_propertylist_erase_regexp(*plist,
"^CDELT3",0);
1063 cpl_propertylist_insert_after_double(*plist,
"CRVAL3",
"CDELT3",cdelt3) ;
1064 cpl_propertylist_set_comment(*plist,
"CDELT3",
"microns per pixel") ;
1066 cpl_propertylist_erase_regexp(*plist,
"^CUNIT3",0);
1067 cpl_propertylist_insert_after_string(*plist,
"CDELT3",
"CUNIT3",
"um" ) ;
1068 cpl_propertylist_set_comment(*plist,
"CUNIT3",
"spectral unit" ) ;
1070 cpl_propertylist_erase_regexp(*plist,
"^SPECSYS",0);
1071 cpl_propertylist_insert_after_string(*plist,
"CUNIT3",
"SPECSYS",
"TOPOCENT" ) ;
1072 cpl_propertylist_set_comment(*plist,
"SPECSYS",
"Coordinate reference frame" ) ;
1087 sinfo_set_cd_matrix2(cpl_propertylist** plist,
1094 check_nomsg(cpl_propertylist_erase_regexp(*plist,
"^CD1_1",0));
1095 check_nomsg(cpl_propertylist_insert_after_double(*plist,
"EXPTIME",
1097 check_nomsg(cpl_propertylist_set_comment(*plist,
"CD1_1",
1098 "CD rotation matrix" )) ;
1100 check_nomsg(cpl_propertylist_erase_regexp(*plist,
"^CD1_2",0));
1101 check_nomsg(cpl_propertylist_insert_after_double(*plist,
"CD1_1",
1103 check_nomsg(cpl_propertylist_set_comment(*plist,
"CD1_2",
1104 "CD rotation matrix" )) ;
1106 check_nomsg(cpl_propertylist_erase_regexp(*plist,
"^CD2_1",0));
1107 check_nomsg(cpl_propertylist_insert_after_double(*plist,
"CD1_2",
1109 check_nomsg(cpl_propertylist_set_comment(*plist,
"CD2_1",
1110 "CD rotation matrix" )) ;
1112 check_nomsg(cpl_propertylist_erase_regexp(*plist,
"^CD2_2",0));
1113 check_nomsg(cpl_propertylist_insert_after_double(*plist,
"CD2_1",
1115 check_nomsg(cpl_propertylist_set_comment(*plist,
"CD2_2",
1116 "CD rotation matrix" )) ;
1138 sinfo_set_cd_matrix3(cpl_propertylist** plist,
1147 check_nomsg(cpl_propertylist_erase_regexp(*plist,
"^CD1_3",0));
1148 check_nomsg(cpl_propertylist_insert_after_double(*plist,
"EXPTIME",
1150 check_nomsg(cpl_propertylist_set_comment(*plist,
"CD1_3",
1151 "CD rotation matrix" )) ;
1154 check_nomsg(cpl_propertylist_erase_regexp(*plist,
"^CD2_3",0));
1155 check_nomsg(cpl_propertylist_insert_after_double(*plist,
"CD1_3",
1157 check_nomsg(cpl_propertylist_set_comment(*plist,
"CD2_3",
1158 "CD rotation matrix" )) ;
1162 check_nomsg(cpl_propertylist_erase_regexp(*plist,
"^CD3_1",0));
1163 check_nomsg(cpl_propertylist_insert_after_double(*plist,
"CD2_3",
1165 check_nomsg(cpl_propertylist_set_comment(*plist,
"CD3_1",
1166 "CD rotation matrix" )) ;
1168 check_nomsg(cpl_propertylist_erase_regexp(*plist,
"^CD3_2",0));
1169 check_nomsg(cpl_propertylist_insert_after_double(*plist,
"CD3_1",
1171 check_nomsg(cpl_propertylist_set_comment(*plist,
"CD3_2",
1172 "CD rotation matrix" )) ;
1174 check_nomsg(cpl_propertylist_erase_regexp(*plist,
"^CD3_3",0));
1175 check_nomsg(cpl_propertylist_insert_after_double(*plist,
"CD3_2",
1177 check_nomsg(cpl_propertylist_set_comment(*plist,
"CD3_3",
1178 "CD rotation matrix" )) ;
1196 sinfo_set_spect_coord1(cpl_propertylist** plist,
1198 const double crval1,
1199 const double cdelt1)
1202 cpl_propertylist_erase_regexp(*plist,
"^CTYPE1",0);
1203 cpl_propertylist_insert_after_string(*plist,
"EXPTIME",
"CTYPE1",
"PIXEL");
1204 cpl_propertylist_set_comment(*plist,
"CTYPE1",
"Pixel coordinate system.");
1206 cpl_propertylist_erase_regexp(*plist,
"^CRPIX1",0);
1207 cpl_propertylist_insert_after_double(*plist,
"CTYPE1",
"CRPIX1", (
double)crpix1 ) ;
1208 cpl_propertylist_set_comment(*plist,
"CRPIX1",
"Reference pixel in x") ;
1210 cpl_propertylist_erase_regexp(*plist,
"^CRVAL1",0);
1211 cpl_propertylist_insert_after_double(*plist,
"CRPIX1",
"CRVAL1", crval1 ) ;
1212 cpl_propertylist_set_comment(*plist,
"CRVAL1",
"value of ref pixel.") ;
1214 cpl_propertylist_erase_regexp(*plist,
"^CDELT1",0);
1215 cpl_propertylist_insert_after_double(*plist,
"CRVAL1",
"CDELT1", cdelt1 ) ;
1216 cpl_propertylist_set_comment(*plist,
"CDELT1",
"pixel scale") ;
1219 cpl_propertylist_erase_regexp(*plist,
"^CUNIT1",0);
1220 cpl_propertylist_insert_after_string(*plist,
"CDELT1",
"CUNIT1",
"Pixel" );
1221 cpl_propertylist_set_comment(*plist,
"CUNIT1",
"spectral unit" );
1238 sinfo_set_spect_coord2(cpl_propertylist** plist,
1240 const double crval2,
1241 const double cdelt2)
1244 cpl_propertylist_erase_regexp(*plist,
"^CTYPE2",0);
1245 cpl_propertylist_insert_after_string(*plist,
"EXPTIME",
"CTYPE2",
"WAVE" );
1246 cpl_propertylist_set_comment(*plist,
"CTYPE2",
"wavelength axis in microns");
1248 cpl_propertylist_erase_regexp(*plist,
"^CRPIX2",0);
1249 cpl_propertylist_insert_after_double(*plist,
"CTYPE2",
"CRPIX2",(
double)crpix2 ) ;
1250 cpl_propertylist_set_comment(*plist,
"CRPIX2",
"Reference pixel in x") ;
1252 cpl_propertylist_erase_regexp(*plist,
"^CRVAL2",0);
1253 cpl_propertylist_insert_after_double(*plist,
"CRPIX2",
"CRVAL2",crval2 ) ;
1254 cpl_propertylist_set_comment(*plist,
"CRVAL2",
"central wavelength") ;
1256 cpl_propertylist_erase_regexp(*plist,
"^CDELT2",0);
1257 cpl_propertylist_insert_after_double(*plist,
"CRVAL2",
"CDELT2",cdelt2);
1258 cpl_propertylist_set_comment(*plist,
"CDELT2",
"microns per pixel");
1260 cpl_propertylist_erase_regexp(*plist,
"^CUNIT2",0);
1261 cpl_propertylist_insert_after_string(*plist,
"CDELT2",
"CUNIT2",
"um");
1262 cpl_propertylist_set_comment(*plist,
"CUNIT2",
"spectral unit" );
1276 sinfo_new_change_plist_spectrum (cpl_propertylist * plist,
1287 double crval2=cenLambda;
1288 double cdelt2=dispersion;
1292 cpl_propertylist_erase_regexp(plist,
"^CTYPE3",0);
1293 cpl_propertylist_erase_regexp(plist,
"^CRPIX3",0);
1294 cpl_propertylist_erase_regexp(plist,
"^CRVAL3",0);
1295 cpl_propertylist_erase_regexp(plist,
"^CDELT3",0);
1296 cpl_propertylist_erase_regexp(plist,
"^CUNIT3",0);
1298 cpl_propertylist_erase_regexp(plist,
"^CTYPE2",0);
1299 cpl_propertylist_erase_regexp(plist,
"^CRPIX2",0);
1300 cpl_propertylist_erase_regexp(plist,
"^CRVAL2",0);
1301 cpl_propertylist_erase_regexp(plist,
"^CDELT2",0);
1302 cpl_propertylist_erase_regexp(plist,
"^CUNIT2",0);
1305 cpl_propertylist_erase_regexp(plist,
"^CD1_1",0);
1306 cpl_propertylist_erase_regexp(plist,
"^CD1_2",0);
1307 cpl_propertylist_erase_regexp(plist,
"^CD2_1",0);
1308 cpl_propertylist_erase_regexp(plist,
"^CD2_2",0);
1313 sinfo_set_spect_coord1(&plist,crpix1,crval1,cdelt1);
1314 sinfo_set_spect_coord2(&plist,crpix2,crval2,cdelt2);
1329 sinfo_new_change_plist_image (cpl_propertylist * plist,
1339 float cd1_1, cd1_2, cd2_1, cd2_2 ;
1340 char firsttext[2*FILE_NAME_SZ] ;
1347 double crpix1=center_x;
1348 double crpix2=center_y;
1356 strcpy(firsttext,
"sinfo_rec_objnod -f \0") ;
1358 float pixelscale = sinfo_pfits_get_pixscale(plist)/2. ;
1367 double ra=sinfo_pfits_get_targ_alpha(plist);
1368 double dec=sinfo_pfits_get_targ_delta(plist);
1369 ra=sinfo_hms2deg(ra);
1370 dec=sinfo_sess2deg(dec);
1377 angle = sinfo_pfits_get_posangle(plist) ;
1379 if(cpl_error_get_code() != CPL_ERROR_NONE) {
1383 radangle = angle * PI_NUMB / 180. ;
1385 cdelt1=sign_swap * pixelscale / 3600. ;
1386 cdelt2= pixelscale / 3600. ;
1389 cd1_1 = +cdelt1*cos(radangle) ;
1390 cd1_2 = -cdelt2*sin(radangle) ;
1391 cd2_1 = +cdelt1*sin(radangle) ;
1392 cd2_2 = +cdelt2*cos(radangle) ;
1398 check_nomsg(sinfo_set_coord1(&plist,crpix1,crval1,cdelt1,1));
1399 check_nomsg(sinfo_set_coord2(&plist,crpix2,crval2,cdelt2,1));
1400 check_nomsg(sinfo_set_cd_matrix2(&plist,cd1_1,cd1_2,cd2_1,cd2_2));
1415 sinfo_new_sinfoni_correct_median(cpl_imagelist** cubes,
const int n_cubes)
1418 cpl_imagelist** cubes_cor=NULL;
1419 double local_median=0;
1421 cpl_image* i_img=NULL;
1422 cpl_image* o_img=NULL;
1425 if ( cubes == NULL ) {
1429 if ( n_cubes <= 0 ) {
1434 cubes_cor = (cpl_imagelist**) cpl_calloc (n_cubes,
sizeof (cpl_imagelist*)) ;
1436 for ( i = 0 ; i < n_cubes ; i++ ) {
1437 cubes_cor[i] = cpl_imagelist_new();
1438 for(z=0;z< cpl_imagelist_get_size(cubes[i]); z++) {
1439 i_img=cpl_imagelist_get(cubes[i],z);
1440 local_median=cpl_image_get_median(i_img);;
1441 o_img=cpl_image_duplicate(i_img);
1442 if(!isnan(local_median)) {
1443 cpl_image_subtract_scalar(o_img,local_median);
1445 cpl_imagelist_set(cubes_cor[i],o_img,z);
1458 int sinfo_new_sinfoni_correct_median_it(cpl_imagelist** inp)
1461 for(
int z=0;z< cpl_imagelist_get_size((*inp)); z++) {
1462 cpl_image* img=cpl_imagelist_get((*inp),z);
1463 double local_median=sinfo_new_my_median_image(img);
1464 if(!isnan(local_median)) {
1465 cpl_image_subtract_scalar(img,local_median);
1469 cpl_imagelist_set((*inp),img,z);
1484 cpl_imagelist** sinfo_new_sinfoni_correct_sky(cpl_imagelist** cubes,
1486 cpl_imagelist* sky_cube)
1489 cpl_imagelist** cubes_sky=NULL;
1502 double val_msk_sum=0;
1503 cpl_vector* val=NULL;
1504 cpl_vector* msk=NULL;
1514 cpl_image* i_img=NULL;
1518 if ( cubes == NULL ) {
1522 ilx=cpl_image_get_size_x(cpl_imagelist_get(cubes[0],0));
1523 ily=cpl_image_get_size_y(cpl_imagelist_get(cubes[0],0));
1524 inp=cpl_imagelist_get_size(cubes[0]);
1527 sky_lx=cpl_image_get_size_x(cpl_imagelist_get(sky_cube,0));
1534 cubes_sky = (cpl_imagelist**) cpl_calloc (nc,
sizeof (cpl_imagelist*)) ;
1536 for(z=0;z< inp; z++) {
1537 cpl_image* sky_img=cpl_imagelist_get(sky_cube,z);
1538 float* p_sky_data=cpl_image_get_data_float(sky_img);
1539 for(y=0;y< ily; y++) {
1540 for(x=0;x< ilx; x++) {
1542 msk=cpl_vector_new(nc);
1543 for (i=0;i<nc;i++) {
1544 cpl_vector_set(msk,i,1);
1547 for (ks=0;ks<nc;ks++) {
1551 val=cpl_vector_new(nc-nclip);
1553 for ( i = 0 ; i < nc ; i++ ) {
1554 i_img=cpl_imagelist_get(cubes[i],z);
1555 pidata=cpl_image_get_data_float(i_img);
1556 if ((!isnan(pidata[x+y*ilx])) &&
1557 (cpl_vector_get(msk,i) != 0) ) {
1558 cpl_vector_set(val,ovr,(
double)pidata[x+y*ilx]);
1564 avg=cpl_vector_get_mean(val);
1565 med=cpl_vector_get_median_const(val);
1567 sig=cpl_vector_get_stdev(val);
1572 avg=cpl_vector_get(val,0);
1577 cpl_vector_delete(val);
1578 for ( i = 0 ; i < nc ; i++ ) {
1579 i_img=cpl_imagelist_get(cubes[i],z);
1580 pidata=cpl_image_get_data_float(i_img);
1582 if ((!isnan(pidata[x+y*ilx])) &&
1583 (cpl_vector_get(msk,i) != 0)) {
1584 if(abs((pidata[x+y*ilx]-med))> k*sig) {
1585 cpl_vector_set(msk,i,0);
1593 for ( i = 0 ; i < nc ; i++ ) {
1595 if (!isnan(pidata[x+y*ilx])) {
1596 msk_sum+=cpl_vector_get(msk,i);
1597 val_msk_sum+=pidata[x+y*ilx]*
1598 cpl_vector_get(msk,i);
1601 p_sky_data[x+y*sky_lx]=val_msk_sum/msk_sum;
1602 cpl_vector_delete(msk);
1606 for ( i = 0 ; i < nc ; i++ ) {
1607 cubes_sky[i]=cpl_imagelist_duplicate(cubes[i]);
1609 cpl_imagelist_subtract(cubes_sky[i],sky_cube);
1632 cpl_imagelist** sinfo_new_sinfoni_correct_sky2(cpl_imagelist** cubes,
1634 cpl_imagelist* sky_cube,
1635 cpl_imagelist* med_cube,
1636 cpl_imagelist* msk_cube,
1637 cpl_imagelist* avg_cube,
1638 cpl_imagelist* sig_cube,
1639 cpl_imagelist* ovr_cube)
1641 cpl_imagelist** cubes_sky=NULL;
1654 double val_msk_sum=0;
1655 cpl_vector* val=NULL;
1656 cpl_vector* msk=NULL;
1671 if ( cubes == NULL ) {
1676 ilx=cpl_image_get_size_x(cpl_imagelist_get(cubes[0],0));
1677 ily=cpl_image_get_size_y(cpl_imagelist_get(cubes[0],0));
1678 inp=cpl_imagelist_get_size(cubes[0]);
1685 cubes_sky = (cpl_imagelist**) cpl_calloc (nc,
sizeof (cpl_imagelist*)) ;
1694 for(z=0;z< inp; z++) {
1695 float* p_ovr_data=cpl_image_get_data_float(cpl_imagelist_get(ovr_cube,z));
1696 float* p_msk_data=cpl_image_get_data_float(cpl_imagelist_get(msk_cube,z));
1697 float* p_avg_data=cpl_image_get_data_float(cpl_imagelist_get(avg_cube,z));
1698 float* p_sig_data=cpl_image_get_data_float(cpl_imagelist_get(sig_cube,z));
1699 float* p_sky_data=cpl_image_get_data_float(cpl_imagelist_get(sky_cube,z));
1700 float* p_med_data=cpl_image_get_data_float(cpl_imagelist_get(med_cube,z));
1703 for(y=0;y< ily; y++) {
1704 for(x=0;x< ilx; x++) {
1706 msk=cpl_vector_new(nc);
1707 for (i=0;i<nc;i++) {
1708 cpl_vector_set(msk,i,1);
1710 p_ovr_data[x+y*ovr_lx]=nc;
1711 p_msk_data[x+y*msk_lx]=nc;
1713 for (ks=0;ks<nc;ks++) {
1717 val=cpl_vector_new(nc-nclip);
1719 for ( i = 0 ; i < nc ; i++ ) {
1720 pidata=cpl_image_get_data_float(cpl_imagelist_get(cubes[i],z));
1721 if ((!isnan(pidata[x+y*ilx])) &&
1722 (cpl_vector_get(msk,i) != 0) ) {
1723 cpl_vector_set(val,ovr,(
double)pidata[x+y*ilx]);
1729 avg=cpl_vector_get_mean(val);
1730 med=cpl_vector_get_median_const(val);
1731 sig=cpl_vector_get_stdev(val);
1733 avg=cpl_vector_get(val,0);
1738 p_med_data[x+y*med_lx]=med;
1739 p_avg_data[x+y*avg_lx]=avg;
1740 p_sig_data[x+y*sig_lx]=sig;
1741 cpl_vector_delete(val);
1742 for ( i = 0 ; i < nc ; i++ ) {
1743 pidata=cpl_image_get_data_float(cpl_imagelist_get(cubes[i],z));
1745 if ((!isnan(pidata[x+y*ilx])) &&
1746 (cpl_vector_get(msk,i) != 0)) {
1747 if(abs((pidata[x+y*ilx]-med))> k*sig) {
1749 p_msk_data[x+y*msk_lx]-=1;
1750 cpl_vector_set(msk,i,0);
1758 for ( i = 0 ; i < nc ; i++ ) {
1759 pidata=cpl_image_get_data_float(cpl_imagelist_get(cubes[i],z));
1761 if (!isnan(pidata[x+y*ilx])) {
1767 msk_sum+=cpl_vector_get(msk,i);
1768 val_msk_sum+=pidata[x+y*ilx]*
1769 cpl_vector_get(msk,i);
1772 p_sky_data[x+y*sky_lx]=val_msk_sum/msk_sum;
1773 cpl_vector_delete(msk);
1777 for ( i = 0 ; i < nc ; i++ ) {
1778 cubes_sky[i]=cpl_imagelist_duplicate(cubes[i]);
1780 cpl_imagelist_subtract(cubes_sky[i],sky_cube);
1801 sinfo_new_assign_offset(
const int n,
1805 const float ref_offx,
1806 const float ref_offy)
1824 cpl_propertylist * plist=NULL;
1827 if ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {
1829 cpl_propertylist_delete(plist) ;
1833 offx = sinfo_pfits_get_cumoffsetx(plist) - ref_offx ;
1834 if(cpl_error_get_code() != CPL_ERROR_NONE) {
1842 offy = sinfo_pfits_get_cumoffsety(plist) - ref_offy ;
1843 if(cpl_error_get_code() != CPL_ERROR_NONE) {
1852 if (cpl_propertylist_has(plist, KEY_NAME_MJD_OBS)) {
1853 mjd_obs=cpl_propertylist_get_double(plist, KEY_NAME_MJD_OBS);
1856 cpl_propertylist_delete(plist) ;
1860 cpl_propertylist_delete(plist) ;
1862 if (mjd_obs > 53825. ) {
1865 sinfo_new_array_set_value(offsetx,2*offx,n);
1866 sinfo_new_array_set_value(offsety,2*offy,n);
1867 }
else if ((mjd_obs > 53421.58210082 ) && (mjd_obs <= 53825.)){
1873 sinfo_new_array_set_value(offsetx,-2*offx,n);
1874 sinfo_new_array_set_value(offsety,2*offy,n);
1881 sinfo_new_array_set_value(offsetx,2*offx,n);
1882 sinfo_new_array_set_value(offsety,-2*offy,n);
1907 sinfo_new_assign_offset2(
const int n,
1911 const float ref_offx,
1912 const float ref_offy)
1919 cpl_propertylist * plist=NULL;
1921 offx = offsetx[n] - ref_offx ;
1922 offy = offsety[n] - ref_offy ;
1927 if ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {
1929 cpl_propertylist_delete(plist) ;
1933 if (cpl_propertylist_has(plist, KEY_NAME_MJD_OBS)) {
1934 mjd_obs=cpl_propertylist_get_double(plist, KEY_NAME_MJD_OBS);
1937 cpl_propertylist_delete(plist) ;
1940 cpl_propertylist_delete(plist) ;
1945 if (mjd_obs > 53825. ) {
1948 sinfo_new_array_set_value(offsetx,2*offx,n);
1949 sinfo_new_array_set_value(offsety,2*offy,n);
1950 }
else if ((mjd_obs > 53421.58210082 ) && (mjd_obs <= 53825.)){
1956 sinfo_new_array_set_value(offsetx,-2*offx,n);
1957 sinfo_new_array_set_value(offsety,2*offy,n);
1964 sinfo_new_array_set_value(offsetx,2*offx,n);
1965 sinfo_new_array_set_value(offsety,-2*offy,n);
1988 sinfo_new_object_assign_offset(
const char* name,
1999 cpl_propertylist * plist=NULL;
2002 if ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {
2004 cpl_propertylist_delete(plist) ;
2009 *ref_offx = sinfo_pfits_get_cumoffsetx(plist) ;
2010 if(cpl_error_get_code() != CPL_ERROR_NONE) {
2016 *ref_offy = sinfo_pfits_get_cumoffsety(plist) ;
2017 if(cpl_error_get_code() != CPL_ERROR_NONE) {
2029 offx = sinfo_pfits_get_cumoffsetx(plist) - *ref_offx ;
2030 if(cpl_error_get_code() != CPL_ERROR_NONE) {
2036 offy = sinfo_pfits_get_cumoffsety(plist) - *ref_offy ;
2037 if(cpl_error_get_code() != CPL_ERROR_NONE) {
2057 if (cpl_propertylist_has(plist, KEY_NAME_MJD_OBS)) {
2058 mjd_obs=cpl_propertylist_get_double(plist, KEY_NAME_MJD_OBS);
2061 cpl_propertylist_delete(plist) ;
2065 cpl_propertylist_delete(plist) ;
2067 if (mjd_obs > 53825. ) {
2070 sinfo_new_array_set_value(*offsetx,2*offx,n);
2071 sinfo_new_array_set_value(*offsety,2*offy,n);
2072 }
else if ((mjd_obs > 53421.58210082 ) && (mjd_obs <= 53825.)){
2074 sinfo_new_array_set_value(*offsetx,-offx*2,n);
2075 sinfo_new_array_set_value(*offsety,+offy*2,n);
2078 sinfo_new_array_set_value(*offsetx,+offx*2,n);
2079 sinfo_new_array_set_value(*offsety,-offy*2,n);
2097 sinfo_new_fine_tune(cpl_imagelist* cube,
2098 float* correct_dist,
2103 cpl_imagelist* outcube2=NULL;
2104 float* neg_dist=NULL;
2105 sinfo_msg(
"Finetuning, method=%s",method);
2107 if (strcmp(method,
"P")==0)
2109 outcube2 = sinfo_new_fine_tune_cube( cube, correct_dist, order ) ;
2110 if (outcube2 == NULL)
2116 else if (strcmp(method,
"F")==0)
2118 neg_dist=cpl_calloc(nslits,
sizeof(
float));
2119 for ( i = 0 ; i < nslits ; i++ )
2121 neg_dist[i] = -correct_dist[i] ;
2123 outcube2 = sinfo_new_fine_tune_cube_by_FFT( cube, neg_dist ) ;
2125 if ( outcube2 == NULL )
2131 else if (strcmp(method,
"S")==0)
2133 outcube2 = sinfo_new_fine_tune_cube_by_spline( cube, correct_dist ) ;
2134 if ( outcube2 == NULL )
2160 sinfo_band sinfo_get_associated_filter(
const char * f)
2162 if (!strcmp(f,
"J"))
return SINFO_BAND_J ;
2163 if (!strcmp(f,
"Js"))
return SINFO_BAND_JS ;
2164 if (!strcmp(f,
"Z"))
return SINFO_BAND_Z ;
2165 if (!strcmp(f,
"SZ"))
return SINFO_BAND_SZ ;
2166 if (!strcmp(f,
"SH"))
return SINFO_BAND_SH ;
2167 if (!strcmp(f,
"H"))
return SINFO_BAND_H ;
2168 if (!strcmp(f,
"Ks"))
return SINFO_BAND_KS ;
2169 if (!strcmp(f,
"K"))
return SINFO_BAND_K ;
2170 if (!strcmp(f,
"SK"))
return SINFO_BAND_SK ;
2171 if (!strcmp(f,
"L"))
return SINFO_BAND_L ;
2172 if (!strcmp(f,
"SL"))
return SINFO_BAND_SL ;
2173 if (!strcmp(f,
"M"))
return SINFO_BAND_M ;
2174 if (!strcmp(f,
"M_NB"))
return SINFO_BAND_M ;
2175 if (!strcmp(f,
"NB_1.06"))
return SINFO_BAND_J ;
2176 if (!strcmp(f,
"NB_1.08"))
return SINFO_BAND_J ;
2177 if (!strcmp(f,
"NB_1.19"))
return SINFO_BAND_J ;
2178 if (!strcmp(f,
"NB_1.21"))
return SINFO_BAND_J ;
2179 if (!strcmp(f,
"NB_1.26"))
return SINFO_BAND_J ;
2180 if (!strcmp(f,
"NB_1.28"))
return SINFO_BAND_J ;
2181 if (!strcmp(f,
"NB_1.64"))
return SINFO_BAND_H ;
2182 if (!strcmp(f,
"NB_1.71"))
return SINFO_BAND_H ;
2183 if (!strcmp(f,
"NB_2.07"))
return SINFO_BAND_KS ;
2184 if (!strcmp(f,
"NB_2.09"))
return SINFO_BAND_KS ;
2185 if (!strcmp(f,
"NB_2.13"))
return SINFO_BAND_KS ;
2186 if (!strcmp(f,
"NB_2.17"))
return SINFO_BAND_KS ;
2187 if (!strcmp(f,
"NB_2.19"))
return SINFO_BAND_KS ;
2188 if (!strcmp(f,
"NB_2.25"))
return SINFO_BAND_KS ;
2189 if (!strcmp(f,
"NB_2.29"))
return SINFO_BAND_KS ;
2190 if (!strcmp(f,
"NB_2.34"))
return SINFO_BAND_KS ;
2191 if (!strcmp(f,
"NB_3.21"))
return SINFO_BAND_L ;
2192 if (!strcmp(f,
"NB_3.28"))
return SINFO_BAND_L ;
2193 if (!strcmp(f,
"NB_3.80"))
return SINFO_BAND_L ;
2194 if (!strcmp(f,
"NB_4.07"))
return SINFO_BAND_L ;
2195 return SINFO_BAND_UNKNOWN ;
2208 sinfo_band sinfo_get_bbfilter(
const char * f)
2210 if (!strcmp(f,
"J"))
return SINFO_BAND_J ;
2211 if (!strcmp(f,
"J+Block"))
return SINFO_BAND_J ;
2212 if (!strcmp(f,
"Js"))
return SINFO_BAND_J ;
2213 if (!strcmp(f,
"Z"))
return SINFO_BAND_J ;
2214 if (!strcmp(f,
"SZ"))
return SINFO_BAND_J ;
2215 if (!strcmp(f,
"SH"))
return SINFO_BAND_H ;
2216 if (!strcmp(f,
"H"))
return SINFO_BAND_H ;
2217 if (!strcmp(f,
"Ks"))
return SINFO_BAND_KS ;
2218 if (!strcmp(f,
"K"))
return SINFO_BAND_K ;
2219 if (!strcmp(f,
"SK"))
return SINFO_BAND_K ;
2220 if (!strcmp(f,
"L"))
return SINFO_BAND_L ;
2221 if (!strcmp(f,
"SL"))
return SINFO_BAND_L ;
2222 if (!strcmp(f,
"M"))
return SINFO_BAND_M ;
2223 if (!strcmp(f,
"M_NB"))
return SINFO_BAND_M ;
2224 if (!strcmp(f,
"NB_1.06"))
return SINFO_BAND_J ;
2225 if (!strcmp(f,
"NB_1.08"))
return SINFO_BAND_J ;
2226 if (!strcmp(f,
"NB_1.19"))
return SINFO_BAND_J ;
2227 if (!strcmp(f,
"NB_1.21"))
return SINFO_BAND_J ;
2228 if (!strcmp(f,
"NB_1.26"))
return SINFO_BAND_J ;
2229 if (!strcmp(f,
"NB_1.28"))
return SINFO_BAND_J ;
2230 if (!strcmp(f,
"NB_1.64"))
return SINFO_BAND_H ;
2231 if (!strcmp(f,
"NB_1.71"))
return SINFO_BAND_H ;
2232 if (!strcmp(f,
"NB_2.07"))
return SINFO_BAND_KS ;
2233 if (!strcmp(f,
"NB_2.09"))
return SINFO_BAND_KS ;
2234 if (!strcmp(f,
"NB_2.13"))
return SINFO_BAND_KS ;
2235 if (!strcmp(f,
"NB_2.17"))
return SINFO_BAND_KS ;
2236 if (!strcmp(f,
"NB_2.19"))
return SINFO_BAND_KS ;
2237 if (!strcmp(f,
"NB_2.25"))
return SINFO_BAND_KS ;
2238 if (!strcmp(f,
"NB_2.29"))
return SINFO_BAND_KS ;
2239 if (!strcmp(f,
"NB_2.34"))
return SINFO_BAND_KS ;
2240 if (!strcmp(f,
"NB_3.21"))
return SINFO_BAND_L ;
2241 if (!strcmp(f,
"NB_3.28"))
return SINFO_BAND_L ;
2242 if (!strcmp(f,
"NB_3.80"))
return SINFO_BAND_L ;
2243 if (!strcmp(f,
"NB_4.07"))
return SINFO_BAND_L ;
2244 return SINFO_BAND_UNKNOWN ;
#define sinfo_msg_debug(...)
Print a debug message.
#define sinfo_msg_error(...)
Print an error message.
#define sinfo_msg_warning(...)
Print an warning message.