CR2RE Pipeline Reference Manual 1.6.7
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
30CPL_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
81typedef 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
107irplib_sdp_spectrum * irplib_sdp_spectrum_new(void) CPL_ATTR_ALLOC;
108
110irplib_sdp_spectrum_duplicate(const irplib_sdp_spectrum *other) CPL_ATTR_ALLOC;
111
112void irplib_sdp_spectrum_delete(irplib_sdp_spectrum *self);
113
114/*
115 * Method to compare two spectra.
116 */
117
118cpl_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 */
125cpl_size irplib_sdp_spectrum_count_obid(const irplib_sdp_spectrum *self);
126cpl_size irplib_sdp_spectrum_count_prov(const irplib_sdp_spectrum *self);
127cpl_size irplib_sdp_spectrum_count_asson(const irplib_sdp_spectrum *self);
128cpl_size irplib_sdp_spectrum_count_assoc(const irplib_sdp_spectrum *self);
129cpl_size irplib_sdp_spectrum_count_assom(const irplib_sdp_spectrum *self);
130
131/*
132 * Methods to copy keyword values from property objects.
133 */
134cpl_error_code irplib_sdp_spectrum_copy_keyword(irplib_sdp_spectrum *self,
135 const cpl_propertylist *plist,
136 const char *name);
137
138cpl_error_code irplib_sdp_spectrum_copy_property(irplib_sdp_spectrum *self,
139 const cpl_property *prop);
140
141cpl_error_code irplib_sdp_spectrum_copy_property_regexp(
143 const cpl_propertylist *plist,
144 const char *regexp,
145 int invert);
146
147/*
148 * Get/set methods for keywords.
149 */
150
151double irplib_sdp_spectrum_get_ra(const irplib_sdp_spectrum *self);
152cpl_error_code irplib_sdp_spectrum_reset_ra(irplib_sdp_spectrum *self);
153cpl_error_code irplib_sdp_spectrum_set_ra(irplib_sdp_spectrum *self,
154 double value);
155cpl_error_code irplib_sdp_spectrum_copy_ra(irplib_sdp_spectrum *self,
156 const cpl_propertylist *plist,
157 const char *name);
158
159double irplib_sdp_spectrum_get_dec(const irplib_sdp_spectrum *self);
160cpl_error_code irplib_sdp_spectrum_reset_dec(irplib_sdp_spectrum *self);
161cpl_error_code irplib_sdp_spectrum_set_dec(irplib_sdp_spectrum *self,
162 double value);
163cpl_error_code irplib_sdp_spectrum_copy_dec(irplib_sdp_spectrum *self,
164 const cpl_propertylist *plist,
165 const char *name);
166
167double irplib_sdp_spectrum_get_exptime(const irplib_sdp_spectrum *self);
168cpl_error_code irplib_sdp_spectrum_reset_exptime(irplib_sdp_spectrum *self);
169cpl_error_code irplib_sdp_spectrum_set_exptime(irplib_sdp_spectrum *self,
170 double value);
171cpl_error_code irplib_sdp_spectrum_copy_exptime(irplib_sdp_spectrum *self,
172 const cpl_propertylist *plist,
173 const char *name);
174
175double irplib_sdp_spectrum_get_texptime(const irplib_sdp_spectrum *self);
176cpl_error_code irplib_sdp_spectrum_reset_texptime(irplib_sdp_spectrum *self);
177cpl_error_code irplib_sdp_spectrum_set_texptime(irplib_sdp_spectrum *self,
178 double value);
179cpl_error_code irplib_sdp_spectrum_copy_texptime(irplib_sdp_spectrum *self,
180 const cpl_propertylist *plist,
181 const char *name);
182
183double irplib_sdp_spectrum_get_mjdobs(const irplib_sdp_spectrum *self);
184cpl_error_code irplib_sdp_spectrum_reset_mjdobs(irplib_sdp_spectrum *self);
185cpl_error_code irplib_sdp_spectrum_set_mjdobs(irplib_sdp_spectrum *self,
186 double value);
187cpl_error_code irplib_sdp_spectrum_copy_mjdobs(irplib_sdp_spectrum *self,
188 const cpl_propertylist *plist,
189 const char *name);
190
191const char * irplib_sdp_spectrum_get_timesys(const irplib_sdp_spectrum *self);
192cpl_error_code irplib_sdp_spectrum_reset_timesys(irplib_sdp_spectrum *self);
193cpl_error_code irplib_sdp_spectrum_set_timesys(irplib_sdp_spectrum *self,
194 const char *value);
195cpl_error_code irplib_sdp_spectrum_copy_timesys(irplib_sdp_spectrum *self,
196 const cpl_propertylist *plist,
197 const char *name);
198
199double irplib_sdp_spectrum_get_mjdend(const irplib_sdp_spectrum *self);
200cpl_error_code irplib_sdp_spectrum_reset_mjdend(irplib_sdp_spectrum *self);
201cpl_error_code irplib_sdp_spectrum_set_mjdend(irplib_sdp_spectrum *self,
202 double value);
203cpl_error_code irplib_sdp_spectrum_copy_mjdend(irplib_sdp_spectrum *self,
204 const cpl_propertylist *plist,
205 const char *name);
206
207int irplib_sdp_spectrum_get_prodlvl(const irplib_sdp_spectrum *self);
208cpl_error_code irplib_sdp_spectrum_reset_prodlvl(irplib_sdp_spectrum *self);
209cpl_error_code irplib_sdp_spectrum_set_prodlvl(irplib_sdp_spectrum *self,
210 int value);
211cpl_error_code irplib_sdp_spectrum_copy_prodlvl(irplib_sdp_spectrum *self,
212 const cpl_propertylist *plist,
213 const char *name);
214
215const char * irplib_sdp_spectrum_get_procsoft(const irplib_sdp_spectrum *self);
216cpl_error_code irplib_sdp_spectrum_reset_procsoft(irplib_sdp_spectrum *self);
217cpl_error_code irplib_sdp_spectrum_set_procsoft(irplib_sdp_spectrum *self,
218 const char *value);
219cpl_error_code irplib_sdp_spectrum_copy_procsoft(irplib_sdp_spectrum *self,
220 const cpl_propertylist *plist,
221 const char *name);
222
223const char * irplib_sdp_spectrum_get_prodcatg(const irplib_sdp_spectrum *self);
224cpl_error_code irplib_sdp_spectrum_reset_prodcatg(irplib_sdp_spectrum *self);
225cpl_error_code irplib_sdp_spectrum_set_prodcatg(irplib_sdp_spectrum *self,
226 const char *value);
227cpl_error_code irplib_sdp_spectrum_copy_prodcatg(irplib_sdp_spectrum *self,
228 const cpl_propertylist *plist,
229 const char *name);
230
231const char * irplib_sdp_spectrum_get_origin(const irplib_sdp_spectrum *self);
232cpl_error_code irplib_sdp_spectrum_reset_origin(irplib_sdp_spectrum *self);
233cpl_error_code irplib_sdp_spectrum_set_origin(irplib_sdp_spectrum *self,
234 const char *value);
235cpl_error_code irplib_sdp_spectrum_copy_origin(irplib_sdp_spectrum *self,
236 const cpl_propertylist *plist,
237 const char *name);
238
239cpl_boolean irplib_sdp_spectrum_get_extobj(const irplib_sdp_spectrum *self);
240cpl_error_code irplib_sdp_spectrum_reset_extobj(irplib_sdp_spectrum *self);
241cpl_error_code irplib_sdp_spectrum_set_extobj(irplib_sdp_spectrum *self,
242 cpl_boolean value);
243cpl_error_code irplib_sdp_spectrum_copy_extobj(irplib_sdp_spectrum *self,
244 const cpl_propertylist *plist,
245 const char *name);
246
247const char * irplib_sdp_spectrum_get_dispelem(const irplib_sdp_spectrum *self);
248cpl_error_code irplib_sdp_spectrum_reset_dispelem(irplib_sdp_spectrum *self);
249cpl_error_code irplib_sdp_spectrum_set_dispelem(irplib_sdp_spectrum *self,
250 const char *value);
251cpl_error_code irplib_sdp_spectrum_copy_dispelem(irplib_sdp_spectrum *self,
252 const cpl_propertylist *plist,
253 const char *name);
254
255const char * irplib_sdp_spectrum_get_specsys(const irplib_sdp_spectrum *self);
256cpl_error_code irplib_sdp_spectrum_reset_specsys(irplib_sdp_spectrum *self);
257cpl_error_code irplib_sdp_spectrum_set_specsys(irplib_sdp_spectrum *self,
258 const char *value);
259cpl_error_code irplib_sdp_spectrum_copy_specsys(irplib_sdp_spectrum *self,
260 const cpl_propertylist *plist,
261 const char *name);
262
263const char * irplib_sdp_spectrum_get_progid(const irplib_sdp_spectrum *self);
264cpl_error_code irplib_sdp_spectrum_reset_progid(irplib_sdp_spectrum *self);
265cpl_error_code irplib_sdp_spectrum_set_progid(irplib_sdp_spectrum *self,
266 const char *value);
267cpl_error_code irplib_sdp_spectrum_copy_progid(irplib_sdp_spectrum *self,
268 const cpl_propertylist *plist,
269 const char *name);
270
271int irplib_sdp_spectrum_get_obid(const irplib_sdp_spectrum *self,
272 cpl_size index);
273cpl_error_code irplib_sdp_spectrum_reset_obid(irplib_sdp_spectrum *self,
274 cpl_size index);
275cpl_error_code irplib_sdp_spectrum_set_obid(irplib_sdp_spectrum *self,
276 cpl_size index, int value);
277cpl_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
282cpl_boolean irplib_sdp_spectrum_get_mepoch(const irplib_sdp_spectrum *self);
283cpl_error_code irplib_sdp_spectrum_reset_mepoch(irplib_sdp_spectrum *self);
284cpl_error_code irplib_sdp_spectrum_set_mepoch(irplib_sdp_spectrum *self,
285 cpl_boolean value);
286cpl_error_code irplib_sdp_spectrum_copy_mepoch(irplib_sdp_spectrum *self,
287 const cpl_propertylist *plist,
288 const char *name);
289
290const char * irplib_sdp_spectrum_get_obstech(const irplib_sdp_spectrum *self);
291cpl_error_code irplib_sdp_spectrum_reset_obstech(irplib_sdp_spectrum *self);
292cpl_error_code irplib_sdp_spectrum_set_obstech(irplib_sdp_spectrum *self,
293 const char *value);
294cpl_error_code irplib_sdp_spectrum_copy_obstech(irplib_sdp_spectrum *self,
295 const cpl_propertylist *plist,
296 const char *name);
297
298const char * irplib_sdp_spectrum_get_fluxcal(const irplib_sdp_spectrum *self);
299cpl_error_code irplib_sdp_spectrum_reset_fluxcal(irplib_sdp_spectrum *self);
300cpl_error_code irplib_sdp_spectrum_set_fluxcal(irplib_sdp_spectrum *self,
301 const char *value);
302cpl_error_code irplib_sdp_spectrum_copy_fluxcal(irplib_sdp_spectrum *self,
303 const cpl_propertylist *plist,
304 const char *name);
305
306cpl_boolean irplib_sdp_spectrum_get_contnorm(const irplib_sdp_spectrum *self);
307cpl_error_code irplib_sdp_spectrum_reset_contnorm(irplib_sdp_spectrum *self);
308cpl_error_code irplib_sdp_spectrum_set_contnorm(irplib_sdp_spectrum *self,
309 cpl_boolean value);
310cpl_error_code irplib_sdp_spectrum_copy_contnorm(irplib_sdp_spectrum *self,
311 const cpl_propertylist *plist,
312 const char *name);
313
314double irplib_sdp_spectrum_get_wavelmin(const irplib_sdp_spectrum *self);
315cpl_error_code irplib_sdp_spectrum_reset_wavelmin(irplib_sdp_spectrum *self);
316cpl_error_code irplib_sdp_spectrum_set_wavelmin(irplib_sdp_spectrum *self,
317 double value);
318cpl_error_code irplib_sdp_spectrum_copy_wavelmin(irplib_sdp_spectrum *self,
319 const cpl_propertylist *plist,
320 const char *name);
321
322double irplib_sdp_spectrum_get_wavelmax(const irplib_sdp_spectrum *self);
323cpl_error_code irplib_sdp_spectrum_reset_wavelmax(irplib_sdp_spectrum *self);
324cpl_error_code irplib_sdp_spectrum_set_wavelmax(irplib_sdp_spectrum *self,
325 double value);
326cpl_error_code irplib_sdp_spectrum_copy_wavelmax(irplib_sdp_spectrum *self,
327 const cpl_propertylist *plist,
328 const char *name);
329
330double irplib_sdp_spectrum_get_specbin(const irplib_sdp_spectrum *self);
331cpl_error_code irplib_sdp_spectrum_reset_specbin(irplib_sdp_spectrum *self);
332cpl_error_code irplib_sdp_spectrum_set_specbin(irplib_sdp_spectrum *self,
333 double value);
334cpl_error_code irplib_sdp_spectrum_copy_specbin(irplib_sdp_spectrum *self,
335 const cpl_propertylist *plist,
336 const char *name);
337
338cpl_boolean irplib_sdp_spectrum_get_totflux(const irplib_sdp_spectrum *self);
339cpl_error_code irplib_sdp_spectrum_reset_totflux(irplib_sdp_spectrum *self);
340cpl_error_code irplib_sdp_spectrum_set_totflux(irplib_sdp_spectrum *self,
341 cpl_boolean value);
342cpl_error_code irplib_sdp_spectrum_copy_totflux(irplib_sdp_spectrum *self,
343 const cpl_propertylist *plist,
344 const char *name);
345
346double irplib_sdp_spectrum_get_fluxerr(const irplib_sdp_spectrum *self);
347cpl_error_code irplib_sdp_spectrum_reset_fluxerr(irplib_sdp_spectrum *self);
348cpl_error_code irplib_sdp_spectrum_set_fluxerr(irplib_sdp_spectrum *self,
349 double value);
350cpl_error_code irplib_sdp_spectrum_copy_fluxerr(irplib_sdp_spectrum *self,
351 const cpl_propertylist *plist,
352 const char *name);
353
354const char * irplib_sdp_spectrum_get_referenc(const irplib_sdp_spectrum *self);
355cpl_error_code irplib_sdp_spectrum_reset_referenc(irplib_sdp_spectrum *self);
356cpl_error_code irplib_sdp_spectrum_set_referenc(irplib_sdp_spectrum *self,
357 const char *value);
358cpl_error_code irplib_sdp_spectrum_copy_referenc(irplib_sdp_spectrum *self,
359 const cpl_propertylist *plist,
360 const char *name);
361
362double irplib_sdp_spectrum_get_specres(const irplib_sdp_spectrum *self);
363cpl_error_code irplib_sdp_spectrum_reset_specres(irplib_sdp_spectrum *self);
364cpl_error_code irplib_sdp_spectrum_set_specres(irplib_sdp_spectrum *self,
365 double value);
366cpl_error_code irplib_sdp_spectrum_copy_specres(irplib_sdp_spectrum *self,
367 const cpl_propertylist *plist,
368 const char *name);
369
370double irplib_sdp_spectrum_get_specerr(const irplib_sdp_spectrum *self);
371cpl_error_code irplib_sdp_spectrum_reset_specerr(irplib_sdp_spectrum *self);
372cpl_error_code irplib_sdp_spectrum_set_specerr(irplib_sdp_spectrum *self,
373 double value);
374cpl_error_code irplib_sdp_spectrum_copy_specerr(irplib_sdp_spectrum *self,
375 const cpl_propertylist *plist,
376 const char *name);
377
378double irplib_sdp_spectrum_get_specsye(const irplib_sdp_spectrum *self);
379cpl_error_code irplib_sdp_spectrum_reset_specsye(irplib_sdp_spectrum *self);
380cpl_error_code irplib_sdp_spectrum_set_specsye(irplib_sdp_spectrum *self,
381 double value);
382cpl_error_code irplib_sdp_spectrum_copy_specsye(irplib_sdp_spectrum *self,
383 const cpl_propertylist *plist,
384 const char *name);
385
386int irplib_sdp_spectrum_get_lamnlin(const irplib_sdp_spectrum *self);
387cpl_error_code irplib_sdp_spectrum_reset_lamnlin(irplib_sdp_spectrum *self);
388cpl_error_code irplib_sdp_spectrum_set_lamnlin(irplib_sdp_spectrum *self,
389 int value);
390cpl_error_code irplib_sdp_spectrum_copy_lamnlin(irplib_sdp_spectrum *self,
391 const cpl_propertylist *plist,
392 const char *name);
393
394double irplib_sdp_spectrum_get_lamrms(const irplib_sdp_spectrum *self);
395cpl_error_code irplib_sdp_spectrum_reset_lamrms(irplib_sdp_spectrum *self);
396cpl_error_code irplib_sdp_spectrum_set_lamrms(irplib_sdp_spectrum *self,
397 double value);
398cpl_error_code irplib_sdp_spectrum_copy_lamrms(irplib_sdp_spectrum *self,
399 const cpl_propertylist *plist,
400 const char *name);
401
402double irplib_sdp_spectrum_get_gain(const irplib_sdp_spectrum *self);
403cpl_error_code irplib_sdp_spectrum_reset_gain(irplib_sdp_spectrum *self);
404cpl_error_code irplib_sdp_spectrum_set_gain(irplib_sdp_spectrum *self,
405 double value);
406cpl_error_code irplib_sdp_spectrum_copy_gain(irplib_sdp_spectrum *self,
407 const cpl_propertylist *plist,
408 const char *name);
409
410double irplib_sdp_spectrum_get_detron(const irplib_sdp_spectrum *self);
411cpl_error_code irplib_sdp_spectrum_reset_detron(irplib_sdp_spectrum *self);
412cpl_error_code irplib_sdp_spectrum_set_detron(irplib_sdp_spectrum *self,
413 double value);
414cpl_error_code irplib_sdp_spectrum_copy_detron(irplib_sdp_spectrum *self,
415 const cpl_propertylist *plist,
416 const char *name);
417
418double irplib_sdp_spectrum_get_effron(const irplib_sdp_spectrum *self);
419cpl_error_code irplib_sdp_spectrum_reset_effron(irplib_sdp_spectrum *self);
420cpl_error_code irplib_sdp_spectrum_set_effron(irplib_sdp_spectrum *self,
421 double value);
422cpl_error_code irplib_sdp_spectrum_copy_effron(irplib_sdp_spectrum *self,
423 const cpl_propertylist *plist,
424 const char *name);
425
426double irplib_sdp_spectrum_get_snr(const irplib_sdp_spectrum *self);
427cpl_error_code irplib_sdp_spectrum_reset_snr(irplib_sdp_spectrum *self);
428cpl_error_code irplib_sdp_spectrum_set_snr(irplib_sdp_spectrum *self,
429 double value);
430cpl_error_code irplib_sdp_spectrum_copy_snr(irplib_sdp_spectrum *self,
431 const cpl_propertylist *plist,
432 const char *name);
433
434int irplib_sdp_spectrum_get_ncombine(const irplib_sdp_spectrum *self);
435cpl_error_code irplib_sdp_spectrum_reset_ncombine(irplib_sdp_spectrum *self);
436cpl_error_code irplib_sdp_spectrum_set_ncombine(irplib_sdp_spectrum *self,
437 int value);
438cpl_error_code irplib_sdp_spectrum_copy_ncombine(irplib_sdp_spectrum *self,
439 const cpl_propertylist *plist,
440 const char *name);
441
442const char * irplib_sdp_spectrum_get_prov(const irplib_sdp_spectrum *self,
443 cpl_size index);
444cpl_error_code irplib_sdp_spectrum_reset_prov(irplib_sdp_spectrum *self,
445 cpl_size index);
446cpl_error_code irplib_sdp_spectrum_set_prov(irplib_sdp_spectrum *self,
447 cpl_size index, const char *value);
448cpl_error_code irplib_sdp_spectrum_copy_prov(irplib_sdp_spectrum *self,
449 cpl_size index,
450 const cpl_propertylist *plist,
451 const char *name);
452cpl_error_code irplib_sdp_spectrum_append_prov(irplib_sdp_spectrum *self,
453 cpl_size firstindex,
454 const cpl_frameset *frames);
455
456const char * irplib_sdp_spectrum_get_asson(const irplib_sdp_spectrum *self,
457 cpl_size index);
458cpl_error_code irplib_sdp_spectrum_reset_asson(irplib_sdp_spectrum *self,
459 cpl_size index);
460cpl_error_code irplib_sdp_spectrum_set_asson(irplib_sdp_spectrum *self,
461 cpl_size index, const char *value);
462cpl_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
467const char * irplib_sdp_spectrum_get_assoc(const irplib_sdp_spectrum *self,
468 cpl_size index);
469cpl_error_code irplib_sdp_spectrum_reset_assoc(irplib_sdp_spectrum *self,
470 cpl_size index);
471cpl_error_code irplib_sdp_spectrum_set_assoc(irplib_sdp_spectrum *self,
472 cpl_size index, const char *value);
473cpl_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
478const char * irplib_sdp_spectrum_get_assom(const irplib_sdp_spectrum *self,
479 cpl_size index);
480cpl_error_code irplib_sdp_spectrum_reset_assom(irplib_sdp_spectrum *self,
481 cpl_size index);
482cpl_error_code irplib_sdp_spectrum_set_assom(irplib_sdp_spectrum *self,
483 cpl_size index, const char *value);
484cpl_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
489const char * irplib_sdp_spectrum_get_voclass(const irplib_sdp_spectrum *self);
490cpl_error_code irplib_sdp_spectrum_reset_voclass(irplib_sdp_spectrum *self);
491cpl_error_code irplib_sdp_spectrum_set_voclass(irplib_sdp_spectrum *self,
492 const char *value);
493cpl_error_code irplib_sdp_spectrum_copy_voclass(irplib_sdp_spectrum *self,
494 const cpl_propertylist *plist,
495 const char *name);
496
497const char * irplib_sdp_spectrum_get_vopub(const irplib_sdp_spectrum *self);
498cpl_error_code irplib_sdp_spectrum_reset_vopub(irplib_sdp_spectrum *self);
499cpl_error_code irplib_sdp_spectrum_set_vopub(irplib_sdp_spectrum *self,
500 const char *value);
501cpl_error_code irplib_sdp_spectrum_copy_vopub(irplib_sdp_spectrum *self,
502 const cpl_propertylist *plist,
503 const char *name);
504
505const char * irplib_sdp_spectrum_get_title(const irplib_sdp_spectrum *self);
506cpl_error_code irplib_sdp_spectrum_reset_title(irplib_sdp_spectrum *self);
507cpl_error_code irplib_sdp_spectrum_set_title(irplib_sdp_spectrum *self,
508 const char *value);
509cpl_error_code irplib_sdp_spectrum_copy_title(irplib_sdp_spectrum *self,
510 const cpl_propertylist *plist,
511 const char *name);
512
513const char * irplib_sdp_spectrum_get_object(const irplib_sdp_spectrum *self);
514cpl_error_code irplib_sdp_spectrum_reset_object(irplib_sdp_spectrum *self);
515cpl_error_code irplib_sdp_spectrum_set_object(irplib_sdp_spectrum *self,
516 const char *value);
517cpl_error_code irplib_sdp_spectrum_copy_object(irplib_sdp_spectrum *self,
518 const cpl_propertylist *plist,
519 const char *name);
520
521double irplib_sdp_spectrum_get_aperture(const irplib_sdp_spectrum *self);
522cpl_error_code irplib_sdp_spectrum_reset_aperture(irplib_sdp_spectrum *self);
523cpl_error_code irplib_sdp_spectrum_set_aperture(irplib_sdp_spectrum *self,
524 double value);
525cpl_error_code irplib_sdp_spectrum_copy_aperture(irplib_sdp_spectrum *self,
526 const cpl_propertylist *plist,
527 const char *name);
528
529double irplib_sdp_spectrum_get_telapse(const irplib_sdp_spectrum *self);
530cpl_error_code irplib_sdp_spectrum_reset_telapse(irplib_sdp_spectrum *self);
531cpl_error_code irplib_sdp_spectrum_set_telapse(irplib_sdp_spectrum *self,
532 double value);
533cpl_error_code irplib_sdp_spectrum_copy_telapse(irplib_sdp_spectrum *self,
534 const cpl_propertylist *plist,
535 const char *name);
536
537double irplib_sdp_spectrum_get_tmid(const irplib_sdp_spectrum *self);
538cpl_error_code irplib_sdp_spectrum_reset_tmid(irplib_sdp_spectrum *self);
539cpl_error_code irplib_sdp_spectrum_set_tmid(irplib_sdp_spectrum *self,
540 double value);
541cpl_error_code irplib_sdp_spectrum_copy_tmid(irplib_sdp_spectrum *self,
542 const cpl_propertylist *plist,
543 const char *name);
544
545double irplib_sdp_spectrum_get_specval(const irplib_sdp_spectrum *self);
546cpl_error_code irplib_sdp_spectrum_reset_specval(irplib_sdp_spectrum *self);
547cpl_error_code irplib_sdp_spectrum_set_specval(irplib_sdp_spectrum *self,
548 double value);
549cpl_error_code irplib_sdp_spectrum_copy_specval(irplib_sdp_spectrum *self,
550 const cpl_propertylist *plist,
551 const char *name);
552
553double irplib_sdp_spectrum_get_specbw(const irplib_sdp_spectrum *self);
554cpl_error_code irplib_sdp_spectrum_reset_specbw(irplib_sdp_spectrum *self);
555cpl_error_code irplib_sdp_spectrum_set_specbw(irplib_sdp_spectrum *self,
556 double value);
557cpl_error_code irplib_sdp_spectrum_copy_specbw(irplib_sdp_spectrum *self,
558 const cpl_propertylist *plist,
559 const char *name);
560
561const char * irplib_sdp_spectrum_get_extname(const irplib_sdp_spectrum *self);
562cpl_error_code irplib_sdp_spectrum_reset_extname(irplib_sdp_spectrum *self);
563cpl_error_code irplib_sdp_spectrum_set_extname(irplib_sdp_spectrum *self,
564 const char *value);
565cpl_error_code irplib_sdp_spectrum_copy_extname(irplib_sdp_spectrum *self,
566 const cpl_propertylist *plist,
567 const char *name);
568
569cpl_boolean irplib_sdp_spectrum_get_inherit(const irplib_sdp_spectrum *self);
570cpl_error_code irplib_sdp_spectrum_reset_inherit(irplib_sdp_spectrum *self);
571cpl_error_code irplib_sdp_spectrum_set_inherit(irplib_sdp_spectrum *self,
572 cpl_boolean value);
573cpl_error_code irplib_sdp_spectrum_copy_inherit(irplib_sdp_spectrum *self,
574 const cpl_propertylist *plist,
575 const char *name);
576
577cpl_size irplib_sdp_spectrum_get_nelem(const irplib_sdp_spectrum *self);
578cpl_error_code irplib_sdp_spectrum_reset_nelem(irplib_sdp_spectrum *self);
579cpl_error_code irplib_sdp_spectrum_set_nelem(irplib_sdp_spectrum *self,
580 cpl_size value);
581cpl_error_code irplib_sdp_spectrum_copy_nelem(irplib_sdp_spectrum *self,
582 const cpl_propertylist *plist,
583 const char *name);
584
585double irplib_sdp_spectrum_get_tdmin(const irplib_sdp_spectrum *self);
586cpl_error_code irplib_sdp_spectrum_reset_tdmin(irplib_sdp_spectrum *self);
587cpl_error_code irplib_sdp_spectrum_set_tdmin(irplib_sdp_spectrum *self,
588 double value);
589cpl_error_code irplib_sdp_spectrum_copy_tdmin(irplib_sdp_spectrum *self,
590 const cpl_propertylist *plist,
591 const char *name);
592
593double irplib_sdp_spectrum_get_tdmax(const irplib_sdp_spectrum *self);
594cpl_error_code irplib_sdp_spectrum_reset_tdmax(irplib_sdp_spectrum *self);
595cpl_error_code irplib_sdp_spectrum_set_tdmax(irplib_sdp_spectrum *self,
596 double value);
597cpl_error_code irplib_sdp_spectrum_copy_tdmax(irplib_sdp_spectrum *self,
598 const cpl_propertylist *plist,
599 const char *name);
600
601/*
602 * Method to replace the default keyword comment with a custom comment
603 */
604
605cpl_error_code
606irplib_sdp_spectrum_replace_column_comment(irplib_sdp_spectrum *self,
607 const char *name,
608 const char *keyword,
609 const char *comment);
610
611/*
612 * Column manipulation functions.
613 */
614
615cpl_size irplib_sdp_spectrum_get_ncol(const irplib_sdp_spectrum *self);
616
617cpl_boolean irplib_sdp_spectrum_has_column(const irplib_sdp_spectrum *self,
618 const char* name);
619
620cpl_array *
621irplib_sdp_spectrum_get_column_names(const irplib_sdp_spectrum *self);
622
623cpl_error_code
624irplib_sdp_spectrum_new_column(irplib_sdp_spectrum *self, const char *name,
625 cpl_type type);
626
627cpl_error_code
628irplib_sdp_spectrum_add_column(irplib_sdp_spectrum *self, const char *name,
629 cpl_type type, const char *unit,
630 const char *format, const char *tutyp,
631 const char *tucd, const cpl_array *data);
632
633cpl_error_code
634irplib_sdp_spectrum_copy_column(irplib_sdp_spectrum *self,
635 const cpl_table* table, const char *name);
636
637cpl_error_code
638irplib_sdp_spectrum_copy_column_regexp(irplib_sdp_spectrum *self,
639 const cpl_table* table,
640 const char *regexp, int invert);
641
642cpl_error_code
643irplib_sdp_spectrum_update_column(irplib_sdp_spectrum *self, const char *name,
644 const cpl_table* table, const char *colname,
645 int flags);
646
647cpl_error_code
648irplib_sdp_spectrum_delete_column(irplib_sdp_spectrum *self, const char *name);
649
650cpl_type irplib_sdp_spectrum_get_column_type(const irplib_sdp_spectrum *self,
651 const char *name);
652
653const char *
654irplib_sdp_spectrum_get_column_unit(const irplib_sdp_spectrum *self,
655 const char *name);
656
657cpl_error_code
658irplib_sdp_spectrum_set_column_unit(irplib_sdp_spectrum *self,
659 const char *name, const char *unit);
660
661cpl_error_code
662irplib_sdp_spectrum_copy_column_unit(irplib_sdp_spectrum *self,
663 const char *name,
664 const cpl_propertylist *plist,
665 const char *key);
666
667const char *
668irplib_sdp_spectrum_get_column_format(const irplib_sdp_spectrum *self,
669 const char *name);
670
671cpl_error_code
672irplib_sdp_spectrum_set_column_format(irplib_sdp_spectrum *self,
673 const char *name, const char *format);
674
675const char *
676irplib_sdp_spectrum_get_column_tutyp(const irplib_sdp_spectrum *self,
677 const char *name);
678
679cpl_error_code
680irplib_sdp_spectrum_set_column_tutyp(irplib_sdp_spectrum *self,
681 const char *name, const char *tutyp);
682
683cpl_error_code
684irplib_sdp_spectrum_copy_column_tutyp(irplib_sdp_spectrum *self,
685 const char *name,
686 const cpl_propertylist *plist,
687 const char *key);
688
689const char *
690irplib_sdp_spectrum_get_column_tucd(const irplib_sdp_spectrum *self,
691 const char *name);
692
693cpl_error_code
694irplib_sdp_spectrum_set_column_tucd(irplib_sdp_spectrum *self,
695 const char *name, const char *tucd);
696
697cpl_error_code
698irplib_sdp_spectrum_copy_column_tucd(irplib_sdp_spectrum *self,
699 const char *name,
700 const cpl_propertylist *plist,
701 const char *key);
702
703const char *
704irplib_sdp_spectrum_get_column_tcomm(const irplib_sdp_spectrum *self,
705 const char *name);
706
707cpl_error_code
708irplib_sdp_spectrum_set_column_tcomm(irplib_sdp_spectrum *self,
709 const char *name, const char *tcomm);
710
711cpl_error_code
712irplib_sdp_spectrum_copy_column_tcomm(irplib_sdp_spectrum *self,
713 const char *name,
714 const cpl_propertylist *plist,
715 const char *key);
716
717const cpl_array *
718irplib_sdp_spectrum_get_column_data(const irplib_sdp_spectrum *self,
719 const char *name);
720
721cpl_error_code
722irplib_sdp_spectrum_set_column_data(irplib_sdp_spectrum *self,
723 const char *name, const cpl_array *array);
724
725/*
726 * Methods for loading and saving a spectrum object.
727 */
728
729irplib_sdp_spectrum * irplib_sdp_spectrum_load(const char *filename);
730
731cpl_error_code irplib_sdp_spectrum_save(const irplib_sdp_spectrum *self,
732 const char *filename,
733 const cpl_propertylist *extra_pheader,
734 const cpl_propertylist *extra_header);
735
736cpl_error_code irplib_dfs_save_spectrum(cpl_frameset * allframes,
737 cpl_propertylist * header,
738 const cpl_parameterlist * parlist,
739 const cpl_frameset * usedframes,
740 const cpl_frame * inherit,
741 const irplib_sdp_spectrum * spectrum,
742 const char * recipe,
743 const cpl_propertylist * applist,
744 const cpl_propertylist * tablelist,
745 const char * remregexp,
746 const char * pipe_id,
747 const char * dict_id,
748 const char * filename);
749
750/*
751 * Dump function for debugging.
752 */
753
754void irplib_sdp_spectrum_dump(const irplib_sdp_spectrum *self, FILE *stream);
755
756/*
757 * Additional useful helper functions.
758 */
759
760# ifdef IRPLIB_USE_FITS_UPDATE_CHECKSUM
761
762/* NOTE: if one wants to use the following function the preprocessor macro
763 * IRPLIB_USE_FITS_UPDATE_CHECKSUM must be defined when including this file and
764 * when compiling the libirplib.a library. In addition, there will be a
765 * dependency introduced to cfitsio in libirplib.a and any binary linking
766 * against it. This will require adding the appropriate linker flags when
767 * building such libraries.
768 * The easiest way to add the IRPLIB_USE_FITS_UPDATE_CHECKSUM macro is to add
769 * the following lines to either the acinclude.m4 or configure.ac files of the
770 * parent pipeline project:
771 * IRPLIB_CPPFLAGS='-DIRPLIB_USE_FITS_UPDATE_CHECKSUM'
772 * AC_SUBST(IRPLIB_CPPFLAGS)
773 */
774cpl_error_code irplib_fits_update_checksums(const char* filename);
775
776# endif /* IRPLIB_USE_FITS_UPDATE_CHECKSUM */
777
778CPL_END_DECLS
779
780#endif /* IRPLIB_SDP_SPECTRUM_H */
enum _irplib_sdp_spectrum_update_flags_ 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.
_irplib_sdp_spectrum_update_flags_
Bitfield flags for the column update function.