36 #define visir_pfits_get_double(KEY) irplib_pfits_get_double(self, KEY)
37 #define visir_pfits_get_int(KEY) irplib_pfits_get_int(self, KEY)
38 #define visir_pfits_get_string(KEY) irplib_pfits_get_string(self, KEY)
50 #include "irplib_pfits.h"
52 #include "visir_utils.h"
53 #include "visir_pfits.h"
60 static const char * visir_pfits_get_slitname(
const cpl_propertylist *);
61 static double visir_pfits_get_slitwidth_raw(
const cpl_propertylist *);
85 return visir_pfits_get_double(
"ESO TEL AIRM START");
97 return visir_pfits_get_double(
"ESO TEL AIRM END");
109 return visir_pfits_get_double(
"ESO TEL TARG OFFSETALPHA");
121 return visir_pfits_get_string(
"ARCFILE");
133 return visir_pfits_get_string(VISIR_PFITS_STRING_CHOPNOD_DIR);
146 if (cpl_propertylist_has(
self, VISIR_PFITS_DOUBLE_CHOP_THROW)) {
147 return visir_pfits_get_double(VISIR_PFITS_DOUBLE_CHOP_THROW);
150 return visir_pfits_get_double(
"ESO DET CHOP THROW");
164 if (cpl_propertylist_has(
self, VISIR_PFITS_DOUBLE_CHOP_FREQ)) {
165 return visir_pfits_get_double(VISIR_PFITS_DOUBLE_CHOP_FREQ);
168 return visir_pfits_get_double(
"ESO DET CHOP FREQ");
181 if (cpl_propertylist_has(
self, VISIR_PFITS_BOOL_CHOP_STATUS)) {
182 return cpl_propertylist_get_bool(
self, VISIR_PFITS_BOOL_CHOP_STATUS);
185 return cpl_propertylist_get_bool(
self,
"ESO DET CHOP ST");
199 if (!cpl_propertylist_has(
self, VISIR_PFITS_DOUBLE_CHOP_POSANG)) {
202 return CPL_MATH_RAD_DEG *
203 cpl_propertylist_get_double(
self, VISIR_PFITS_DOUBLE_CHOP_POSANG);
218 return pscale > 0.0 ?
throw / pscale : 0.0;
231 return visir_pfits_get_int(
"ESO DET CHOP NCYCLES");
243 return visir_pfits_get_double(
"ESO SEQ CUMOFFSETX");
255 return visir_pfits_get_double(
"ESO SEQ CUMOFFSETY");
267 return visir_pfits_get_string(
"DATE-OBS");
279 return visir_pfits_get_double(
"ESO TEL TARG OFFSETDELTA");
291 return visir_pfits_get_double(
"DEC");
303 if (cpl_propertylist_has(
self, VISIR_PFITS_DOUBLE_SEQ1_DIT))
304 return visir_pfits_get_double(VISIR_PFITS_DOUBLE_SEQ1_DIT);
305 return visir_pfits_get_double(VISIR_PFITS_DOUBLE_DIT);
317 if (cpl_propertylist_has(
self, VISIR_PFITS_INT_NAVRG))
318 return visir_pfits_get_int(VISIR_PFITS_INT_NAVRG);
331 return visir_pfits_get_int(
"ESO TPL EXPNO");
348 if (val == NULL)
return NULL ;
351 if (!strcmp(val,
"IMG" ))
352 return visir_pfits_get_string(
"ESO INS FILT1 NAME");
354 if (!strcmp(val,
"SPC" ))
355 return visir_pfits_get_string(
"ESO INS FILT2 NAME");
357 if (!strcmp(val,
"SPCIMG"))
358 return visir_pfits_get_string(
"ESO INS FILT2 NAME");
360 cpl_ensure(0, CPL_ERROR_UNSUPPORTED_MODE, NULL);
373 return visir_pfits_get_double(
"ESO TEL FOCU LEN");
385 return visir_pfits_get_double(
"EXPTIME");
397 return visir_pfits_get_string(
"ESO DET FRAM TYPE");
409 return visir_pfits_get_string(
"ESO INS GRAT1 NAME");
421 return visir_pfits_get_string(
"ESO INS MODE");
433 return visir_pfits_get_string(
"INSTRUME");
445 return visir_pfits_get_double(
"MJD-OBS");
457 return visir_pfits_get_string(
"ESO DET MODE NAME");
469 return visir_pfits_get_double(
"ESO INS MONOC1 POS");
481 return visir_pfits_get_int(
"ESO DET NDIT");
492 if (cpl_propertylist_has(
self,
"ZNAXIS1"))
493 return visir_pfits_get_int(
"ZNAXIS1");
495 return visir_pfits_get_int(
"NAXIS1");
507 if (cpl_propertylist_has(
self,
"ZNAXIS2"))
508 return visir_pfits_get_int(
"ZNAXIS2");
510 return visir_pfits_get_int(
"NAXIS2");
522 if (cpl_propertylist_has(
self,
"ZNAXIS3"))
523 return visir_pfits_get_int(
"ZNAXIS3");
525 return visir_pfits_get_int(
"NAXIS3");
537 if (cpl_propertylist_has(
self,
"ESO DET ACQ1 WIN NX")) {;
538 return visir_pfits_get_int(
"ESO DET ACQ1 WIN NX");
552 if (cpl_propertylist_has(
self,
"ESO DET ACQ1 WIN NY")) {;
553 return visir_pfits_get_int(
"ESO DET ACQ1 WIN NY");
567 if (cpl_propertylist_has(
self,
"ESO DET ACQ1 WIN STRX")) {;
568 return visir_pfits_get_int(
"ESO DET ACQ1 WIN STRX");
582 if (cpl_propertylist_has(
self,
"ESO DET ACQ1 WIN STRY")) {;
583 return visir_pfits_get_int(
"ESO DET ACQ1 WIN STRY");
597 return visir_pfits_get_int(
"ESO TPL NEXP");
609 return visir_pfits_get_int(
"ESO OBS ID");
621 return visir_pfits_get_string(
"ESO SEQ NODPOS");
633 const char * sscale = visir_pfits_get_string(VISIR_PFITS_STRING_PIXSCALE);
634 if (sscale && strlen(sscale) > 0)
649 return visir_pfits_get_double(
"ESO DET CHIP PXSPACE");
661 return visir_pfits_get_double(
"RA");
673 const char * slitname = visir_pfits_get_slitname(
self);
674 double slitwidth = visir_pfits_get_slitwidth_raw(
self);
677 if (!cpl_error_get_code()) {
679 static const char * slit_name[] = {
"CU_0.12",
"CU_0.14",
"CU_0.16",
680 "CU_0.20",
"CU_0.25",
"CU_0.30",
681 "CU_0.40",
"CU_0.50",
"CU_0.60",
682 "CU_0.70",
"CU_0.80",
"CU_1.00",
683 "CU_1.20",
"CU_1.60",
"ST_0.14",
684 "ST_0.16",
"ST_0.20",
"ST_0.30",
685 "ST_0.40",
"ST_0.50",
"ST_0.60"};
687 static double slit_width[] = {0.12, 0.14, 0.16,
695 static const int slit_nums = (int)(
sizeof(slit_width)/
sizeof(double));
699 for (i=0; i < slit_nums; i++)
700 if (strstr(slitname, slit_name[i]))
break;
702 if (i < slit_nums && fabs(slit_width[i] - slitwidth) < 0.001) {
708 cpl_msg_warning(cpl_func,
"The Width of slit %s is written in the "
709 "FITS card in units mm. Converting to ArcSecs: "
710 "%g => %g", slitname, slitwidth, slitwidth * 2.5);
727 return visir_pfits_get_string(
"ESO OBS TARG NAME");
739 return visir_pfits_get_string(
"ESO INS RESOL");
751 return visir_pfits_get_double(
"ESO TEL TH M1 TEMP");
763 return visir_pfits_get_double(
"ESO DET VOLT1 DCTA9");
775 return visir_pfits_get_double(
"ESO DET VOLT1 DCTB9");
787 return visir_pfits_get_double(
"ESO DET VOLT2 DCTA9");
799 return visir_pfits_get_double(
"ESO DET VOLT2 DCTB9");
811 if (cpl_propertylist_has(
self, VISIR_PFITS_DOUBLE_PWLEN)) {
812 return visir_pfits_get_double(VISIR_PFITS_DOUBLE_PWLEN);
814 return visir_pfits_get_double(VISIR_PFITS_DOUBLE_WLEN);
830 if (cpl_propertylist_has(
self,
"ESO DRS IMGWGT"))
831 imgwgt = cpl_propertylist_get_float(
self,
"ESO DRS IMGWGT");
848 const cpl_boolean chop_on =
849 cpl_propertylist_get_bool(
self, VISIR_PFITS_BOOL_CHOP_STATUS);
853 return chop_on ? 4 : 2;
866 static double visir_pfits_get_slitwidth_raw(
const cpl_propertylist *
self)
868 return visir_pfits_get_double(
"ESO INS SLIT1 WID");
878 static const char * visir_pfits_get_slitname(
const cpl_propertylist *
self)
880 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.