40 #include <uves_physmod_create_table.h>
42 #include <uves_physmod_utils.h>
43 #include <uves_utils_wrappers.h>
44 #include <uves_pfits.h>
46 #include <uves_error.h>
56 flames_get_trans(
const int plt_no,
66 double* physmod_shift_x,
67 double* physmod_shift_y,
127 const char *recipe_id,
128 const cpl_parameterlist* parameters,
129 cpl_table* line_refer,
130 const double physmod_shift_x,
131 const double physmod_shift_y,
143 double ECH_ANG_OFF=0;
145 double CCD_ANG_OFF=0;
160 double slit_length=0;
220 double uves_beta_ech=0;
221 double uves_beta_cd=0 ;
222 double uves_physmod_rcd=0;
223 double uves_physmod_rech=0;
224 double uves_physmod_x_off=0;
225 double uves_physmod_y_off=0;
232 double ech_ang_off=0;
234 double ccd_ang_off=0;
235 double physmod_off_x=0;
236 double physmod_off_y=0;
241 enum uves_arm_ident {UVES_ARM_UNDEF,UVES_ARM_BLUE,UVES_ARM_RED};
242 enum uves_arm_ident uves_arm_ident = UVES_ARM_UNDEF;
245 const char* ccd_id=
"";
246 const char* dpr_tech=
"";
252 check( uves_get_parameter(parameters, NULL, recipe_id,
253 "mbox_x", CPL_TYPE_INT, &MBOX_X ) ,
254 "Could not read parameter");
256 check( uves_get_parameter(parameters, NULL, recipe_id,
257 "mbox_y", CPL_TYPE_INT, &MBOX_Y ) ,
258 "Could not read parameter");
260 check( uves_get_parameter(parameters, NULL, recipe_id,
261 "trans_x", CPL_TYPE_DOUBLE, &TRANS_X ) ,
262 "Could not read parameter");
264 check( uves_get_parameter(parameters, NULL, recipe_id,
265 "trans_y", CPL_TYPE_DOUBLE, &TRANS_Y ) ,
266 "Could not read parameter");
275 if ((xtrans == 0.) && (ytrans == 0.)) {
280 if (chip == UVES_CHIP_REDU) {
286 check( uves_get_parameter(parameters, NULL, recipe_id,
287 "ech_angle_off", CPL_TYPE_DOUBLE, &ECH_ANG_OFF ) ,
288 "Could not read parameter");
290 check( uves_get_parameter(parameters, NULL, recipe_id,
291 "cd_angle_off", CPL_TYPE_DOUBLE, &CD_ANG_OFF ) ,
292 "Could not read parameter");
294 check( uves_get_parameter(parameters, NULL, recipe_id,
295 "ccd_rot_angle_off", CPL_TYPE_DOUBLE, &CCD_ANG_OFF ) ,
296 "Could not read parameter");
298 check( uves_get_parameter(parameters, NULL, recipe_id,
299 "compute_regression_sw", CPL_TYPE_BOOL, &CMP_REG_SW ) ,
300 "Could not read parameter");
309 "Could not read CCD ID from input header");
311 "Could not read DPR TECH from input header");
313 if(strstr(dpr_tech,
"MOS")!=NULL) {
318 if(strcmp(ccd_id,
"CCD-44b") == 0) {
360 "Could not read x binning factor from input header");
363 "Could not read x binning factor from input header");
366 "Could not read pressure from input header");
377 "Could not read slit width input header");
380 "Could not read slit length input header");
383 "Could not read central wavelength setting from input header");
386 "Could not read central CD ID setting from input header");
389 "Could not read camera's temperature from input header");
391 if (chip == UVES_CHIP_BLUE)
394 uves_arm_ident=UVES_ARM_BLUE;
400 uves_arm_ident=UVES_ARM_RED;
402 upper = (chip == UVES_CHIP_REDU);
407 if(strstr(cd_id,
"CD#1") != NULL) {
409 }
else if(strstr(cd_id,
"CD#2") != NULL) {
411 }
else if(strstr(cd_id,
"CD#3") != NULL) {
413 }
else if(strstr(cd_id,
"CD#4") != NULL) {
423 UVES_ARM(chip),UVES_ARMID(chip));
425 uves_msg(
"Detector: %s Binning: %1.1f, %1.1f pix/bin",
426 UVES_DETECTOR(chip),binx,biny);
427 uves_msg(
"Cross disperser ID, number: %s %d",cd_id,CDID);
428 uves_msg(
"Central wavelength: %4.1f nm",wcent);
429 uves_msg(
"Slit width: %3.1f (arcsecs)",slit_width);
430 uves_msg(
"Slit length: %3.1f (arcsecs)",slit_length);
431 uves_msg(
"Temperature: %3.1f C",temp_cam);
432 uves_msg(
"Air pressure: %4.1f mmHg/cm^2",pressure);
433 uves_msg(
"Humidity: %2.1f %%",humidity);
439 ncol=cpl_table_get_ncol(line_refer);
441 aRowNumber = cpl_table_get_nrow(line_refer);
443 uves_msg_debug(
"Opened table %s ncol=%d nrow=%d",
"line_ref_table" ,ncol,aRowNumber);
445 uves_air_config(pressure/1.33322, temp_cam, humidity);
446 uves_msg(
"Air Index = %g",uves_air_index(wcent));
447 if(strstr(dpr_tech,
"MOS")!=NULL) {
449 flames_get_trans(plate_no,chip,wcent,&TRANS_X,&TRANS_Y);
453 xtrans=physmod_shift_x;
454 ytrans=physmod_shift_y;
461 uves_msg(
"CHECK: xtrans=%f ytrans=%f,ccdrot[0]=%f,ccdrot[1]=%f",
462 xtrans,ytrans,ccd_rot[0],ccd_rot[1]);
466 if(chip != UVES_CHIP_BLUE) {
483 ECH_ANG_OFF +=ech_ang_off;
484 CD_ANG_OFF +=cd_ang_off;
485 CCD_ANG_OFF +=ccd_ang_off;
486 xtrans+=physmod_off_x;
487 ytrans+=physmod_off_y;
492 uves_msg(
"CHECK: xtrans=%f ytrans=%f,ccdrot[0]=%f,ccdrot[1]=%f",
493 xtrans,ytrans,ccd_rot[0],ccd_rot[1]);
494 uves_msg(
"CHECK: ECH_ANG_OFF=%f CD_ANG_OFF=%f,CCD_ANG_OFF=%f",
495 ECH_ANG_OFF,CD_ANG_OFF,CCD_ANG_OFF);
500 uves_msg(
"Shift in x = %6.3f pix, shift in y = %6.3f pix",TRANS_X,TRANS_Y);
501 uves_msg(
"External Shift in x = %6.3f pix, shift in y = %6.3f pix",
502 physmod_shift_x,physmod_shift_y);
503 uves_msg(
"Offset angle of echelle, CD, CCD rotation (deg): "
504 "%4.3f, %4.3f, %4.3f",ECH_ANG_OFF,CD_ANG_OFF,CCD_ANG_OFF);
506 uves_set_ccd_rot(ccd_rot,CCD_ANG_OFF, CCD_ANG_OFF);
507 uves_physmod_set_incidence(ECH_ANG_OFF, ECH_ANG_OFF, CD_ANG_OFF, CD_ANG_OFF);
510 offset_x[0],offset_x[1],offset_x[2],offset_x[3],offset_x[4],offset_x[5]);
513 offset_y[0],offset_y[1],offset_y[2],offset_y[3],offset_y[4],offset_y[5]);
515 uves_msg(
"Central wavelength: %4.2f nm",wcent);
523 uves_cfg_indx = uves_config_cpl_new(uves_arm_ident,upper,CDID,wcent,binx,biny);
526 uves_physmod_set_offset(offset_x[uves_cfg_indx-1],offset_y[uves_cfg_indx-1],
527 uves_physmod_x_off,uves_physmod_y_off);
539 *mod_tbl= cpl_table_new(3*aRowNumber);
541 uves_msg(
"table created: %s ncol=%d, nrow=%d",
"mod_tbl",10,3*aRowNumber);
542 cpl_table_new_column(*mod_tbl,
"WAVE",CPL_TYPE_DOUBLE);
543 cpl_table_new_column(*mod_tbl,
"ORDER",CPL_TYPE_INT);
544 cpl_table_new_column(*mod_tbl,
"XMOD",CPL_TYPE_DOUBLE);
545 cpl_table_new_column(*mod_tbl,
"YMOD",CPL_TYPE_DOUBLE);
546 cpl_table_new_column(*mod_tbl,
"BIN_SIZE",CPL_TYPE_DOUBLE);
547 cpl_table_new_column(*mod_tbl,
"LINEWIDPX",CPL_TYPE_DOUBLE);
548 cpl_table_new_column(*mod_tbl,
"LINEWIDTH",CPL_TYPE_DOUBLE);
549 cpl_table_new_column(*mod_tbl,
"RESOL",CPL_TYPE_DOUBLE);
550 cpl_table_new_column(*mod_tbl,
"LINELENPX",CPL_TYPE_DOUBLE);
551 cpl_table_new_column(*mod_tbl,
"BLAZE",CPL_TYPE_DOUBLE);
553 uves_ccd_size(&xpix,&ypix);
557 for (i=0; i<aRowNumber; i++) {
565 dblwav=cpl_table_get_double(line_refer,
"Wave",i,&status);
569 order = uves_physmod_find_order(dblwav);
577 for (mm=0; mm<3; mm++){
581 uves_physmod_lambda_order2beta(dblwav, order, &uves_beta_ech, &uves_beta_cd, &fc);
584 uves_beta_ech, uves_beta_cd, fc);
586 uves_beta2xy(uves_beta_cd, uves_beta_ech, fc, &xmod, &ymod);
589 uves_physmod_photo_beta(dblwav, uves_beta_ech, uves_beta_cd,
590 &uves_physmod_rech, &uves_physmod_rcd, &blaze);
592 uves_msg_debug(
"uves_physmod_rech %f, uves_physmod_rcd %f, blaze %f",
593 uves_physmod_rech, uves_physmod_rcd, blaze);
597 uves_msg_debug(
"Before translation: xmod %f, ymod %f",xmod, ymod);
602 xtrans, ytrans, xmod, ymod);
609 if (xmod > 0 && xmod < xpix && ymod > 0 && ymod < ypix) {
612 uves_physmod_pixscl(dblwav, order, uves_physmod_rech, uves_physmod_rcd,
613 binx, biny, fc, slit_width, slit_length,
614 &binsize, &pixscale, &pixscalCD, &linewidpx,
615 &linelenpx, &linewidth, &resol);
618 binsize,pixscale,pixscalCD);
619 uves_msg_debug(
"linewidpx %f, linelenpx %f, linewidth %f, resol %f",
620 linewidpx,linelenpx,linewidth,resol);
624 uves_physmod_xy_regres(xmod,ymod,&xreg,&yreg);
632 i,dblwav,order,xmod,ymod);
637 uves_msg_debug(
"Fill tab: linewidpx=%f linewidth=%f resol=%f linelenpx=%f blaze=%f",
638 linewidpx,linewidth,resol,linelenpx,blaze);
641 cpl_table_set_double(*mod_tbl,
"WAVE" ,imod, dblwav);
642 cpl_table_set_int (*mod_tbl,
"ORDER" ,imod, order);
643 cpl_table_set_double(*mod_tbl,
"XMOD" ,imod, xreg);
644 cpl_table_set_double(*mod_tbl,
"YMOD" ,imod, yreg);
645 cpl_table_set_double(*mod_tbl,
"BIN_SIZE" ,imod, binsize);
646 cpl_table_set_double(*mod_tbl,
"LINEWIDPX",imod, linewidpx);
647 cpl_table_set_double(*mod_tbl,
"LINEWIDTH",imod, linewidth);
648 cpl_table_set_double(*mod_tbl,
"RESOL" ,imod, resol);
649 cpl_table_set_double(*mod_tbl,
"LINELENPX",imod, linelenpx);
650 cpl_table_set_double(*mod_tbl,
"BLAZE" ,imod, blaze);
658 cpl_table_duplicate_column(*mod_tbl,
"IDENT",*mod_tbl,
"WAVE");
659 cpl_table_multiply_scalar(*mod_tbl,
"IDENT",10.);
660 cpl_table_duplicate_column(*mod_tbl,
"XSTART",*mod_tbl,
"XMOD");
661 cpl_table_add_scalar(*mod_tbl,
"XSTART",-mbox_x/2.);
662 cpl_table_duplicate_column(*mod_tbl,
"YSTART",*mod_tbl,
"YMOD");
663 cpl_table_add_scalar(*mod_tbl,
"YSTART",-mbox_y/2.);
664 cpl_table_duplicate_column(*mod_tbl,
"XEND",*mod_tbl,
"XMOD");
665 cpl_table_add_scalar(*mod_tbl,
"XEND",mbox_x/2.);
666 cpl_table_duplicate_column(*mod_tbl,
"YEND",*mod_tbl,
"YMOD");
667 cpl_table_add_scalar(*mod_tbl,
"YEND",mbox_y/2.);
674 uves_msg(
"Predicted number of lines: %d",imod);
678 uves_msg(
"Determine the Free Spectral Range");
680 dxpix = (double) xpix;
681 dypix = (double) ypix;
689 uves_physmod_lambda_order_model(&lmax,&m_min,1.0,dypix);
690 uves_physmod_lambda_order_model(&lmin,&m_max,dxpix,1.0);
692 uves_physmod_lambda_order_model(&lmax,&m_min,dxpix,dypix);
693 uves_physmod_lambda_order_model(&lmin,&m_max,1.0,1.0);
701 *fsr_tbl=cpl_table_new(m_max-m_min+1);
703 uves_msg(
"FSR tbl created: %s. No of columns: %d, No of rows: %d",
"free_spectral_range",
705 cpl_table_new_column(*fsr_tbl,
"ORDER",CPL_TYPE_INT);
706 cpl_table_new_column(*fsr_tbl,
"WVCENTCOL",CPL_TYPE_DOUBLE);
707 cpl_table_new_column(*fsr_tbl,
"YCENTCOL",CPL_TYPE_DOUBLE);
708 cpl_table_new_column(*fsr_tbl,
"START",CPL_TYPE_DOUBLE);
709 cpl_table_new_column(*fsr_tbl,
"END",CPL_TYPE_DOUBLE);
710 cpl_table_new_column(*fsr_tbl,
"WAVECENT",CPL_TYPE_DOUBLE);
711 cpl_table_new_column(*fsr_tbl,
"YCENT",CPL_TYPE_DOUBLE);
712 cpl_table_new_column(*fsr_tbl,
"FSRMIN",CPL_TYPE_DOUBLE);
713 cpl_table_new_column(*fsr_tbl,
"FSRMAX",CPL_TYPE_DOUBLE);
714 cpl_table_new_column(*fsr_tbl,
"XFSR_MIN",CPL_TYPE_DOUBLE);
715 cpl_table_new_column(*fsr_tbl,
"XFSR_MAX",CPL_TYPE_DOUBLE);
716 cpl_table_new_column(*fsr_tbl,
"YFSR_MIN",CPL_TYPE_DOUBLE);
717 cpl_table_new_column(*fsr_tbl,
"YFSR_MAX",CPL_TYPE_DOUBLE);
718 cpl_table_new_column(*fsr_tbl,
"PIXSCALE",CPL_TYPE_DOUBLE);
719 cpl_table_new_column(*fsr_tbl,
"PIXSCALCD",CPL_TYPE_DOUBLE);
720 cpl_table_new_column(*fsr_tbl,
"BIN_SIZE",CPL_TYPE_DOUBLE);
721 cpl_table_new_column(*fsr_tbl,
"LINEWIDPX",CPL_TYPE_DOUBLE);
722 cpl_table_new_column(*fsr_tbl,
"LINEWIDTH",CPL_TYPE_DOUBLE);
723 cpl_table_new_column(*fsr_tbl,
"RESOL",CPL_TYPE_DOUBLE);
724 cpl_table_new_column(*fsr_tbl,
"LINELENPX",CPL_TYPE_DOUBLE);
728 uves_msg_debug(
"m, waveCentcol, Start, End, yCent, FSRmin, FSRmax, bin (mA)");
730 for (m=m_max; m>=m_min; m--) {
732 uves_physmod_find_FSR(m,&l, &fsr_min, &fsr_max);
734 uves_physmod_xy_model(l,m,&x,&y);
740 uves_physmod_xy_model(fsr_min,m,&xfsr_min,&yfsr_min);
746 uves_physmod_xy_model(fsr_max,m,&xfsr_max,&yfsr_max);
753 uves_physmod_lambda_order2beta(l,m, &uves_beta_ech, &uves_beta_cd, &fc);
754 uves_physmod_photo_beta(l, uves_beta_ech, uves_beta_cd,
755 &uves_physmod_rech, &uves_physmod_rcd, &blaze);
760 uves_physmod_pixscl(l, m, uves_physmod_rech, uves_physmod_rcd,
761 binx, biny, fc, slit_width, slit_length,
762 &dl, &pixscale, &pixscalCD,
763 &linewidpx, &linelenpx, &linewidth, &resol);
771 uves_physmod_lambda_order_model(&lcent,&m,dxpix/2,y);
772 uves_physmod_xy_model(lcent,m,&xr,&yr);
774 uves_physmod_lambda_order_model(&lmax,&mmax,dxpix,y);
775 uves_physmod_lambda_order_model(&lmin,&mmin,1.0,y);
779 uves_msg_debug(
"m=%d, waveCent (nm)=%f, Start=%f, End=%f",m,l,lmin,lmax);
780 uves_msg_debug(
"yCent=%f,FSRmin=%f,FSRmax=%f,bin (mA)=%f",y,fsr_min,fsr_max,dl);
783 uves_msg_debug(
"%d %f %f %f %f %f %f %f",m,lcent,lmin,lmax,yr,fsr_min,fsr_max,dl);
786 uves_msg_debug(
"pixel-scale = %f, anamorphic corrections = %f, %f",
787 pixscale, uves_physmod_rech, uves_physmod_rcd);
790 cpl_table_set_int(*fsr_tbl,
"ORDER",imod,m);
791 cpl_table_set_double(*fsr_tbl,
"WVCENTCOL",imod,lcent);
792 cpl_table_set_double(*fsr_tbl,
"YCENTCOL",imod,yr);
793 cpl_table_set_double(*fsr_tbl,
"START",imod,lmin);
794 cpl_table_set_double(*fsr_tbl,
"END",imod,lmax);
795 cpl_table_set_double(*fsr_tbl,
"WAVECENT",imod,l);
796 cpl_table_set_double(*fsr_tbl,
"YCENT",imod,y);
797 cpl_table_set_double(*fsr_tbl,
"FSRMIN",imod,fsr_min);
798 cpl_table_set_double(*fsr_tbl,
"FSRMAX",imod,fsr_max);
799 cpl_table_set_double(*fsr_tbl,
"XFSR_MIN",imod,xfsr_min);
800 cpl_table_set_double(*fsr_tbl,
"XFSR_MAX",imod,xfsr_max);
801 cpl_table_set_double(*fsr_tbl,
"YFSR_MIN",imod,yfsr_min);
802 cpl_table_set_double(*fsr_tbl,
"YFSR_MAX",imod,yfsr_max);
803 cpl_table_set_double(*fsr_tbl,
"PIXSCALE",imod,pixscale);
804 cpl_table_set_double(*fsr_tbl,
"PIXSCALCD",imod,pixscalCD);
805 cpl_table_set_double(*fsr_tbl,
"BIN_SIZE",imod,dl);
806 cpl_table_set_double(*fsr_tbl,
"LINEWIDPX",imod,linewidpx);
807 cpl_table_set_double(*fsr_tbl,
"LINEWIDTH",imod,linewidth);
808 cpl_table_set_double(*fsr_tbl,
"RESOL",imod,resol);
809 cpl_table_set_double(*fsr_tbl,
"LINELENPX",imod,linelenpx);
816 cpl_table_erase_invalid_rows(*mod_tbl);
829 flames_get_trans(
const int plt_no,
838 if( chip==UVES_CHIP_REDL) {
842 }
else if (wlen == 580) {
845 }
else if (wlen == 860) {
853 }
else if (wlen == 580) {
856 }
else if (wlen == 860) {
862 }
else if (plt_no==2) {
863 if( chip==UVES_CHIP_REDL) {
867 }
else if (wlen == 580) {
870 }
else if (wlen == 860) {
878 }
else if (wlen == 580) {
881 }
else if (wlen == 860) {
888 uves_msg_warning(
"plt_no=%d chip=%d Wlen %g is not standard setting setting defaults",plt_no,chip,wlen);
928 uves_msg(
"wavec=%d,chip=%d binx=%d biny=%d",wavec,chip,binx,biny);
930 if(binx==1 && biny == 1) {
934 if(chip==UVES_CHIP_REDL) {
1004 *ccd_ang_off=-0.338;
1011 *ccd_ang_off=-0.338;
1029 *ccd_ang_off=-0.338;
1037 *ccd_ang_off=-0.338;
1044 *ccd_ang_off=-0.338;
1051 *ccd_ang_off=-0.338;
1077 *ccd_ang_off=-0.338;
1094 *ccd_ang_off=-0.161;
1232 }
else if(binx==2 && biny == 2) {
1236 if(chip==UVES_CHIP_REDL) {
1251 *ccd_ang_off=-0.338;
1281 *ccd_ang_off=-0.321;
1288 *ccd_ang_off=-0.315;
1445 *ccd_ang_off=-0.161;
1589 }
else if(binx==2 && biny == 1) {
1593 if(chip==UVES_CHIP_REDL) {
1698 }
else if(binx==3 && biny == 2) {
1702 if(chip==UVES_CHIP_REDL) {
1808 uves_msg_warning(
"You may have to compute proper CCD rotation angle and X, Y offsets");
1813 uves_msg(
"NEW CCD Physical Model shifts trans=%f,%f rot=%f,%f,%f",
1814 *trans_x,*trans_y,*ech_ang_off,*cd_ang_off,*ccd_ang_off);
1837 enum uves_chip chip,
1840 double* ech_ang_off,
1842 double* ccd_ang_off)
1850 uves_msg_warning(
"You may have to compute proper CCD rotation angle and X, Y offsets");
1852 uves_msg(
"plate_no=%d,wavec=%d,chip=%d",plate_no,wavec,chip);
1857 if(chip==UVES_CHIP_REDL) {
1863 *ccd_ang_off=-0.338;
1864 uves_msg(
"case FIBRE 520 REDL plt1");
1870 *ccd_ang_off=-0.321;
1871 uves_msg(
"case FIBRE 580 REDL plt1");
1878 uves_msg(
"case FIBRE 860 REDL plt1");
1889 *ccd_ang_off=-0.131;
1890 uves_msg(
"case FIBRE 520 REDU plt1");
1897 uves_msg(
"case FIBRE 580 REDU plt1");
1904 uves_msg(
"case FIBRE 860 REDU plt1");
1913 if(chip==UVES_CHIP_REDL) {
1919 *ccd_ang_off=-0.338;
1920 uves_msg(
"case FIBER 520 REDL plt2");
1927 uves_msg(
"case FIBER 580 REDL plt2");
1934 uves_msg(
"case FIBER 860 REDL plt2");
1945 *ccd_ang_off=-0.131;
1946 uves_msg(
"case FIBER 520 REDU plt2");
1953 uves_msg(
"case FIBER 580 REDU plt2");
1960 uves_msg(
"case FIBER 860 REDU plt2");
1974 uves_msg(
"NEW CCD Physical Model shifts trans=%f,%f rot=%f,%f,%f",
1975 *trans_x,*trans_y,*ech_ang_off,*cd_ang_off,*ccd_ang_off);
const char * uves_pfits_get_dpr_tech(const uves_propertylist *plist)
find out the data tech as defined by the DataFlow
double uves_pfits_get_tempcam(const uves_propertylist *plist, enum uves_chip chip)
find out the pressure value
#define uves_msg_warning(...)
Print an warning message.
int uves_flames_pfits_get_plateid(const uves_propertylist *raw_header)
read the plate id
static int flames_get_physmod_offset(const int plate_no, const int wavec, enum uves_chip chip, double *physmod_shift_x, double *physmod_shift_y, double *rot_1, double *rot_2, double *rot_3)
Get the physical model shifts in FIBER mode.
int uves_physmod_create_table(const uves_propertylist *raw_header, enum uves_chip chip, bool flames, const char *recipe_id, const cpl_parameterlist *parameters, cpl_table *line_refer, const double physmod_shift_x, const double physmod_shift_y, cpl_table **mod_tbl, cpl_table **fsr_tbl)
Generates two tables with results of the UVES physical model.
double uves_pfits_get_gratwlen(const uves_propertylist *plist, enum uves_chip chip)
find out the central wavelength
double uves_pfits_get_slitwidth(const uves_propertylist *plist, enum uves_chip chip)
find out the slit width
static int uves_get_physmod_offset(const int wavec, enum uves_chip chip, const int binx, const int biny, double *trans_x, double *trans_y, double *rot_1, double *rot_2, double *rot_3)
Get the physical model offsets in ECHELLE mode.
int uves_pfits_get_binx(const uves_propertylist *plist)
Find out the x binning factor.
#define uves_msg(...)
Print a message on 'info' or 'debug' level.
int uves_pfits_get_biny(const uves_propertylist *plist)
Find out the y binning factor.
bool uves_ccd_is_new(const uves_propertylist *plist)
Find out if CCD header is new.
double uves_pfits_get_pressure(const uves_propertylist *plist)
find out the pressure value
#define uves_msg_debug(...)
Print a debug message.
const char * uves_chip_tostring_upper(enum uves_chip chip)
Convert to string.
const char * uves_pfits_get_gratid(const uves_propertylist *plist, enum uves_chip chip)
find out the grating ID value
const char * uves_pfits_get_chipid(const uves_propertylist *plist, enum uves_chip chip)
Find out the chip ID.
double uves_pfits_get_slitlength(const uves_propertylist *plist, enum uves_chip chip)
find out the slit length