36 #define visir_pfits_get_int(KEY) irplib_pfits_get_int(self, KEY)
37 #define visir_pfits_get_string(KEY) irplib_pfits_get_string(self, KEY)
49 #include "irplib_pfits.h"
51 #include "visir_utils.h"
52 #include "visir_pfits.h"
59 static const char * visir_pfits_get_slitname(
const cpl_propertylist *);
60 static double visir_pfits_get_slitwidth_raw(
const cpl_propertylist *);
77 visir_pfits_get_double(
const cpl_propertylist *
self,
const char *key) {
78 if (cpl_propertylist_get_type(
self, key) == CPL_TYPE_INT) {
79 return irplib_pfits_get_int(
self, key);
81 return irplib_pfits_get_double(
self, key);
93 return visir_pfits_get_double(
self,
"ESO TEL AIRM START");
105 return visir_pfits_get_double(
self,
"ESO TEL AIRM END");
117 return visir_pfits_get_double(
self,
"ESO TEL TARG OFFSETALPHA");
129 return visir_pfits_get_string(
"ARCFILE");
141 return visir_pfits_get_string(VISIR_PFITS_STRING_CHOPNOD_DIR);
154 if (cpl_propertylist_has(
self, VISIR_PFITS_DOUBLE_CHOP_THROW)) {
155 return visir_pfits_get_double(
self, VISIR_PFITS_DOUBLE_CHOP_THROW);
158 return visir_pfits_get_double(
self,
"ESO DET CHOP THROW");
172 if (cpl_propertylist_has(
self, VISIR_PFITS_DOUBLE_CHOP_FREQ)) {
173 return visir_pfits_get_double(
self, VISIR_PFITS_DOUBLE_CHOP_FREQ);
176 return visir_pfits_get_double(
self,
"ESO DET CHOP FREQ");
189 if (cpl_propertylist_has(
self, VISIR_PFITS_BOOL_CHOP_STATUS)) {
190 return cpl_propertylist_get_bool(
self, VISIR_PFITS_BOOL_CHOP_STATUS);
193 return cpl_propertylist_get_bool(
self,
"ESO DET CHOP ST");
207 if (!cpl_propertylist_has(
self, VISIR_PFITS_DOUBLE_CHOP_POSANG)) {
210 return CPL_MATH_RAD_DEG *
211 cpl_propertylist_get_double(
self, VISIR_PFITS_DOUBLE_CHOP_POSANG);
226 return pscale > 0.0 ?
throw / pscale : 0.0;
239 return visir_pfits_get_int(
"ESO DET CHOP NCYCLES");
251 return visir_pfits_get_double(
self,
"ESO SEQ CUMOFFSETX");
263 return visir_pfits_get_double(
self,
"ESO SEQ CUMOFFSETY");
275 return visir_pfits_get_string(
"DATE-OBS");
287 return visir_pfits_get_double(
self,
"ESO TEL TARG OFFSETDELTA");
299 return visir_pfits_get_double(
self,
"DEC");
311 if (cpl_propertylist_has(
self, VISIR_PFITS_DOUBLE_SEQ1_DIT))
312 return visir_pfits_get_double(
self, VISIR_PFITS_DOUBLE_SEQ1_DIT);
313 return visir_pfits_get_double(
self, VISIR_PFITS_DOUBLE_DIT);
325 if (cpl_propertylist_has(
self, VISIR_PFITS_INT_NAVRG))
326 return visir_pfits_get_int(VISIR_PFITS_INT_NAVRG);
339 return visir_pfits_get_int(
"ESO TPL EXPNO");
354 static const char * spec[] = {
364 if (val == NULL)
return NULL ;
367 if (!strcmp(val,
"IMG" ))
368 return visir_pfits_get_string(
"ESO INS FILT1 NAME");
370 if (!strcmp(val,
"SPC" ))
371 return visir_pfits_get_string(
"ESO INS FILT2 NAME");
373 if (!strcmp(val,
"SPCIMG")) {
374 const char * filt = visir_pfits_get_string(
"ESO INS FILT2 NAME");
375 for (
size_t i = 0; i < 6; i++) {
376 if (strncmp(spec[i], filt, strlen(spec[i]) - 5) == 0) {
383 cpl_ensure(0, CPL_ERROR_UNSUPPORTED_MODE, NULL);
396 return visir_pfits_get_double(
self,
"ESO TEL FOCU LEN");
408 return visir_pfits_get_double(
self,
"EXPTIME");
420 return visir_pfits_get_string(
"ESO DET FRAM TYPE");
432 return visir_pfits_get_string(
"ESO INS GRAT1 NAME");
444 return visir_pfits_get_string(
"ESO INS MODE");
456 return visir_pfits_get_string(
"INSTRUME");
468 return visir_pfits_get_double(
self,
"MJD-OBS");
480 return visir_pfits_get_string(
"ESO DET MODE NAME");
492 return visir_pfits_get_double(
self,
"ESO INS MONOC1 POS");
504 return visir_pfits_get_int(
"ESO DET NDIT");
515 if (cpl_propertylist_has(
self,
"ZNAXIS1"))
516 return visir_pfits_get_int(
"ZNAXIS1");
518 return visir_pfits_get_int(
"NAXIS1");
530 if (cpl_propertylist_has(
self,
"ZNAXIS2"))
531 return visir_pfits_get_int(
"ZNAXIS2");
533 return visir_pfits_get_int(
"NAXIS2");
545 if (cpl_propertylist_has(
self,
"ZNAXIS3"))
546 return visir_pfits_get_int(
"ZNAXIS3");
548 return visir_pfits_get_int(
"NAXIS3");
560 if (cpl_propertylist_has(
self,
"ESO DET WIN NX")) {;
561 return visir_pfits_get_int(
"ESO DET WIN NX");
563 else if (cpl_propertylist_has(
self,
"ESO DET1 WIN NX")) {;
564 return visir_pfits_get_int(
"ESO DET1 WIN NX");
566 else if (cpl_propertylist_has(
self,
"ESO DET ACQ1 WIN NX")) {;
567 return visir_pfits_get_int(
"ESO DET ACQ1 WIN NX");
581 if (cpl_propertylist_has(
self,
"ESO DET WIN NY")) {;
582 return visir_pfits_get_int(
"ESO DET WIN NY");
584 else if (cpl_propertylist_has(
self,
"ESO DET1 WIN NY")) {;
585 return visir_pfits_get_int(
"ESO DET1 WIN NY");
587 else if (cpl_propertylist_has(
self,
"ESO DET ACQ1 WIN NY")) {;
588 return visir_pfits_get_int(
"ESO DET ACQ1 WIN NY");
602 if (cpl_propertylist_has(
self,
"ESO DET WIN STRX")) {;
603 return visir_pfits_get_int(
"ESO DET WIN STRX");
605 else if (cpl_propertylist_has(
self,
"ESO DET1 WIN STRX")) {;
606 return visir_pfits_get_int(
"ESO DET1 WIN STRX");
608 else if (cpl_propertylist_has(
self,
"ESO DET ACQ1 WIN STRX")) {;
609 return visir_pfits_get_int(
"ESO DET ACQ1 WIN STRX");
623 if (cpl_propertylist_has(
self,
"ESO DET WIN STRY")) {;
624 return visir_pfits_get_int(
"ESO DET WIN STRY");
626 else if (cpl_propertylist_has(
self,
"ESO DET1 WIN STRY")) {;
627 return visir_pfits_get_int(
"ESO DET1 WIN STRY");
629 else if (cpl_propertylist_has(
self,
"ESO DET ACQ1 WIN STRY")) {;
630 return visir_pfits_get_int(
"ESO DET ACQ1 WIN STRY");
644 return visir_pfits_get_int(
"ESO TPL NEXP");
656 return visir_pfits_get_int(
"ESO OBS ID");
668 return visir_pfits_get_string(
"ESO SEQ NODPOS");
680 const char * sscale = visir_pfits_get_string(VISIR_PFITS_STRING_PIXSCALE);
681 if (sscale && strlen(sscale) > 0)
696 if (cpl_propertylist_has(
self,
"ESO DET CHIP1 PXSPACE")) {
697 return visir_pfits_get_double(
self,
"ESO DET CHIP1 PXSPACE");
699 return visir_pfits_get_double(
self,
"ESO DET CHIP PXSPACE");
711 return visir_pfits_get_double(
self,
"RA");
723 const char * slitname = visir_pfits_get_slitname(
self);
724 double slitwidth = visir_pfits_get_slitwidth_raw(
self);
727 if (!cpl_error_get_code()) {
729 static const char * slit_name[] = {
"CU_0.12",
"CU_0.14",
"CU_0.16",
730 "CU_0.20",
"CU_0.25",
"CU_0.30",
731 "CU_0.40",
"CU_0.50",
"CU_0.60",
732 "CU_0.70",
"CU_0.80",
"CU_1.00",
733 "CU_1.20",
"CU_1.60",
"ST_0.14",
734 "ST_0.16",
"ST_0.20",
"ST_0.30",
735 "ST_0.40",
"ST_0.50",
"ST_0.60"};
737 static double slit_width[] = {0.12, 0.14, 0.16,
745 static const int slit_nums = (int)(
sizeof(slit_width)/
sizeof(double));
749 for (i=0; i < slit_nums; i++)
750 if (strstr(slitname, slit_name[i]))
break;
752 if (i < slit_nums && fabs(slit_width[i] - slitwidth) < 0.001) {
758 cpl_msg_warning(cpl_func,
"The Width of slit %s is written in the "
759 "FITS card in units mm. Converting to ArcSecs: "
760 "%g => %g", slitname, slitwidth, slitwidth * 2.5);
777 return visir_pfits_get_string(
"ESO OBS TARG NAME");
789 return visir_pfits_get_string(
"ESO INS RESOL");
801 return visir_pfits_get_double(
self,
"ESO TEL TH M1 TEMP");
813 return visir_pfits_get_double(
self,
"ESO DET VOLT1 DCTA9");
825 return visir_pfits_get_double(
self,
"ESO DET VOLT1 DCTB9");
837 return visir_pfits_get_double(
self,
"ESO DET VOLT2 DCTA9");
849 return visir_pfits_get_double(
self,
"ESO DET VOLT2 DCTB9");
861 if (cpl_propertylist_has(
self, VISIR_PFITS_DOUBLE_PWLEN)) {
862 return visir_pfits_get_double(
self, VISIR_PFITS_DOUBLE_PWLEN);
864 return visir_pfits_get_double(
self, VISIR_PFITS_DOUBLE_WLEN);
880 if (cpl_propertylist_has(
self,
"ESO DRS IMGWGT"))
881 imgwgt = cpl_propertylist_get_float(
self,
"ESO DRS IMGWGT");
898 const cpl_boolean chop_on =
899 cpl_propertylist_get_bool(
self, VISIR_PFITS_BOOL_CHOP_STATUS);
903 return chop_on ? 4 : 2;
916 static double visir_pfits_get_slitwidth_raw(
const cpl_propertylist *
self)
918 return visir_pfits_get_double(
self,
"ESO INS SLIT1 WID");
928 static const char * visir_pfits_get_slitname(
const cpl_propertylist *
self)
930 return visir_pfits_get_string(
"ESO INS SLIT1 NAME");
int visir_pfits_get_expno(const cpl_propertylist *self)
The number of the current exposition.
double visir_pfits_get_cumoffsetx(const cpl_propertylist *self)
The cumulative offset in X.
int visir_pfits_get_naxis2(const cpl_propertylist *self)
The NAXIS2 key.
double visir_pfits_get_airmass_end(const cpl_propertylist *self)
The airmass end.
int visir_pfits_get_win_ny(const cpl_propertylist *self)
The WIN NY key.
double visir_pfits_get_dec(const cpl_propertylist *self)
The DEC.
int visir_pfits_get_obs_id(const cpl_propertylist *self)
The OBS ID.
double visir_pfits_get_volt1dcta9(const cpl_propertylist *self)
The VOLT1.DCTA9.
double visir_pfits_get_volt1dctb9(const cpl_propertylist *self)
The VOLT1.DCTB9.
double visir_pfits_get_chop_pthrow(const cpl_propertylist *self)
The chopping throw in pixels.
const char * visir_pfits_get_mode(const cpl_propertylist *self)
The mode name.
const char * visir_pfits_get_arcfile(const cpl_propertylist *self)
The arcfile.
const char * visir_pfits_get_date_obs(const cpl_propertylist *self)
The date of observation.
double visir_pfits_get_volt2dcta9(const cpl_propertylist *self)
The VOLT2.DCTA9.
int visir_pfits_get_naxis3(const cpl_propertylist *self)
The NAXIS3 key.
double visir_pfits_get_airmass_start(const cpl_propertylist *self)
The airmass start.
double visir_pfits_get_slitwidth(const cpl_propertylist *self)
The slit width in Arcseconds.
int visir_pfits_get_navrg(const cpl_propertylist *self)
The NAVRG.
const char * visir_pfits_get_resol(const cpl_propertylist *self)
The spectral resolution.
int visir_pfits_get_start_x(const cpl_propertylist *self)
The WIN STRX key.
int visir_pfits_get_naxis1(const cpl_propertylist *self)
The NAXIS1 key.
int visir_pfits_get_numbexp(const cpl_propertylist *self)
The number of exposures.
const char * visir_pfits_get_starname(const cpl_propertylist *self)
The std star name.
const char * visir_pfits_get_filter(const cpl_propertylist *self)
The filter.
const char * visir_pfits_get_frame_type(const cpl_propertylist *self)
The frame type.
const char * visir_pfits_get_grat1_name(const cpl_propertylist *self)
The name of grating 1.
double visir_pfits_get_focus(const cpl_propertylist *self)
The focus.
int visir_pfits_get_chop_ncycles(const cpl_propertylist *self)
The number of chopping cycles.
double visir_pfits_get_exptime(const cpl_propertylist *self)
The exposure time.
double visir_pfits_get_chop_posang(const cpl_propertylist *self)
The chopping position angle in rad.
int visir_pfits_get_win_nx(const cpl_propertylist *self)
The WIN NX key.
int visir_pfits_get_nbeams(const cpl_propertylist *self)
The number of input beams.
int visir_pfits_get_ndit(const cpl_propertylist *self)
The NDIT keyword.
double visir_pfits_get_cumoffsety(const cpl_propertylist *self)
The cumulative offset in Y.
double visir_pfits_get_volt2dctb9(const cpl_propertylist *self)
The VOLT2.DCTB9.
double visir_pfits_get_chop_freq(const cpl_propertylist *self)
The chopping frequency.
double visir_pfits_get_pixspace(const cpl_propertylist *self)
The pixel spacing.
double visir_pfits_get_chop_throw(const cpl_propertylist *self)
The chopping throw.
const char * visir_pfits_get_nodpos(const cpl_propertylist *self)
The nodding position.
const char * visir_pfits_get_insmode(const cpl_propertylist *self)
The mode.
double visir_pfits_get_img_weight(const cpl_propertylist *self)
The relative weight of the image compared to the other images.
double visir_pfits_get_wlen(const cpl_propertylist *self)
The central wavelength.
double visir_pfits_get_monoc_pos(const cpl_propertylist *self)
The INS.MONOC1.POS.
double visir_pfits_get_dit(const cpl_propertylist *self)
The DIT.
double visir_pfits_get_pixscale(const cpl_propertylist *self)
The pixel scale.
double visir_pfits_get_chop_stat(const cpl_propertylist *self)
The chopping status.
const char * visir_pfits_get_chopnod_dir(const cpl_propertylist *self)
The chopping direction.
double visir_pfits_get_delta(const cpl_propertylist *self)
The DELTA keyword in a VISIR header.
int visir_pfits_get_start_y(const cpl_propertylist *self)
The WIN STRY key.
double visir_pfits_get_alpha(const cpl_propertylist *self)
The alpha angle.
double visir_pfits_get_mjdobs(const cpl_propertylist *self)
The MJD-OBS.
double visir_pfits_get_temp(const cpl_propertylist *self)
The telescope (M1) temperature [Celcius].
double visir_pfits_get_ra(const cpl_propertylist *self)
The RA.
const char * visir_pfits_get_instrument(const cpl_propertylist *self)
The instrument.