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