UVES Pipeline Reference Manual  5.4.6
irplib_sdp_spectrum.h
1 /*
2  * This file is part of the ESO Common Pipeline Library
3  * Copyright (C) 2014 European Southern Observatory
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18  */
19 
20 #ifndef IRPLIB_SDP_SPECTRUM_H
21 #define IRPLIB_SDP_SPECTRUM_H
22 
23 /*-----------------------------------------------------------------------------
24  Includes
25  -----------------------------------------------------------------------------*/
26 
27 #include <cpl.h>
28 #include <math.h>
29 
30 CPL_BEGIN_DECLS
31 
32 /*-----------------------------------------------------------------------------
33  Defines
34  -----------------------------------------------------------------------------*/
35 
36 /* Define a default value for NAN if not already defined.
37  * Note: one should add a test to configure.ac to check if the compiler can
38  * handle NAN defined as (0.0/0.0) and define IRPLIB_USE_ZERO_BY_ZERO_FOR_NAN
39  * appropriately when compiling this file. */
40 #ifndef NAN
41 # ifdef IRPLIB_USE_ZERO_BY_ZERO_FOR_NAN
42 
43 # define NAN (0.0/0.0)
44 
45 # else /* IRPLIB_USE_ZERO_BY_ZERO_FOR_NAN */
46 
47 # include <assert.h>
48 # include <stdint.h>
49 # include <string.h>
50 
51  inline static float _irplib_nan_const(void)
52  {
53  /* Perform type-punning to convert binary representation to the floating
54  * point format. We use memcpy since this should be the most portable.
55  * Unions are OK only from C99, though in principle most older compilers
56  * should anyway behave in the expected manner. The _irplib_nan_const is
57  * actually a workaround for the better alternative of using 0.0/0.0
58  * directly in the code, which should work with a modern compiler. Thus,
59  * we just stick to memcpy to avoid strict aliasing rule violations.
60  */
61  uint32_t i = 0xFFC00000;
62  float f;
63  assert(sizeof(i) == sizeof(f));
64  memcpy(&f, &i, sizeof(f));
65  return f;
66  }
67 
68 # define NAN _irplib_nan_const()
69 
70 # endif /* IRPLIB_USE_ZERO_BY_ZERO_FOR_NAN */
71 #endif /* NAN */
72 
73 /*-----------------------------------------------------------------------------
74  Type declarations
75  -----------------------------------------------------------------------------*/
76 
81 typedef struct _irplib_sdp_spectrum_ irplib_sdp_spectrum;
82 
88  /* Indicates the units should be copied. */
89  IRPLIB_COLUMN_UNIT = 1 << 1,
90 
91  /* Indicates the format string should be copied. */
92  IRPLIB_COLUMN_FORMAT = 1 << 2,
93 
94  /* Indicates the data should be copied. */
95  IRPLIB_COLUMN_DATA = 1 << 3
96 
98 
99 /*-----------------------------------------------------------------------------
100  Prototypes
101  -----------------------------------------------------------------------------*/
102 
103 /*
104  * Create, copy and destroy operations.
105  */
106 
107 irplib_sdp_spectrum * irplib_sdp_spectrum_new(void) CPL_ATTR_ALLOC;
108 
110 irplib_sdp_spectrum_duplicate(const irplib_sdp_spectrum *other) CPL_ATTR_ALLOC;
111 
112 void irplib_sdp_spectrum_delete(irplib_sdp_spectrum *self);
113 
114 /*
115  * Method to compare two spectra.
116  */
117 
118 cpl_boolean irplib_sdp_spectrum_equal(const irplib_sdp_spectrum *a,
119  const irplib_sdp_spectrum *b,
120  cpl_boolean only_intersect);
121 
122 /*
123  * Methods to count number of elements for keyword series.
124  */
125 cpl_size irplib_sdp_spectrum_count_obid(const irplib_sdp_spectrum *self);
126 cpl_size irplib_sdp_spectrum_count_prov(const irplib_sdp_spectrum *self);
127 cpl_size irplib_sdp_spectrum_count_asson(const irplib_sdp_spectrum *self);
128 cpl_size irplib_sdp_spectrum_count_assoc(const irplib_sdp_spectrum *self);
129 cpl_size irplib_sdp_spectrum_count_assom(const irplib_sdp_spectrum *self);
130 
131 /*
132  * Methods to copy keyword values from property objects.
133  */
134 cpl_error_code irplib_sdp_spectrum_copy_keyword(irplib_sdp_spectrum *self,
135  const cpl_propertylist *plist,
136  const char *name);
137 
138 cpl_error_code irplib_sdp_spectrum_copy_property(irplib_sdp_spectrum *self,
139  const cpl_property *prop);
140 
141 cpl_error_code irplib_sdp_spectrum_copy_property_regexp(
142  irplib_sdp_spectrum *self,
143  const cpl_propertylist *plist,
144  const char *regexp,
145  int invert);
146 
147 /*
148  * Get/set methods for keywords.
149  */
150 
151 double irplib_sdp_spectrum_get_ra(const irplib_sdp_spectrum *self);
152 cpl_error_code irplib_sdp_spectrum_reset_ra(irplib_sdp_spectrum *self);
153 cpl_error_code irplib_sdp_spectrum_set_ra(irplib_sdp_spectrum *self,
154  double value);
155 cpl_error_code irplib_sdp_spectrum_copy_ra(irplib_sdp_spectrum *self,
156  const cpl_propertylist *plist,
157  const char *name);
158 
159 double irplib_sdp_spectrum_get_dec(const irplib_sdp_spectrum *self);
160 cpl_error_code irplib_sdp_spectrum_reset_dec(irplib_sdp_spectrum *self);
161 cpl_error_code irplib_sdp_spectrum_set_dec(irplib_sdp_spectrum *self,
162  double value);
163 cpl_error_code irplib_sdp_spectrum_copy_dec(irplib_sdp_spectrum *self,
164  const cpl_propertylist *plist,
165  const char *name);
166 
167 double irplib_sdp_spectrum_get_exptime(const irplib_sdp_spectrum *self);
168 cpl_error_code irplib_sdp_spectrum_reset_exptime(irplib_sdp_spectrum *self);
169 cpl_error_code irplib_sdp_spectrum_set_exptime(irplib_sdp_spectrum *self,
170  double value);
171 cpl_error_code irplib_sdp_spectrum_copy_exptime(irplib_sdp_spectrum *self,
172  const cpl_propertylist *plist,
173  const char *name);
174 
175 double irplib_sdp_spectrum_get_texptime(const irplib_sdp_spectrum *self);
176 cpl_error_code irplib_sdp_spectrum_reset_texptime(irplib_sdp_spectrum *self);
177 cpl_error_code irplib_sdp_spectrum_set_texptime(irplib_sdp_spectrum *self,
178  double value);
179 cpl_error_code irplib_sdp_spectrum_copy_texptime(irplib_sdp_spectrum *self,
180  const cpl_propertylist *plist,
181  const char *name);
182 
183 double irplib_sdp_spectrum_get_mjdobs(const irplib_sdp_spectrum *self);
184 cpl_error_code irplib_sdp_spectrum_reset_mjdobs(irplib_sdp_spectrum *self);
185 cpl_error_code irplib_sdp_spectrum_set_mjdobs(irplib_sdp_spectrum *self,
186  double value);
187 cpl_error_code irplib_sdp_spectrum_copy_mjdobs(irplib_sdp_spectrum *self,
188  const cpl_propertylist *plist,
189  const char *name);
190 
191 const char * irplib_sdp_spectrum_get_timesys(const irplib_sdp_spectrum *self);
192 cpl_error_code irplib_sdp_spectrum_reset_timesys(irplib_sdp_spectrum *self);
193 cpl_error_code irplib_sdp_spectrum_set_timesys(irplib_sdp_spectrum *self,
194  const char *value);
195 cpl_error_code irplib_sdp_spectrum_copy_timesys(irplib_sdp_spectrum *self,
196  const cpl_propertylist *plist,
197  const char *name);
198 
199 double irplib_sdp_spectrum_get_mjdend(const irplib_sdp_spectrum *self);
200 cpl_error_code irplib_sdp_spectrum_reset_mjdend(irplib_sdp_spectrum *self);
201 cpl_error_code irplib_sdp_spectrum_set_mjdend(irplib_sdp_spectrum *self,
202  double value);
203 cpl_error_code irplib_sdp_spectrum_copy_mjdend(irplib_sdp_spectrum *self,
204  const cpl_propertylist *plist,
205  const char *name);
206 
207 int irplib_sdp_spectrum_get_prodlvl(const irplib_sdp_spectrum *self);
208 cpl_error_code irplib_sdp_spectrum_reset_prodlvl(irplib_sdp_spectrum *self);
209 cpl_error_code irplib_sdp_spectrum_set_prodlvl(irplib_sdp_spectrum *self,
210  int value);
211 cpl_error_code irplib_sdp_spectrum_copy_prodlvl(irplib_sdp_spectrum *self,
212  const cpl_propertylist *plist,
213  const char *name);
214 
215 const char * irplib_sdp_spectrum_get_procsoft(const irplib_sdp_spectrum *self);
216 cpl_error_code irplib_sdp_spectrum_reset_procsoft(irplib_sdp_spectrum *self);
217 cpl_error_code irplib_sdp_spectrum_set_procsoft(irplib_sdp_spectrum *self,
218  const char *value);
219 cpl_error_code irplib_sdp_spectrum_copy_procsoft(irplib_sdp_spectrum *self,
220  const cpl_propertylist *plist,
221  const char *name);
222 
223 const char * irplib_sdp_spectrum_get_prodcatg(const irplib_sdp_spectrum *self);
224 cpl_error_code irplib_sdp_spectrum_reset_prodcatg(irplib_sdp_spectrum *self);
225 cpl_error_code irplib_sdp_spectrum_set_prodcatg(irplib_sdp_spectrum *self,
226  const char *value);
227 cpl_error_code irplib_sdp_spectrum_copy_prodcatg(irplib_sdp_spectrum *self,
228  const cpl_propertylist *plist,
229  const char *name);
230 
231 const char * irplib_sdp_spectrum_get_origin(const irplib_sdp_spectrum *self);
232 cpl_error_code irplib_sdp_spectrum_reset_origin(irplib_sdp_spectrum *self);
233 cpl_error_code irplib_sdp_spectrum_set_origin(irplib_sdp_spectrum *self,
234  const char *value);
235 cpl_error_code irplib_sdp_spectrum_copy_origin(irplib_sdp_spectrum *self,
236  const cpl_propertylist *plist,
237  const char *name);
238 
239 cpl_boolean irplib_sdp_spectrum_get_extobj(const irplib_sdp_spectrum *self);
240 cpl_error_code irplib_sdp_spectrum_reset_extobj(irplib_sdp_spectrum *self);
241 cpl_error_code irplib_sdp_spectrum_set_extobj(irplib_sdp_spectrum *self,
242  cpl_boolean value);
243 cpl_error_code irplib_sdp_spectrum_copy_extobj(irplib_sdp_spectrum *self,
244  const cpl_propertylist *plist,
245  const char *name);
246 
247 const char * irplib_sdp_spectrum_get_dispelem(const irplib_sdp_spectrum *self);
248 cpl_error_code irplib_sdp_spectrum_reset_dispelem(irplib_sdp_spectrum *self);
249 cpl_error_code irplib_sdp_spectrum_set_dispelem(irplib_sdp_spectrum *self,
250  const char *value);
251 cpl_error_code irplib_sdp_spectrum_copy_dispelem(irplib_sdp_spectrum *self,
252  const cpl_propertylist *plist,
253  const char *name);
254 
255 const char * irplib_sdp_spectrum_get_specsys(const irplib_sdp_spectrum *self);
256 cpl_error_code irplib_sdp_spectrum_reset_specsys(irplib_sdp_spectrum *self);
257 cpl_error_code irplib_sdp_spectrum_set_specsys(irplib_sdp_spectrum *self,
258  const char *value);
259 cpl_error_code irplib_sdp_spectrum_copy_specsys(irplib_sdp_spectrum *self,
260  const cpl_propertylist *plist,
261  const char *name);
262 
263 const char * irplib_sdp_spectrum_get_progid(const irplib_sdp_spectrum *self);
264 cpl_error_code irplib_sdp_spectrum_reset_progid(irplib_sdp_spectrum *self);
265 cpl_error_code irplib_sdp_spectrum_set_progid(irplib_sdp_spectrum *self,
266  const char *value);
267 cpl_error_code irplib_sdp_spectrum_copy_progid(irplib_sdp_spectrum *self,
268  const cpl_propertylist *plist,
269  const char *name);
270 
271 int irplib_sdp_spectrum_get_obid(const irplib_sdp_spectrum *self,
272  cpl_size index);
273 cpl_error_code irplib_sdp_spectrum_reset_obid(irplib_sdp_spectrum *self,
274  cpl_size index);
275 cpl_error_code irplib_sdp_spectrum_set_obid(irplib_sdp_spectrum *self,
276  cpl_size index, int value);
277 cpl_error_code irplib_sdp_spectrum_copy_obid(irplib_sdp_spectrum *self,
278  cpl_size index,
279  const cpl_propertylist *plist,
280  const char *name);
281 
282 cpl_boolean irplib_sdp_spectrum_get_mepoch(const irplib_sdp_spectrum *self);
283 cpl_error_code irplib_sdp_spectrum_reset_mepoch(irplib_sdp_spectrum *self);
284 cpl_error_code irplib_sdp_spectrum_set_mepoch(irplib_sdp_spectrum *self,
285  cpl_boolean value);
286 cpl_error_code irplib_sdp_spectrum_copy_mepoch(irplib_sdp_spectrum *self,
287  const cpl_propertylist *plist,
288  const char *name);
289 
290 const char * irplib_sdp_spectrum_get_obstech(const irplib_sdp_spectrum *self);
291 cpl_error_code irplib_sdp_spectrum_reset_obstech(irplib_sdp_spectrum *self);
292 cpl_error_code irplib_sdp_spectrum_set_obstech(irplib_sdp_spectrum *self,
293  const char *value);
294 cpl_error_code irplib_sdp_spectrum_copy_obstech(irplib_sdp_spectrum *self,
295  const cpl_propertylist *plist,
296  const char *name);
297 
298 const char * irplib_sdp_spectrum_get_fluxcal(const irplib_sdp_spectrum *self);
299 cpl_error_code irplib_sdp_spectrum_reset_fluxcal(irplib_sdp_spectrum *self);
300 cpl_error_code irplib_sdp_spectrum_set_fluxcal(irplib_sdp_spectrum *self,
301  const char *value);
302 cpl_error_code irplib_sdp_spectrum_copy_fluxcal(irplib_sdp_spectrum *self,
303  const cpl_propertylist *plist,
304  const char *name);
305 
306 cpl_boolean irplib_sdp_spectrum_get_contnorm(const irplib_sdp_spectrum *self);
307 cpl_error_code irplib_sdp_spectrum_reset_contnorm(irplib_sdp_spectrum *self);
308 cpl_error_code irplib_sdp_spectrum_set_contnorm(irplib_sdp_spectrum *self,
309  cpl_boolean value);
310 cpl_error_code irplib_sdp_spectrum_copy_contnorm(irplib_sdp_spectrum *self,
311  const cpl_propertylist *plist,
312  const char *name);
313 
314 double irplib_sdp_spectrum_get_wavelmin(const irplib_sdp_spectrum *self);
315 cpl_error_code irplib_sdp_spectrum_reset_wavelmin(irplib_sdp_spectrum *self);
316 cpl_error_code irplib_sdp_spectrum_set_wavelmin(irplib_sdp_spectrum *self,
317  double value);
318 cpl_error_code irplib_sdp_spectrum_copy_wavelmin(irplib_sdp_spectrum *self,
319  const cpl_propertylist *plist,
320  const char *name);
321 
322 double irplib_sdp_spectrum_get_wavelmax(const irplib_sdp_spectrum *self);
323 cpl_error_code irplib_sdp_spectrum_reset_wavelmax(irplib_sdp_spectrum *self);
324 cpl_error_code irplib_sdp_spectrum_set_wavelmax(irplib_sdp_spectrum *self,
325  double value);
326 cpl_error_code irplib_sdp_spectrum_copy_wavelmax(irplib_sdp_spectrum *self,
327  const cpl_propertylist *plist,
328  const char *name);
329 
330 double irplib_sdp_spectrum_get_specbin(const irplib_sdp_spectrum *self);
331 cpl_error_code irplib_sdp_spectrum_reset_specbin(irplib_sdp_spectrum *self);
332 cpl_error_code irplib_sdp_spectrum_set_specbin(irplib_sdp_spectrum *self,
333  double value);
334 cpl_error_code irplib_sdp_spectrum_copy_specbin(irplib_sdp_spectrum *self,
335  const cpl_propertylist *plist,
336  const char *name);
337 
338 cpl_boolean irplib_sdp_spectrum_get_totflux(const irplib_sdp_spectrum *self);
339 cpl_error_code irplib_sdp_spectrum_reset_totflux(irplib_sdp_spectrum *self);
340 cpl_error_code irplib_sdp_spectrum_set_totflux(irplib_sdp_spectrum *self,
341  cpl_boolean value);
342 cpl_error_code irplib_sdp_spectrum_copy_totflux(irplib_sdp_spectrum *self,
343  const cpl_propertylist *plist,
344  const char *name);
345 
346 double irplib_sdp_spectrum_get_fluxerr(const irplib_sdp_spectrum *self);
347 cpl_error_code irplib_sdp_spectrum_reset_fluxerr(irplib_sdp_spectrum *self);
348 cpl_error_code irplib_sdp_spectrum_set_fluxerr(irplib_sdp_spectrum *self,
349  double value);
350 cpl_error_code irplib_sdp_spectrum_copy_fluxerr(irplib_sdp_spectrum *self,
351  const cpl_propertylist *plist,
352  const char *name);
353 
354 const char * irplib_sdp_spectrum_get_referenc(const irplib_sdp_spectrum *self);
355 cpl_error_code irplib_sdp_spectrum_reset_referenc(irplib_sdp_spectrum *self);
356 cpl_error_code irplib_sdp_spectrum_set_referenc(irplib_sdp_spectrum *self,
357  const char *value);
358 cpl_error_code irplib_sdp_spectrum_copy_referenc(irplib_sdp_spectrum *self,
359  const cpl_propertylist *plist,
360  const char *name);
361 
362 double irplib_sdp_spectrum_get_specres(const irplib_sdp_spectrum *self);
363 cpl_error_code irplib_sdp_spectrum_reset_specres(irplib_sdp_spectrum *self);
364 cpl_error_code irplib_sdp_spectrum_set_specres(irplib_sdp_spectrum *self,
365  double value);
366 cpl_error_code irplib_sdp_spectrum_copy_specres(irplib_sdp_spectrum *self,
367  const cpl_propertylist *plist,
368  const char *name);
369 
370 double irplib_sdp_spectrum_get_specerr(const irplib_sdp_spectrum *self);
371 cpl_error_code irplib_sdp_spectrum_reset_specerr(irplib_sdp_spectrum *self);
372 cpl_error_code irplib_sdp_spectrum_set_specerr(irplib_sdp_spectrum *self,
373  double value);
374 cpl_error_code irplib_sdp_spectrum_copy_specerr(irplib_sdp_spectrum *self,
375  const cpl_propertylist *plist,
376  const char *name);
377 
378 double irplib_sdp_spectrum_get_specsye(const irplib_sdp_spectrum *self);
379 cpl_error_code irplib_sdp_spectrum_reset_specsye(irplib_sdp_spectrum *self);
380 cpl_error_code irplib_sdp_spectrum_set_specsye(irplib_sdp_spectrum *self,
381  double value);
382 cpl_error_code irplib_sdp_spectrum_copy_specsye(irplib_sdp_spectrum *self,
383  const cpl_propertylist *plist,
384  const char *name);
385 
386 int irplib_sdp_spectrum_get_lamnlin(const irplib_sdp_spectrum *self);
387 cpl_error_code irplib_sdp_spectrum_reset_lamnlin(irplib_sdp_spectrum *self);
388 cpl_error_code irplib_sdp_spectrum_set_lamnlin(irplib_sdp_spectrum *self,
389  int value);
390 cpl_error_code irplib_sdp_spectrum_copy_lamnlin(irplib_sdp_spectrum *self,
391  const cpl_propertylist *plist,
392  const char *name);
393 
394 double irplib_sdp_spectrum_get_lamrms(const irplib_sdp_spectrum *self);
395 cpl_error_code irplib_sdp_spectrum_reset_lamrms(irplib_sdp_spectrum *self);
396 cpl_error_code irplib_sdp_spectrum_set_lamrms(irplib_sdp_spectrum *self,
397  double value);
398 cpl_error_code irplib_sdp_spectrum_copy_lamrms(irplib_sdp_spectrum *self,
399  const cpl_propertylist *plist,
400  const char *name);
401 
402 double irplib_sdp_spectrum_get_gain(const irplib_sdp_spectrum *self);
403 cpl_error_code irplib_sdp_spectrum_reset_gain(irplib_sdp_spectrum *self);
404 cpl_error_code irplib_sdp_spectrum_set_gain(irplib_sdp_spectrum *self,
405  double value);
406 cpl_error_code irplib_sdp_spectrum_copy_gain(irplib_sdp_spectrum *self,
407  const cpl_propertylist *plist,
408  const char *name);
409 
410 double irplib_sdp_spectrum_get_detron(const irplib_sdp_spectrum *self);
411 cpl_error_code irplib_sdp_spectrum_reset_detron(irplib_sdp_spectrum *self);
412 cpl_error_code irplib_sdp_spectrum_set_detron(irplib_sdp_spectrum *self,
413  double value);
414 cpl_error_code irplib_sdp_spectrum_copy_detron(irplib_sdp_spectrum *self,
415  const cpl_propertylist *plist,
416  const char *name);
417 
418 double irplib_sdp_spectrum_get_effron(const irplib_sdp_spectrum *self);
419 cpl_error_code irplib_sdp_spectrum_reset_effron(irplib_sdp_spectrum *self);
420 cpl_error_code irplib_sdp_spectrum_set_effron(irplib_sdp_spectrum *self,
421  double value);
422 cpl_error_code irplib_sdp_spectrum_copy_effron(irplib_sdp_spectrum *self,
423  const cpl_propertylist *plist,
424  const char *name);
425 
426 double irplib_sdp_spectrum_get_snr(const irplib_sdp_spectrum *self);
427 cpl_error_code irplib_sdp_spectrum_reset_snr(irplib_sdp_spectrum *self);
428 cpl_error_code irplib_sdp_spectrum_set_snr(irplib_sdp_spectrum *self,
429  double value);
430 cpl_error_code irplib_sdp_spectrum_copy_snr(irplib_sdp_spectrum *self,
431  const cpl_propertylist *plist,
432  const char *name);
433 
434 int irplib_sdp_spectrum_get_ncombine(const irplib_sdp_spectrum *self);
435 cpl_error_code irplib_sdp_spectrum_reset_ncombine(irplib_sdp_spectrum *self);
436 cpl_error_code irplib_sdp_spectrum_set_ncombine(irplib_sdp_spectrum *self,
437  int value);
438 cpl_error_code irplib_sdp_spectrum_copy_ncombine(irplib_sdp_spectrum *self,
439  const cpl_propertylist *plist,
440  const char *name);
441 
442 const char * irplib_sdp_spectrum_get_prov(const irplib_sdp_spectrum *self,
443  cpl_size index);
444 cpl_error_code irplib_sdp_spectrum_reset_prov(irplib_sdp_spectrum *self,
445  cpl_size index);
446 cpl_error_code irplib_sdp_spectrum_set_prov(irplib_sdp_spectrum *self,
447  cpl_size index, const char *value);
448 cpl_error_code irplib_sdp_spectrum_copy_prov(irplib_sdp_spectrum *self,
449  cpl_size index,
450  const cpl_propertylist *plist,
451  const char *name);
452 cpl_error_code irplib_sdp_spectrum_append_prov(irplib_sdp_spectrum *self,
453  cpl_size firstindex,
454  const cpl_frameset *frames);
455 
456 const char * irplib_sdp_spectrum_get_asson(const irplib_sdp_spectrum *self,
457  cpl_size index);
458 cpl_error_code irplib_sdp_spectrum_reset_asson(irplib_sdp_spectrum *self,
459  cpl_size index);
460 cpl_error_code irplib_sdp_spectrum_set_asson(irplib_sdp_spectrum *self,
461  cpl_size index, const char *value);
462 cpl_error_code irplib_sdp_spectrum_copy_asson(irplib_sdp_spectrum *self,
463  cpl_size index,
464  const cpl_propertylist *plist,
465  const char *name);
466 
467 const char * irplib_sdp_spectrum_get_assoc(const irplib_sdp_spectrum *self,
468  cpl_size index);
469 cpl_error_code irplib_sdp_spectrum_reset_assoc(irplib_sdp_spectrum *self,
470  cpl_size index);
471 cpl_error_code irplib_sdp_spectrum_set_assoc(irplib_sdp_spectrum *self,
472  cpl_size index, const char *value);
473 cpl_error_code irplib_sdp_spectrum_copy_assoc(irplib_sdp_spectrum *self,
474  cpl_size index,
475  const cpl_propertylist *plist,
476  const char *name);
477 
478 const char * irplib_sdp_spectrum_get_assom(const irplib_sdp_spectrum *self,
479  cpl_size index);
480 cpl_error_code irplib_sdp_spectrum_reset_assom(irplib_sdp_spectrum *self,
481  cpl_size index);
482 cpl_error_code irplib_sdp_spectrum_set_assom(irplib_sdp_spectrum *self,
483  cpl_size index, const char *value);
484 cpl_error_code irplib_sdp_spectrum_copy_assom(irplib_sdp_spectrum *self,
485  cpl_size index,
486  const cpl_propertylist *plist,
487  const char *name);
488 
489 const char * irplib_sdp_spectrum_get_voclass(const irplib_sdp_spectrum *self);
490 cpl_error_code irplib_sdp_spectrum_reset_voclass(irplib_sdp_spectrum *self);
491 cpl_error_code irplib_sdp_spectrum_set_voclass(irplib_sdp_spectrum *self,
492  const char *value);
493 cpl_error_code irplib_sdp_spectrum_copy_voclass(irplib_sdp_spectrum *self,
494  const cpl_propertylist *plist,
495  const char *name);
496 
497 const char * irplib_sdp_spectrum_get_vopub(const irplib_sdp_spectrum *self);
498 cpl_error_code irplib_sdp_spectrum_reset_vopub(irplib_sdp_spectrum *self);
499 cpl_error_code irplib_sdp_spectrum_set_vopub(irplib_sdp_spectrum *self,
500  const char *value);
501 cpl_error_code irplib_sdp_spectrum_copy_vopub(irplib_sdp_spectrum *self,
502  const cpl_propertylist *plist,
503  const char *name);
504 
505 const char * irplib_sdp_spectrum_get_title(const irplib_sdp_spectrum *self);
506 cpl_error_code irplib_sdp_spectrum_reset_title(irplib_sdp_spectrum *self);
507 cpl_error_code irplib_sdp_spectrum_set_title(irplib_sdp_spectrum *self,
508  const char *value);
509 cpl_error_code irplib_sdp_spectrum_copy_title(irplib_sdp_spectrum *self,
510  const cpl_propertylist *plist,
511  const char *name);
512 
513 const char * irplib_sdp_spectrum_get_object(const irplib_sdp_spectrum *self);
514 cpl_error_code irplib_sdp_spectrum_reset_object(irplib_sdp_spectrum *self);
515 cpl_error_code irplib_sdp_spectrum_set_object(irplib_sdp_spectrum *self,
516  const char *value);
517 cpl_error_code irplib_sdp_spectrum_copy_object(irplib_sdp_spectrum *self,
518  const cpl_propertylist *plist,
519  const char *name);
520 
521 double irplib_sdp_spectrum_get_aperture(const irplib_sdp_spectrum *self);
522 cpl_error_code irplib_sdp_spectrum_reset_aperture(irplib_sdp_spectrum *self);
523 cpl_error_code irplib_sdp_spectrum_set_aperture(irplib_sdp_spectrum *self,
524  double value);
525 cpl_error_code irplib_sdp_spectrum_copy_aperture(irplib_sdp_spectrum *self,
526  const cpl_propertylist *plist,
527  const char *name);
528 
529 double irplib_sdp_spectrum_get_telapse(const irplib_sdp_spectrum *self);
530 cpl_error_code irplib_sdp_spectrum_reset_telapse(irplib_sdp_spectrum *self);
531 cpl_error_code irplib_sdp_spectrum_set_telapse(irplib_sdp_spectrum *self,
532  double value);
533 cpl_error_code irplib_sdp_spectrum_copy_telapse(irplib_sdp_spectrum *self,
534  const cpl_propertylist *plist,
535  const char *name);
536 
537 double irplib_sdp_spectrum_get_tmid(const irplib_sdp_spectrum *self);
538 cpl_error_code irplib_sdp_spectrum_reset_tmid(irplib_sdp_spectrum *self);
539 cpl_error_code irplib_sdp_spectrum_set_tmid(irplib_sdp_spectrum *self,
540  double value);
541 cpl_error_code irplib_sdp_spectrum_copy_tmid(irplib_sdp_spectrum *self,
542  const cpl_propertylist *plist,
543  const char *name);
544 
545 double irplib_sdp_spectrum_get_specval(const irplib_sdp_spectrum *self);
546 cpl_error_code irplib_sdp_spectrum_reset_specval(irplib_sdp_spectrum *self);
547 cpl_error_code irplib_sdp_spectrum_set_specval(irplib_sdp_spectrum *self,
548  double value);
549 cpl_error_code irplib_sdp_spectrum_copy_specval(irplib_sdp_spectrum *self,
550  const cpl_propertylist *plist,
551  const char *name);
552 
553 double irplib_sdp_spectrum_get_specbw(const irplib_sdp_spectrum *self);
554 cpl_error_code irplib_sdp_spectrum_reset_specbw(irplib_sdp_spectrum *self);
555 cpl_error_code irplib_sdp_spectrum_set_specbw(irplib_sdp_spectrum *self,
556  double value);
557 cpl_error_code irplib_sdp_spectrum_copy_specbw(irplib_sdp_spectrum *self,
558  const cpl_propertylist *plist,
559  const char *name);
560 
561 const char * irplib_sdp_spectrum_get_extname(const irplib_sdp_spectrum *self);
562 cpl_error_code irplib_sdp_spectrum_reset_extname(irplib_sdp_spectrum *self);
563 cpl_error_code irplib_sdp_spectrum_set_extname(irplib_sdp_spectrum *self,
564  const char *value);
565 cpl_error_code irplib_sdp_spectrum_copy_extname(irplib_sdp_spectrum *self,
566  const cpl_propertylist *plist,
567  const char *name);
568 
569 cpl_boolean irplib_sdp_spectrum_get_inherit(const irplib_sdp_spectrum *self);
570 cpl_error_code irplib_sdp_spectrum_reset_inherit(irplib_sdp_spectrum *self);
571 cpl_error_code irplib_sdp_spectrum_set_inherit(irplib_sdp_spectrum *self,
572  cpl_boolean value);
573 cpl_error_code irplib_sdp_spectrum_copy_inherit(irplib_sdp_spectrum *self,
574  const cpl_propertylist *plist,
575  const char *name);
576 
577 cpl_size irplib_sdp_spectrum_get_nelem(const irplib_sdp_spectrum *self);
578 cpl_error_code irplib_sdp_spectrum_reset_nelem(irplib_sdp_spectrum *self);
579 cpl_error_code irplib_sdp_spectrum_set_nelem(irplib_sdp_spectrum *self,
580  cpl_size value);
581 cpl_error_code irplib_sdp_spectrum_copy_nelem(irplib_sdp_spectrum *self,
582  const cpl_propertylist *plist,
583  const char *name);
584 
585 double irplib_sdp_spectrum_get_tdmin(const irplib_sdp_spectrum *self);
586 cpl_error_code irplib_sdp_spectrum_reset_tdmin(irplib_sdp_spectrum *self);
587 cpl_error_code irplib_sdp_spectrum_set_tdmin(irplib_sdp_spectrum *self,
588  double value);
589 cpl_error_code irplib_sdp_spectrum_copy_tdmin(irplib_sdp_spectrum *self,
590  const cpl_propertylist *plist,
591  const char *name);
592 
593 double irplib_sdp_spectrum_get_tdmax(const irplib_sdp_spectrum *self);
594 cpl_error_code irplib_sdp_spectrum_reset_tdmax(irplib_sdp_spectrum *self);
595 cpl_error_code irplib_sdp_spectrum_set_tdmax(irplib_sdp_spectrum *self,
596  double value);
597 cpl_error_code irplib_sdp_spectrum_copy_tdmax(irplib_sdp_spectrum *self,
598  const cpl_propertylist *plist,
599  const char *name);
600 
601 /*
602  * Column manipulation functions.
603  */
604 
605 cpl_size irplib_sdp_spectrum_get_ncol(const irplib_sdp_spectrum *self);
606 
607 cpl_boolean irplib_sdp_spectrum_has_column(const irplib_sdp_spectrum *self,
608  const char* name);
609 
610 cpl_array *
611 irplib_sdp_spectrum_get_column_names(const irplib_sdp_spectrum *self);
612 
613 cpl_error_code
614 irplib_sdp_spectrum_new_column(irplib_sdp_spectrum *self, const char *name,
615  cpl_type type);
616 
617 cpl_error_code
618 irplib_sdp_spectrum_add_column(irplib_sdp_spectrum *self, const char *name,
619  cpl_type type, const char *unit,
620  const char *format, const char *tutyp,
621  const char *tucd, const cpl_array *data);
622 
623 cpl_error_code
624 irplib_sdp_spectrum_copy_column(irplib_sdp_spectrum *self,
625  const cpl_table* table, const char *name);
626 
627 cpl_error_code
628 irplib_sdp_spectrum_copy_column_regexp(irplib_sdp_spectrum *self,
629  const cpl_table* table,
630  const char *regexp, int invert);
631 
632 cpl_error_code
633 irplib_sdp_spectrum_update_column(irplib_sdp_spectrum *self, const char *name,
634  const cpl_table* table, const char *colname,
635  int flags);
636 
637 cpl_error_code
638 irplib_sdp_spectrum_delete_column(irplib_sdp_spectrum *self, const char *name);
639 
640 cpl_type irplib_sdp_spectrum_get_column_type(const irplib_sdp_spectrum *self,
641  const char *name);
642 
643 const char *
644 irplib_sdp_spectrum_get_column_unit(const irplib_sdp_spectrum *self,
645  const char *name);
646 
647 cpl_error_code
648 irplib_sdp_spectrum_set_column_unit(irplib_sdp_spectrum *self,
649  const char *name, const char *unit);
650 
651 cpl_error_code
652 irplib_sdp_spectrum_copy_column_unit(irplib_sdp_spectrum *self,
653  const char *name,
654  const cpl_propertylist *plist,
655  const char *key);
656 
657 const char *
658 irplib_sdp_spectrum_get_column_format(const irplib_sdp_spectrum *self,
659  const char *name);
660 
661 cpl_error_code
662 irplib_sdp_spectrum_set_column_format(irplib_sdp_spectrum *self,
663  const char *name, const char *format);
664 
665 const char *
666 irplib_sdp_spectrum_get_column_tutyp(const irplib_sdp_spectrum *self,
667  const char *name);
668 
669 cpl_error_code
670 irplib_sdp_spectrum_set_column_tutyp(irplib_sdp_spectrum *self,
671  const char *name, const char *tutyp);
672 
673 cpl_error_code
674 irplib_sdp_spectrum_copy_column_tutyp(irplib_sdp_spectrum *self,
675  const char *name,
676  const cpl_propertylist *plist,
677  const char *key);
678 
679 const char *
680 irplib_sdp_spectrum_get_column_tucd(const irplib_sdp_spectrum *self,
681  const char *name);
682 
683 cpl_error_code
684 irplib_sdp_spectrum_set_column_tucd(irplib_sdp_spectrum *self,
685  const char *name, const char *tucd);
686 
687 cpl_error_code
688 irplib_sdp_spectrum_copy_column_tucd(irplib_sdp_spectrum *self,
689  const char *name,
690  const cpl_propertylist *plist,
691  const char *key);
692 
693 const char *
694 irplib_sdp_spectrum_get_column_tcomm(const irplib_sdp_spectrum *self,
695  const char *name);
696 
697 cpl_error_code
698 irplib_sdp_spectrum_set_column_tcomm(irplib_sdp_spectrum *self,
699  const char *name, const char *tcomm);
700 
701 cpl_error_code
702 irplib_sdp_spectrum_copy_column_tcomm(irplib_sdp_spectrum *self,
703  const char *name,
704  const cpl_propertylist *plist,
705  const char *key);
706 
707 const cpl_array *
708 irplib_sdp_spectrum_get_column_data(const irplib_sdp_spectrum *self,
709  const char *name);
710 
711 cpl_error_code
712 irplib_sdp_spectrum_set_column_data(irplib_sdp_spectrum *self,
713  const char *name, const cpl_array *array);
714 
715 /*
716  * Methods for loading and saving a spectrum object.
717  */
718 
719 irplib_sdp_spectrum * irplib_sdp_spectrum_load(const char *filename);
720 
721 cpl_error_code irplib_sdp_spectrum_save(const irplib_sdp_spectrum *self,
722  const char *filename,
723  const cpl_propertylist *extra_pheader,
724  const cpl_propertylist *extra_header);
725 
726 cpl_error_code irplib_dfs_save_spectrum(cpl_frameset * allframes,
727  cpl_propertylist * header,
728  const cpl_parameterlist * parlist,
729  const cpl_frameset * usedframes,
730  const cpl_frame * inherit,
731  const irplib_sdp_spectrum * spectrum,
732  const char * recipe,
733  const cpl_propertylist * applist,
734  const cpl_propertylist * tablelist,
735  const char * remregexp,
736  const char * pipe_id,
737  const char * dict_id,
738  const char * filename);
739 
740 /*
741  * Dump function for debugging.
742  */
743 
744 void irplib_sdp_spectrum_dump(const irplib_sdp_spectrum *self, FILE *stream);
745 
746 /*
747  * Additional useful helper functions.
748  */
749 
750 # ifdef IRPLIB_USE_FITS_UPDATE_CHECKSUM
751 
752 /* NOTE: if one wants to use the following function the preprocessor macro
753  * IRPLIB_USE_FITS_UPDATE_CHECKSUM must be defined when including this file and
754  * when compiling the libirplib.a library. In addition, there will be a
755  * dependency introduced to cfitsio in libirplib.a and any binary linking
756  * against it. This will require adding the appropriate linker flags when
757  * building such libraries.
758  * The easiest way to add the IRPLIB_USE_FITS_UPDATE_CHECKSUM macro is to add
759  * the following lines to either the acinclude.m4 or configure.ac files of the
760  * parent pipeline project:
761  * IRPLIB_CPPFLAGS='-DIRPLIB_USE_FITS_UPDATE_CHECKSUM'
762  * AC_SUBST(IRPLIB_CPPFLAGS)
763  */
764 cpl_error_code irplib_fits_update_checksums(const char* filename);
765 
766 # endif /* IRPLIB_USE_FITS_UPDATE_CHECKSUM */
767 
768 CPL_END_DECLS
769 
770 #endif /* IRPLIB_SDP_SPECTRUM_H */
enum _irplib_sdp_spectrum_update_flags_ irplib_sdp_spectrum_update_flags
Bitfield flags for the column update function.
_irplib_sdp_spectrum_update_flags_
Bitfield flags for the column update function.
struct _irplib_sdp_spectrum_ irplib_sdp_spectrum
Data type for a Science Data Product 1D spectrum.