00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef VISIR_PFITS_H
00029 #define VISIR_PFITS_H
00030
00031
00032
00033
00034
00035 #include "irplib_pfits.h"
00036
00037 #include <cpl.h>
00038 #include <string.h>
00039
00040
00041
00042
00043
00044 #define VISIR_PFITS_STRING_ARCFILE "ARCFILE"
00045 #define VISIR_PFITS_STRING_DATE_OBS "DATE-OBS"
00046 #define VISIR_PFITS_DOUBLE_DEC "DEC"
00047 #define VISIR_PFITS_DOUBLE_PIXSPACE "ESO DET CHIP PXSPACE"
00048 #define VISIR_PFITS_INT_CHOP_NCYCLES "ESO DET CHOP NCYCLES"
00049 #define VISIR_PFITS_DOUBLE_DIT "ESO DET DIT"
00050 #define VISIR_PFITS_DOUBLE_SEQ1_DIT "ESO DET SEQ1 DIT"
00051 #define VISIR_PFITS_INT_NAVRG "ESO DET NAVRG"
00052 #define VISIR_PFITS_STRING_FRAME_TYPE "ESO DET FRAM TYPE"
00053 #define VISIR_PFITS_STRING_MODE "ESO DET MODE NAME"
00054 #define VISIR_PFITS_INT_NDIT "ESO DET NDIT"
00055 #define VISIR_PFITS_INT_NDITSKIP "ESO DET NDITSKIP"
00056 #define VISIR_PFITS_DOUBLE_VOLT1DCTA9 "ESO DET VOLT1 DCTA9"
00057 #define VISIR_PFITS_DOUBLE_VOLT1DCTB9 "ESO DET VOLT1 DCTB9"
00058 #define VISIR_PFITS_DOUBLE_VOLT2DCTA9 "ESO DET VOLT2 DCTA9"
00059 #define VISIR_PFITS_DOUBLE_VOLT2DCTB9 "ESO DET VOLT2 DCTB9"
00060 #define VISIR_PFITS_STRING_GRAT1_NAME "ESO INS GRAT1 NAME"
00061 #define VISIR_PFITS_DOUBLE_WLEN "ESO INS GRAT1 WLEN"
00062 #define VISIR_PFITS_DOUBLE_PWLEN "ESO INS PRIS WLEN"
00063 #define VISIR_PFITS_STRING_INSMODE "ESO INS MODE"
00064 #define VISIR_PFITS_DOUBLE_MONOC_POS "ESO INS MONOC1 POS"
00065 #define VISIR_PFITS_STRING_PIXSCALE "ESO INS PFOV"
00066 #define VISIR_PFITS_STRING_RESOL "ESO INS RESOL"
00067 #define VISIR_PFITS_STRING_SLITNAME "ESO INS SLIT1 NAME"
00068 #define VISIR_PFITS_INT_OBS_ID "ESO OBS ID"
00069 #define VISIR_PFITS_STRING_STARNAME "ESO OBS TARG NAME"
00070 #define VISIR_PFITS_STRING_CHOPNOD_DIR "ESO SEQ CHOPNOD DIR"
00071 #define VISIR_PFITS_DOUBLE_CUMOFFSETX "ESO SEQ CUMOFFSETX"
00072 #define VISIR_PFITS_DOUBLE_CUMOFFSETY "ESO SEQ CUMOFFSETY"
00073 #define VISIR_PFITS_STRING_NODPOS "ESO SEQ NODPOS"
00074 #define VISIR_PFITS_DOUBLE_AIRMASS_END "ESO TEL AIRM END"
00075 #define VISIR_PFITS_DOUBLE_AIRMASS_START "ESO TEL AIRM START"
00076 #define VISIR_PFITS_BOOL_CHOP_STATUS "ESO TEL CHOP ST"
00077 #define VISIR_PFITS_DOUBLE_CHOP_THROW "ESO TEL CHOP THROW"
00078 #define VISIR_PFITS_STRING_CHOP_START "ESO TEL CHOP START"
00079 #define VISIR_PFITS_DOUBLE_CHOP_FREQ "ESO TEL CHOP FREQ"
00080 #define VISIR_PFITS_DOUBLE_CHOP_POSANG "ESO TEL CHOP POSANG"
00081 #define VISIR_PFITS_STRING_CHOP_START "ESO TEL CHOP START"
00082 #define VISIR_PFITS_DOUBLE_ADA_POSANG "ESO ADA POSANG"
00083 #define VISIR_PFITS_STRING_OBS_START "DATE-OBS"
00084 #define VISIR_PFITS_DOUBLE_FOCUS "ESO TEL FOCU LEN"
00085 #define VISIR_PFITS_DOUBLE_ALPHA "ESO TEL TARG OFFSETALPHA"
00086 #define VISIR_PFITS_DOUBLE_DELTA "ESO TEL TARG OFFSETDELTA"
00087 #define VISIR_PFITS_DOUBLE_TEMP "ESO TEL TH M1 TEMP"
00088 #define VISIR_PFITS_INT_EXPNO "ESO TPL EXPNO"
00089 #define VISIR_PFITS_INT_NUMBEXP "ESO TPL NEXP"
00090 #define VISIR_PFITS_DOUBLE_EXPTIME "EXPTIME"
00091 #define VISIR_PFITS_STRING_INSTRUMENT "INSTRUME"
00092 #define VISIR_PFITS_DOUBLE_MJDOBS "MJD-OBS"
00093 #define VISIR_PFITS_INT_NAXIS3 "NAXIS3"
00094 #define VISIR_PFITS_DOUBLE_RA "RA"
00095 #define VISIR_PFITS_DPR_TECH "ESO DPR TECH"
00096
00097 #define VISIR_PFITS_DOUBLE_SLITWIDTH "ESO INS SLIT1 WID"
00098 #define VISIR_PFITS_STRING_FILTER1 "ESO INS FILT1 NAME"
00099 #define VISIR_PFITS_STRING_FILTER2 "ESO INS FILT2 NAME"
00100
00101 #define VISIR_DRS_CUMOFFSETX "ESO DRS CUMOFFSETX"
00102 #define VISIR_DRS_CUMOFFSETY "ESO DRS CUMOFFSETY"
00103 #define VISIR_DRS_CUMOFFSETXA "ESO DRS CUMOFFSETXA"
00104 #define VISIR_DRS_CUMOFFSETYA "ESO DRS CUMOFFSETYA"
00105 #define VISIR_DRS_CUMOFFSETXB "ESO DRS CUMOFFSETXB"
00106 #define VISIR_DRS_CUMOFFSETYB "ESO DRS CUMOFFSETYB"
00107
00108 #define VISIR_PFITS_REGEXP_DIT \
00109 VISIR_PFITS_DOUBLE_DIT \
00110 "|" VISIR_PFITS_DOUBLE_SEQ1_DIT \
00111 "|" VISIR_PFITS_INT_CHOP_NCYCLES \
00112 "|" VISIR_PFITS_INT_NDIT \
00113 "|" VISIR_PFITS_INT_NDITSKIP \
00114 "|" VISIR_PFITS_INT_NAVRG
00115
00116 #define VISIR_PFITS_REGEXP_CAPA \
00117 VISIR_PFITS_STRING_INSMODE \
00118 "|" VISIR_PFITS_DOUBLE_VOLT1DCTA9 \
00119 "|" VISIR_PFITS_DOUBLE_VOLT1DCTB9 \
00120 "|" VISIR_PFITS_DOUBLE_VOLT2DCTA9 \
00121 "|" VISIR_PFITS_DOUBLE_VOLT2DCTB9
00122
00123 #define VISIR_PFITS_REGEXP_INPUTS_COMBINE \
00124 VISIR_PFITS_REGEXP_DIT \
00125 "|" VISIR_PFITS_STRING_NODPOS \
00126 "|" "ZNAXIS[12]" \
00127 "|" "NAXIS[12]" \
00128 "|" VISIR_PFITS_REGEXP_LOAD_IMAGELIST
00129
00130 #define VISIR_PFITS_REGEXP_IMG_RECOMBINE \
00131 VISIR_PFITS_REGEXP_DIT \
00132 "|" VISIR_PFITS_DOUBLE_CUMOFFSETX \
00133 "|" VISIR_PFITS_DOUBLE_CUMOFFSETY \
00134 "|" VISIR_PFITS_REGEXP_INPUTS_COMBINE \
00135 "|" VISIR_PFITS_STRING_CHOPNOD_DIR \
00136 "|" VISIR_PFITS_STRING_PIXSCALE \
00137 "|" VISIR_PFITS_DOUBLE_CHOP_THROW \
00138 "|" VISIR_PFITS_DOUBLE_CHOP_POSANG \
00139 "|" VISIR_PFITS_BOOL_CHOP_STATUS \
00140 "|" VISIR_PFITS_DOUBLE_ADA_POSANG \
00141 "|" VISIR_PFITS_REGEXP_CAPA
00142
00143 #define VISIR_PFITS_REGEXP_SPC_GET_RES_WL \
00144 VISIR_PFITS_DOUBLE_WLEN \
00145 "|" VISIR_PFITS_DOUBLE_SLITWIDTH \
00146 "|" VISIR_PFITS_DOUBLE_PIXSPACE \
00147 "|" VISIR_PFITS_STRING_RESOL \
00148 "|" VISIR_PFITS_STRING_SLITNAME \
00149 "|" VISIR_PFITS_DOUBLE_TEMP
00150
00151
00152
00153 #define VISIR_PFITS_REGEXP_SPC_SENSIT \
00154 VISIR_PFITS_INT_NDIT \
00155 "|" VISIR_PFITS_DOUBLE_RA \
00156 "|" VISIR_PFITS_DOUBLE_DEC \
00157 "|" VISIR_PFITS_STRING_STARNAME
00158
00159
00160
00161 #define VISIR_PFITS_REGEXP_LOAD_IMAGELIST \
00162 VISIR_PFITS_REGEXP_DIT \
00163 "|" VISIR_PFITS_STRING_FRAME_TYPE \
00164 "|" VISIR_PFITS_INT_NAXIS3 \
00165 "|" IRPLIB_PFITS_REGEXP_DPR
00166
00167
00168
00169 #define VISIR_PFITS_REGEXP_IMG_SENSIT \
00170 VISIR_PFITS_STRING_FILTER1 \
00171 "|" VISIR_PFITS_STRING_FILTER2 \
00172 "|" VISIR_PFITS_STRING_PIXSCALE \
00173 "|" VISIR_PFITS_STRING_INSMODE \
00174 "|" VISIR_PFITS_REGEXP_SPC_SENSIT
00175
00176
00177 #define VISIR_PFITS_REGEXP_DARK_PAF \
00178 IRPLIB_PFITS_REGEXP_PAF \
00179 "|" VISIR_PFITS_DOUBLE_DIT \
00180 "|" VISIR_PFITS_DOUBLE_SEQ1_DIT \
00181 "|" VISIR_PFITS_INT_NDIT \
00182 "|" VISIR_PFITS_STRING_MODE \
00183 "|" VISIR_PFITS_STRING_PIXSCALE \
00184 "|" VISIR_PFITS_STRING_RESOL \
00185 "|ESO INS GRAT1 WLEN|ESO INS SLIT1 WID" \
00186 "|ESO INS FILT1 NAME|ESO INS FILT2 NAME" \
00187 "|ESO DET NCORRS NAME|ESO TPL START" \
00188 "|" VISIR_PFITS_DOUBLE_PWLEN
00189
00190
00191 #define VISIR_PFITS_REGEXP_DARK \
00192 IRPLIB_PFITS_REGEXP_DPR \
00193 "|" VISIR_PFITS_DOUBLE_EXPTIME \
00194 "|" "NAXIS[12]"
00195
00196 #define VISIR_PFITS_REGEXP_COMBINE_PAF \
00197 IRPLIB_PFITS_REGEXP_PAF \
00198 "|" VISIR_PFITS_DOUBLE_DIT \
00199 "|" VISIR_PFITS_DOUBLE_SEQ1_DIT \
00200 "|" VISIR_PFITS_STRING_PIXSCALE \
00201 "|" VISIR_PFITS_DOUBLE_AIRMASS_START
00202
00203 #define VISIR_PFITS_REGEXP_IMG_PHOT_PAF \
00204 IRPLIB_PFITS_REGEXP_PAF \
00205 "|" VISIR_PFITS_DOUBLE_DIT \
00206 "|" VISIR_PFITS_DOUBLE_SEQ1_DIT \
00207 "|" VISIR_PFITS_DOUBLE_AIRMASS_START \
00208 "|" VISIR_PFITS_DOUBLE_AIRMASS_END \
00209 "|" VISIR_PFITS_STRING_PIXSCALE
00210
00211 #define VISIR_PFITS_IMG_PHOT_COPY \
00212 IRPLIB_PFITS_REGEXP_RECAL \
00213 "|FILTER1|FILTER2"
00214
00215 #define VISIR_PFITS_SPC_PHOT_COPY \
00216 VISIR_PFITS_IMG_PHOT_COPY "|GRAT1|PRIS"
00217
00218 #define VISIR_PFITS_FF_COPY \
00219 VISIR_PFITS_SPC_PHOT_COPY
00220
00221 #define VISIR_PFITS_REGEXP_SPC_WCAL_PAF \
00222 IRPLIB_PFITS_REGEXP_PAF \
00223 "|" VISIR_PFITS_STRING_GRAT1_NAME
00224
00225 #define VISIR_PFITS_REGEXP_SPC_PHOT_PAF \
00226 VISIR_PFITS_REGEXP_IMG_PHOT_PAF \
00227 "|" VISIR_PFITS_STRING_GRAT1_NAME
00228
00229
00230
00231 static const char visir_property_regexp[] =
00232 "^(" IRPLIB_PFITS_REGEXP_PAF
00233 "|" VISIR_PFITS_SPC_PHOT_COPY
00234 "|" VISIR_PFITS_STRING_ARCFILE
00235 "|" VISIR_PFITS_STRING_DATE_OBS
00236 "|" VISIR_PFITS_DOUBLE_DEC
00237 "|" VISIR_PFITS_DOUBLE_PIXSPACE
00238 "|" VISIR_PFITS_INT_CHOP_NCYCLES
00239 "|" VISIR_PFITS_DOUBLE_DIT
00240 "|" VISIR_PFITS_DOUBLE_SEQ1_DIT
00241 "|" VISIR_PFITS_STRING_FRAME_TYPE
00242 "|" VISIR_PFITS_STRING_MODE
00243 "|" VISIR_PFITS_INT_NDIT
00244 "|" VISIR_PFITS_DOUBLE_VOLT1DCTA9
00245 "|" VISIR_PFITS_DOUBLE_VOLT1DCTB9
00246 "|" VISIR_PFITS_DOUBLE_VOLT2DCTA9
00247 "|" VISIR_PFITS_DOUBLE_VOLT2DCTB9
00248 "|" VISIR_PFITS_STRING_GRAT1_NAME
00249 "|" VISIR_PFITS_DOUBLE_WLEN
00250 "|" VISIR_PFITS_STRING_INSMODE
00251 "|" VISIR_PFITS_DOUBLE_MONOC_POS
00252 "|" VISIR_PFITS_STRING_PIXSCALE
00253 "|" VISIR_PFITS_STRING_RESOL
00254 "|" VISIR_PFITS_STRING_SLITNAME
00255 "|" VISIR_PFITS_DOUBLE_SLITWIDTH
00256 "|" VISIR_PFITS_INT_OBS_ID
00257 "|" VISIR_PFITS_STRING_STARNAME
00258 "|" VISIR_PFITS_STRING_CHOPNOD_DIR
00259 "|" VISIR_PFITS_BOOL_CHOP_STATUS
00260 "|" VISIR_PFITS_DOUBLE_CHOP_THROW
00261 "|" VISIR_PFITS_DOUBLE_CHOP_POSANG
00262 "|" VISIR_PFITS_DOUBLE_ADA_POSANG
00263 "|" VISIR_PFITS_DOUBLE_CUMOFFSETX
00264 "|" VISIR_PFITS_DOUBLE_CUMOFFSETY
00265 "|" VISIR_PFITS_STRING_NODPOS
00266 "|" VISIR_PFITS_DOUBLE_AIRMASS_END
00267 "|" VISIR_PFITS_DOUBLE_AIRMASS_START
00268 "|" VISIR_PFITS_DOUBLE_FOCUS
00269 "|" VISIR_PFITS_DOUBLE_ALPHA
00270 "|" VISIR_PFITS_DOUBLE_DELTA
00271 "|" VISIR_PFITS_DOUBLE_TEMP
00272 "|" VISIR_PFITS_INT_EXPNO
00273 "|" VISIR_PFITS_INT_NUMBEXP
00274 "|" VISIR_PFITS_DOUBLE_EXPTIME
00275 "|" VISIR_PFITS_STRING_INSTRUMENT
00276 "|" VISIR_PFITS_DOUBLE_MJDOBS
00277 "|" "NAXIS[12]"
00278 "|" VISIR_PFITS_INT_NAXIS3
00279 "|" VISIR_PFITS_DOUBLE_RA
00280 "|" VISIR_PFITS_STRING_FILTER1
00281 "|" VISIR_PFITS_STRING_FILTER2
00282 "|" IRPLIB_PFITS_REGEXP_DPR ")$";
00283
00284
00285
00286
00287
00288 static inline cpl_boolean visir_is_spc(const cpl_propertylist * plist)
00289 {
00290 const char * tech;
00291
00292 if (!cpl_propertylist_has(plist, VISIR_PFITS_DPR_TECH)) {
00293 return CPL_FALSE;
00294 }
00295 tech = cpl_propertylist_get_string(plist, VISIR_PFITS_DPR_TECH);
00296 if (!tech) {
00297 return CPL_FALSE;
00298 }
00299 if (strstr(tech, "SPECTRUM") || strstr(tech, "ECHELLE")) {
00300 return CPL_TRUE;
00301 }
00302 return CPL_FALSE;
00303 }
00304
00305 static inline cpl_boolean visir_is_img(const cpl_propertylist * plist)
00306 {
00307 const char * tech;
00308
00309 if (!cpl_propertylist_has(plist, VISIR_PFITS_DPR_TECH)) {
00310 return CPL_FALSE;
00311 }
00312 tech = cpl_propertylist_get_string(plist, VISIR_PFITS_DPR_TECH);
00313 if (!tech) {
00314 return CPL_FALSE;
00315 }
00316 if (strstr(tech, "IMAGE")) {
00317 return CPL_TRUE;
00318 }
00319 return CPL_FALSE;
00320 }
00321
00322 double visir_pfits_get_airmass_start(const cpl_propertylist *);
00323 double visir_pfits_get_airmass_end(const cpl_propertylist *);
00324 double visir_pfits_get_alpha(const cpl_propertylist *);
00325 const char * visir_pfits_get_arcfile(const cpl_propertylist *);
00326 const char * visir_pfits_get_chopnod_dir(const cpl_propertylist *);
00327 int visir_pfits_get_chop_ncycles(const cpl_propertylist *);
00328 double visir_pfits_get_chop_throw(const cpl_propertylist *);
00329 double visir_pfits_get_chop_stat(const cpl_propertylist * self);
00330 double visir_pfits_get_chop_freq(const cpl_propertylist * self);
00331 double visir_pfits_get_chop_posang(const cpl_propertylist *);
00332 double visir_pfits_get_chop_pthrow(const cpl_propertylist *);
00333 double visir_pfits_get_ada_posang(const cpl_propertylist *);
00334 double visir_pfits_get_cumoffsetx(const cpl_propertylist *);
00335 double visir_pfits_get_cumoffsety(const cpl_propertylist *);
00336 const char * visir_pfits_get_date_obs(const cpl_propertylist *);
00337 double visir_pfits_get_delta(const cpl_propertylist *);
00338 double visir_pfits_get_dec(const cpl_propertylist *);
00339 double visir_pfits_get_dit(const cpl_propertylist *);
00340 int visir_pfits_get_navrg(const cpl_propertylist *);
00341 int visir_pfits_get_expno(const cpl_propertylist *);
00342 const char * visir_pfits_get_filter(const cpl_propertylist *);
00343 double visir_pfits_get_focus(const cpl_propertylist *);
00344 double visir_pfits_get_exptime(const cpl_propertylist *);
00345 const char * visir_pfits_get_frame_type(const cpl_propertylist *);
00346 const char * visir_pfits_get_det_name(const cpl_propertylist *);
00347 const char * visir_pfits_get_grat1_name(const cpl_propertylist *);
00348 const char * visir_pfits_get_insmode(const cpl_propertylist *);
00349 const char * visir_pfits_get_instrument(const cpl_propertylist *);
00350 double visir_pfits_get_mjdobs(const cpl_propertylist *);
00351 const char * visir_pfits_get_mode(const cpl_propertylist *);
00352 double visir_pfits_get_monoc_pos(const cpl_propertylist *);
00353 int visir_pfits_get_ndit(const cpl_propertylist *);
00354 int visir_pfits_get_naxis1(const cpl_propertylist *);
00355 int visir_pfits_get_naxis2(const cpl_propertylist *);
00356 int visir_pfits_get_naxis3(const cpl_propertylist *);
00357 int visir_pfits_get_win_nx(const cpl_propertylist * self);
00358 int visir_pfits_get_win_ny(const cpl_propertylist * self);
00359 int visir_pfits_get_start_x(const cpl_propertylist * self);
00360 int visir_pfits_get_start_y(const cpl_propertylist * self);
00361 int visir_pfits_get_numbexp(const cpl_propertylist *);
00362 int visir_pfits_get_obs_id(const cpl_propertylist *);
00363 const char * visir_pfits_get_nodpos(const cpl_propertylist *);
00364 double visir_pfits_get_pixscale(const cpl_propertylist *);
00365 double visir_pfits_get_pixspace(const cpl_propertylist *);
00366 double visir_pfits_get_ra(const cpl_propertylist *);
00367 double visir_pfits_get_slitwidth(const cpl_propertylist *);
00368 const char * visir_pfits_get_starname(const cpl_propertylist *);
00369 const char * visir_pfits_get_resol(const cpl_propertylist *);
00370 double visir_pfits_get_temp(const cpl_propertylist *);
00371 double visir_pfits_get_volt1dcta9(const cpl_propertylist *);
00372 double visir_pfits_get_volt1dctb9(const cpl_propertylist *);
00373 double visir_pfits_get_volt2dcta9(const cpl_propertylist *);
00374 double visir_pfits_get_volt2dctb9(const cpl_propertylist *);
00375 double visir_pfits_get_wlen(const cpl_propertylist *);
00376 double visir_pfits_get_img_weight(const cpl_propertylist * );
00377 int visir_pfits_get_nbeams(const cpl_propertylist * );
00378
00379 #endif