GRAVI Pipeline Reference Manual  1.2.3
gravi_pfits.h
1 /* $Id: gravi_pfits.h,v 1.8 2007/07/31 06:10:40 llundin Exp $
2  *
3  * This file is part of the GRAVI Pipeline
4  * Copyright (C) 2002,2003 European Southern Observatory
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19  */
20 
21 #ifndef GRAVI_PFITS_H
22 #define GRAVI_PFITS_H
23 
24 /*-----------------------------------------------------------------------------
25  Includes
26  -----------------------------------------------------------------------------*/
27 
28 #include <cpl.h>
29 
30 /*-----------------------------------------------------------------------------
31  Defines
32  -----------------------------------------------------------------------------*/
33 
34 #define DET_DIT "IPAG DET DIT"
35 #define GRAVI_DET_DIT "ESO DET2 SEQ1 DIT"
36 #define GRAVI_NIGHT_OBS "ESO PRO NIGHT OBS"
37 #define DPR_TYPE "ESO DPR TYPE"
38 
39 #define GRAVI_PRIMARY_HDR_EXT "PRIMARY_HDR"
40 
41 #define GRAVI_IMAGING_DATA_ACQ_EXT "IMAGING_DATA_ACQ"
42 #define GRAVI_IMAGING_DATA_FT_EXT "IMAGING_DATA_FT"
43 #define GRAVI_IMAGING_DATA_SC_EXT "IMAGING_DATA_SC"
44 #define GRAVI_IMAGING_ERR_SC_EXT "IMAGING_ERR_SC"
45 #define GRAVI_IMAGING_ERR_FT_EXT "IMAGING_ERR_FT"
46 #define GRAVI_IMAGING_MASK_SC_EXT "IMAGING_MASK_SC"
47 
48 #define GRAVI_IMAGING_DETECTOR_SC_EXT "IMAGING_DETECTOR_SC"
49 #define GRAVI_IMAGING_DETECTOR_FT_EXT "IMAGING_DETECTOR_FT"
50 #define GRAVI_IMAGING_DETECTOR_EXT(type) (type==GRAVI_SC?GRAVI_IMAGING_DETECTOR_SC_EXT:GRAVI_IMAGING_DETECTOR_FT_EXT)
51 
52 #define GRAVI_SPECTRUM_DATA_SC_EXT "SPECTRUM_DATA_SC"
53 #define GRAVI_SPECTRUM_DATA_FT_EXT "SPECTRUM_DATA_FT"
54 #define GRAVI_SPECTRUM_DATA_EXT(type) (type==GRAVI_SC?GRAVI_SPECTRUM_DATA_SC_EXT:GRAVI_SPECTRUM_DATA_FT_EXT)
55 #define GRAVI_SPECTRUMFLAT_DATA_SC_EXT "SPECTRUMFLAT_DATA_SC"
56 
57 #define GRAVI_BIAS_MASK_SC_EXT "BIAS_MASK_SC"
58 
59 #define GRAVI_METROLOGY_EXT "METROLOGY"
60 #define GRAVI_METROLOGY_ERR_EXT "METROLOGY_ERR"
61 #define GRAVI_OPDC_EXT "OPDC"
62 #define GRAVI_WAVE_ARGON_EXT "WAVE_ARGON"
63 #define GRAVI_WAVE_DATA_FT_EXT "WAVE_DATA_FT"
64 #define GRAVI_WAVE_DATA_SC_EXT "WAVE_DATA_SC"
65 #define GRAVI_WAVE_DATA_FT_EXT "WAVE_DATA_FT"
66 #define GRAVI_WAVE_DATA_EXT(type) (type==GRAVI_SC?GRAVI_WAVE_DATA_SC_EXT:GRAVI_WAVE_DATA_FT_EXT)
67 #define GRAVI_WAVE_FIBRE_FT_EXT "WAVE_FIBRE_FT"
68 #define GRAVI_WAVE_FIBRE_SC_EXT "WAVE_FIBRE_SC"
69 #define GRAVI_WAVE_FIBRE_EXT(type) (type==GRAVI_SC?GRAVI_WAVE_FIBRE_SC_EXT:GRAVI_WAVE_FIBRE_FT_EXT)
70 #define GRAVI_P2VM_MET_EXT "P2VM_MET"
71 #define GRAVI_P2VM_DATA_SC_EXT "P2VM_SC"
72 #define GRAVI_P2VM_DATA_FT_EXT "P2VM_FT"
73 #define GRAVI_P2VM_DATA_EXT(type) (type==GRAVI_SC?GRAVI_P2VM_DATA_SC_EXT:GRAVI_P2VM_DATA_FT_EXT)
74 #define GRAVI_FDDL_EXT "FDDL"
75 
76 #define GRAVI_PROFILE_DATA_EXT "PROFILE_DATA"
77 #define GRAVI_PROFILE_PARAMS_EXT "PROFILE_PARAMS"
78 #define GRAVI_IMAGING_DETECTOR_SC_EXT "IMAGING_DETECTOR_SC"
79 #define GRAVI_IMAGING_DETECTOR_FT_EXT "IMAGING_DETECTOR_FT"
80 #define GRAVI_OI_ARRAY_EXT "OI_ARRAY"
81 #define GRAVI_ARRAY_GEOMETRY_EXT "ARRAY_GEOMETRY"
82 #define GRAVI_OPTICAL_TRAIN_EXT "OPTICAL_TRAIN"
83 #define GRAVI_OI_TARGET_EXT "OI_TARGET"
84 
85 #define GRAVI_OI_VIS_MET_EXT "OI_VIS_MET"
86 #define GRAVI_OI_VIS_ACQ_EXT "OI_VIS_ACQ"
87 
88 #define GRAVI_OI_WAVELENGTH_EXT "OI_WAVELENGTH"
89 #define GRAVI_OI_VIS_EXT "OI_VIS"
90 #define GRAVI_OI_FLUX_EXT "OI_FLUX"
91 #define GRAVI_OI_T3_EXT "OI_T3"
92 #define GRAVI_OI_VIS2_EXT "OI_VIS2"
93 
94 #define GRAVI_NAN_DOUBLE -99.
95 #define GRAVI_NAN_FLOAT -99.
96 #define GRAVI_NAN_INT -99
97 
98 //#define LAMBDA_MET 0.000001908287 /* updated with actual valeur - pkervell - 19aug15 */
99 #define LAMBDA_MET 0.000001908254
100 
101 /* QC WAVE*/
102 #define QC_MINWAVE(type) (type==GRAVI_SC?"ESO QC MINWAVE SC":"ESO QC MINWAVE FT")
103 #define QC_MAXWAVE(type) (type==GRAVI_SC?"ESO QC MAXWAVE SC":"ESO QC MAXWAVE FT")
104 #define QC_RMS_RESIDUALS(type) (type==GRAVI_SC?"ESO QC RMSWAVE SC":"ESO QC RMSWAVE FT")
105 #define OPD_COEFF_SIGN(type) (type==GRAVI_SC?"ESO QC OPD_COEFF_SIGN SC":"ESO QC OPD_COEFF_SIGN FT")
106 
107 /* QC DARK */
108 #define QC_MEANDARK_SC "ESO QC MEDIANDARK SC"
109 #define QC_DARKRMS_SC "ESO QC DARKRMS SC"
110 #define QC_MEANSKY_SC "ESO QC MEDIANSKY SC"
111 #define QC_SKYRMS_SC "ESO QC SKYRMS SC"
112 
113 #define QC_MEANDARK_FT "ESO QC MEANDARK FT"
114 #define QC_DARKRMS_FT "ESO QC DARKRMS FT"
115 #define QC_MEANSKY_FT "ESO QC MEANSKY FT"
116 #define QC_SKYRMS_FT "ESO QC SKYRMS FT"
117 
118 #define QC_MEANDARK_MET "ESO QC MEANDARK MET"
119 #define QC_DARKRMS_MET "ESO QC DARKRMS MET"
120 
121 #define QC_MEANDARK "ESO QC MEANDARK"
122 #define QC_DARKRMS "ESO QC DARKRMS"
123 
124 /* QC FLAT */
125 #define QC_MEANGAIN_SC "ESO QC MEANGAIN SC"
126 #define QC_BADPIX_SC "ESO QC BADPIX SC"
127 #define QC_BADPIX_DARK_SC "ESO QC BADPIX_DARK SC"
128 #define QC_BADPIX_RMS_SC "ESO QC BADPIX_RMS SC"
129 #define QC_BADPIX_FLAT_SC "ESO QC BADPIX_FLAT SC"
130 #define QC_MEANGAIN_FT "ESO QC MEANGAIN FT"
131 #define QC_BADPIX_FT "ESO QC BADPIX FT"
132 #define PROFILE_STARTX "ESO PRO PROFILE STARTX"
133 #define PROFILE_FULLSTARTX "ESO PRO PROFILE FULLSTARTX"
134 #define PROFILE_NX "ESO PRO PROFILE NX"
135 
136 
137 /* QC P2VM */
138 #define QC_MEANCOH_SC "ESO QC P2VM_COHERENCE_AVG_SC"
139 #define QC_RMSCOH_SC "ESO QC P2VM_COHERENCERMS_AVG_SC"
140 #define QC_RMSPHASE_SC "ESO QC P2VM_PHASERMS_AVG_SC"
141 #define QC_MEANCOH_FT "ESO QC P2VM_COHERENCE_AVG_FT"
142 #define QC_RMSCOH_FT "ESO QC P2VM_COHERENCERMS_AVG_FT"
143 #define QC_RMSPHASE_FT "ESO QC P2VM_PHASERMS_AVG_FT"
144 
145 
146 /* Type of data */
147 #define GRAVI_SC 0
148 #define GRAVI_FT 1
149 #define GRAVI_TYPE(type) (type==GRAVI_SC?"SC":"FT")
150 
151 enum gravi_detector_type
152 {
153  GRAVI_DET_FT,
154  GRAVI_DET_SC,
155  GRAVI_DET_ALL
156 };
157 
158 /* Modes */
159 #define MODE_SINGLE 1
160 #define MODE_DUAL 2
161 
162 /* INSNAME_SC or INSNAME_FT. Deal with polar */
163 #define INSNAME_FT_P1 "GRAVITY_FT_P1"
164 #define INSNAME_FT_P2 "GRAVITY_FT_P2"
165 #define INSNAME_SC_P1 "GRAVITY_SC_P1"
166 #define INSNAME_SC_P2 "GRAVITY_SC_P2"
167 #define INSNAME_FT "GRAVITY_FT"
168 #define INSNAME_SC "GRAVITY_SC"
169 #define GRAVI_INSNAME(type,pol,npol) (type==GRAVI_SC ? (npol==1?INSNAME_SC:(pol==0?INSNAME_SC_P1:INSNAME_SC_P2) ) : (npol==1?INSNAME_FT:(pol==0?INSNAME_FT_P1:INSNAME_FT_P2) ) )
170 
171 /* EXTVER = {10,11,12} for SC
172  EXTVER = {20,21,22} for FT
173  0,1,2 beeing the combined mode, the first polar, and the second polar */
174 #define GRAVI_EXTVER(type,pol,npol) ( (type+1)*10 + (npol==1?0:(pol+1)) )
175 
176 #define gravi_pfits_get_sobj_decep(plist) gravi_pfits_get_decep(plist, 1.0)
177 #define gravi_pfits_get_sobj_raep(plist) gravi_pfits_get_raep(plist, 1.0)
178 #define gravi_pfits_get_mid_decep(plist) gravi_pfits_get_decep(plist, 0.5)
179 #define gravi_pfits_get_mid_raep(plist) gravi_pfits_get_raep(plist, 0.5)
180 #define gravi_pfits_get_type_decep(plist,type) (type==GRAVI_SC?gravi_pfits_get_sobj_decep(plist):gravi_pfits_get_robj_decep(plist))
181 #define gravi_pfits_get_type_raep(plist,type) (type==GRAVI_SC?gravi_pfits_get_sobj_raep(plist):gravi_pfits_get_robj_raep(plist))
182 
183 #define gravi_pfits_get_dit(plist, type) (type==GRAVI_SC ? gravi_pfits_get_dit_sc(plist) : gravi_pfits_get_dit_ft(plist))
184 
185 /*-----------------------------------------------------------------------------
186  Private prototypes
187  ----------------------------------------------------------------------------- */
188 
189 
190 const char * gravi_pfits_get_met_ph(const cpl_propertylist * );
191 int gravi_pfits_has_gdzero (const cpl_propertylist * plist, int tel);
192 double gravi_pfits_get_gdzero (const cpl_propertylist * plist, int tel);
193 int gravi_pfits_has_oplzero (const cpl_propertylist * plist, int tel);
194 double gravi_pfits_get_oplzero (const cpl_propertylist * plist, int tel);
195 double gravi_pfits_get_metfc_lockmjd (const cpl_propertylist * plist, int tel);
196 double gravi_pfits_get_met_wavelength (const cpl_propertylist * plist);
197 double gravi_pfits_get_met_wavelength_mean (const cpl_propertylist * plist, cpl_table * met_table);
198 
199 const char * gravi_pfits_get_start_sc (const cpl_propertylist * plist);
200 const char * gravi_pfits_get_start_acqcam (const cpl_propertylist * plist);
201 const char * gravi_pfits_get_start_prcacq (const cpl_propertylist * plist);
202 
203 double gravi_pfits_get_fddlwindow (const cpl_propertylist * plist);
204 
205 double gravi_pfits_get_period_sc (const cpl_propertylist * plist);
206 double gravi_pfits_get_period_acqcam (const cpl_propertylist * plist);
207 double gravi_pfits_get_dit_ft (const cpl_propertylist * plist);
208 double gravi_pfits_get_dit_sc (const cpl_propertylist * plist);
209 double gravi_pfits_get_dit_acqcam (const cpl_propertylist * plist);
210 
211 double gravi_pfits_get_time_sc (const cpl_propertylist * header, cpl_size row);
212 double gravi_pfits_get_time_acqcam (const cpl_propertylist * header, cpl_size row);
213 
214 double gravi_pfits_get_mjd (const cpl_propertylist * plist);
215 
216 double gravi_pfits_get_ft_gain (const cpl_propertylist * plist);
217 double gravi_pfits_get_sc_gain (const cpl_propertylist * plist);
218 
219 const char * gravi_pfits_get_extname(const cpl_propertylist * );
220 int gravi_pfits_get_extension_type(const cpl_propertylist * plist);
221 
222 double gravi_pfits_get_sobj_diam (const cpl_propertylist * plist);
223 double gravi_pfits_get_robj_diam (const cpl_propertylist * plist);
224 double gravi_pfits_get_diameter(const cpl_propertylist * plist, int type_data);
225 
226 double gravi_pfits_get_ptfc_acqcam (const cpl_propertylist * plist, int spot);
227 double gravi_pfits_get_drotoff (const cpl_propertylist * plist, int tel);
228 double gravi_pfits_get_fangle_acqcam (const cpl_propertylist * plist, int tel);
229 
230 const char * gravi_pfits_get_resolution(const cpl_propertylist * plist);
231 const char * gravi_pfits_get_dpr_type(const cpl_propertylist * plist);
232 const char * gravi_pfits_get_insname(const cpl_propertylist * plist);
233 const char * gravi_pfits_get_spec_res(const cpl_propertylist * plist);
234 const char * gravi_pfits_get_pola_mode(const cpl_propertylist * plist, int type_data);
235 
236 int gravi_pfits_is_calib (const cpl_propertylist * plist);
237 int gravi_pfits_get_pola_num(const cpl_propertylist * plist, int type_data );
238 int gravi_pfits_get_mode (const cpl_propertylist * plist);
239 const char * gravi_pfits_get_mode_name (const cpl_propertylist * plist);
240 int gravi_data_frame_get_mode(const cpl_frame * frame);
241 
242 int gravi_pfits_get_window_start (const cpl_propertylist * plist);
243 int gravi_pfits_get_startx (const cpl_propertylist * plist);
244 int gravi_pfits_get_fullstartx (const cpl_propertylist * plist);
245 int gravi_pfits_get_nx (const cpl_propertylist * plist);
246 
247 const char * gravi_pfits_get_robj(const cpl_propertylist * plist);
248 const char * gravi_pfits_get_sobj(const cpl_propertylist * plist);
249 
250 double gravi_pfits_get_decep(const cpl_propertylist * plist, double coef);
251 double gravi_pfits_get_raep(const cpl_propertylist * plist, double coef);
252 double gravi_pfits_get_robj_decep(const cpl_propertylist * plist);
253 double gravi_pfits_get_robj_raep(const cpl_propertylist * plist);
254 double gravi_pfits_get_sobj_x(const cpl_propertylist * plist);
255 double gravi_pfits_get_sobj_y(const cpl_propertylist * plist);
256 
257 double gravi_pfits_get_plx(const cpl_propertylist * plist);
258 double gravi_pfits_get_pmra(const cpl_propertylist * plist);
259 double gravi_pfits_get_pmdec(const cpl_propertylist * plist);
260 
261 double gravi_pfits_get_geoelev(const cpl_propertylist * plist);
262 double gravi_pfits_get_geolat(const cpl_propertylist * plist);
263 double gravi_pfits_get_geolon(const cpl_propertylist * plist);
264 
265 double gravi_ra_to_rad (const char *stri);
266 double gravi_dec_to_rad (const char *stri);
267 double gravi_convert_to_mjd (const char * );
268 char * gravi_convert_to_timestamp (double mjd);
269 cpl_error_code gravi_pfits_ensure_double(cpl_propertylist * self, const char * name);
270 
271 cpl_propertylist * gravi_plist_get_qc (cpl_propertylist * );
272 cpl_propertylist * gravi_plist_get_oifits_keywords (cpl_propertylist * header);
273 
274 double gravi_pfits_get_double(const cpl_propertylist * self, const char * name);
275 double gravi_pfits_get_double_default(const cpl_propertylist * plist, const char *name,double def);
276 double gravi_pfits_get_double_silentdefault(const cpl_propertylist * plist, const char *name,double def);
277 const char * gravi_pfits_get_string_default (const cpl_propertylist * plist, const char *name, const char *def);
278 
279 cpl_error_code gravi_pfits_add_check (cpl_propertylist * header, char *msg);
280 cpl_error_code gravi_pfits_add_pipe_build (cpl_propertylist * header);
281 
282 cpl_error_code gravi_pfits_update_double (cpl_propertylist * plist, const char * name, double value);
283 cpl_error_code gravi_pfits_update_int (cpl_propertylist * plist, const char * name, int value);
284 
285 
286 #endif
double gravi_pfits_get_time_sc(const cpl_propertylist *header, cpl_size row)
Time of the middle of the SC exposure row in [us], counted from PRC.ACQ.START.
Definition: gravi_pfits.c:590
cpl_propertylist * gravi_plist_get_qc(cpl_propertylist *)
Extract QC parameters.
Definition: gravi_pfits.c:856
int gravi_pfits_get_startx(const cpl_propertylist *plist)
find out the name of the propertylist
Definition: gravi_pfits.c:66
cpl_error_code gravi_pfits_add_check(cpl_propertylist *header, char *msg)
Add a QC.CHECK keyword to the header.
Definition: gravi_pfits.c:1398
double gravi_pfits_get_sc_gain(const cpl_propertylist *plist)
SC system gain in [ADU/e].
Definition: gravi_pfits.c:766
cpl_propertylist * gravi_plist_get_oifits_keywords(cpl_propertylist *header)
Create OIFITS keywords to satisfy standar.
Definition: gravi_pfits.c:801
double gravi_pfits_get_double(const cpl_propertylist *self, const char *name)
Get the double value of the given property list entry.
Definition: gravi_pfits.c:1217
double gravi_pfits_get_ft_gain(const cpl_propertylist *plist)
FT system gain in [ADU/e].
Definition: gravi_pfits.c:727
double gravi_pfits_get_time_acqcam(const cpl_propertylist *header, cpl_size row)
Time of the middle of the ACQCAM exposure row in [us], counted from PRC.ACQ.START.
Definition: gravi_pfits.c:624
cpl_error_code gravi_pfits_add_pipe_build(cpl_propertylist *header)
Add the ESO PRO REC# PIPE LAST_BUILD in header.
Definition: gravi_pfits.c:1438