WCSLIB  5.4.1
spx.h
Go to the documentation of this file.
1 /*============================================================================
2 
3  WCSLIB 5.5 - an implementation of the FITS WCS standard.
4  Copyright (C) 1995-2015, Mark Calabretta
5 
6  This file is part of WCSLIB.
7 
8  WCSLIB is free software: you can redistribute it and/or modify it under the
9  terms of the GNU Lesser General Public License as published by the Free
10  Software Foundation, either version 3 of the License, or (at your option)
11  any later version.
12 
13  WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY
14  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15  FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
16  more details.
17 
18  You should have received a copy of the GNU Lesser General Public License
19  along with WCSLIB. If not, see http://www.gnu.org/licenses.
20 
21  Direct correspondence concerning WCSLIB to mark@calabretta.id.au
22 
23  Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
24  http://www.atnf.csiro.au/people/Mark.Calabretta
25  $Id: spx.h,v 5.5 2015/05/05 13:16:31 mcalabre Exp $
26 *=============================================================================
27 *
28 * WCSLIB 5.5 - C routines that implement the FITS World Coordinate System
29 * (WCS) standard. Refer to the README file provided with WCSLIB for an
30 * overview of the library.
31 *
32 *
33 * Summary of the spx routines
34 * ---------------------------
35 * Routines in this suite implement the spectral coordinate systems recognized
36 * by the FITS World Coordinate System (WCS) standard, as described in
37 *
38 = "Representations of world coordinates in FITS",
39 = Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (WCS Paper I)
40 =
41 = "Representations of spectral coordinates in FITS",
42 = Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L.
43 = 2006, A&A, 446, 747 (WCS Paper III)
44 *
45 * specx() is a scalar routine that, given one spectral variable (e.g.
46 * frequency), computes all the others (e.g. wavelength, velocity, etc.) plus
47 * the required derivatives of each with respect to the others. The results
48 * are returned in the spxprm struct.
49 *
50 * The remaining routines are all vector conversions from one spectral
51 * variable to another. The API of these functions only differ in whether the
52 * rest frequency or wavelength need be supplied.
53 *
54 * Non-linear:
55 * - freqwave() frequency -> vacuum wavelength
56 * - wavefreq() vacuum wavelength -> frequency
57 *
58 * - freqawav() frequency -> air wavelength
59 * - awavfreq() air wavelength -> frequency
60 *
61 * - freqvelo() frequency -> relativistic velocity
62 * - velofreq() relativistic velocity -> frequency
63 *
64 * - waveawav() vacuum wavelength -> air wavelength
65 * - awavwave() air wavelength -> vacuum wavelength
66 *
67 * - wavevelo() vacuum wavelength -> relativistic velocity
68 * - velowave() relativistic velocity -> vacuum wavelength
69 *
70 * - awavvelo() air wavelength -> relativistic velocity
71 * - veloawav() relativistic velocity -> air wavelength
72 *
73 * Linear:
74 * - freqafrq() frequency -> angular frequency
75 * - afrqfreq() angular frequency -> frequency
76 *
77 * - freqener() frequency -> energy
78 * - enerfreq() energy -> frequency
79 *
80 * - freqwavn() frequency -> wave number
81 * - wavnfreq() wave number -> frequency
82 *
83 * - freqvrad() frequency -> radio velocity
84 * - vradfreq() radio velocity -> frequency
85 *
86 * - wavevopt() vacuum wavelength -> optical velocity
87 * - voptwave() optical velocity -> vacuum wavelength
88 *
89 * - wavezopt() vacuum wavelength -> redshift
90 * - zoptwave() redshift -> vacuum wavelength
91 *
92 * - velobeta() relativistic velocity -> beta (= v/c)
93 * - betavelo() beta (= v/c) -> relativistic velocity
94 *
95 * These are the workhorse routines, to be used for fast transformations.
96 * Conversions may be done "in place" by calling the routine with the output
97 * vector set to the input.
98 *
99 * Argument checking:
100 * ------------------
101 * The input spectral values are only checked for values that would result
102 * in floating point exceptions. In particular, negative frequencies and
103 * wavelengths are allowed, as are velocities greater than the speed of
104 * light. The same is true for the spectral parameters - rest frequency and
105 * wavelength.
106 *
107 * Accuracy:
108 * ---------
109 * No warranty is given for the accuracy of these routines (refer to the
110 * copyright notice); intending users must satisfy for themselves their
111 * adequacy for the intended purpose. However, closure effectively to within
112 * double precision rounding error was demonstrated by test routine tspec.c
113 * which accompanies this software.
114 *
115 *
116 * specx() - Spectral cross conversions (scalar)
117 * ---------------------------------------------
118 * Given one spectral variable specx() computes all the others, plus the
119 * required derivatives of each with respect to the others.
120 *
121 * Given:
122 * type const char*
123 * The type of spectral variable given by spec, FREQ,
124 * AFRQ, ENER, WAVN, VRAD, WAVE, VOPT, ZOPT, AWAV, VELO,
125 * or BETA (case sensitive).
126 *
127 * spec double The spectral variable given, in SI units.
128 *
129 * restfrq,
130 * restwav double Rest frequency [Hz] or rest wavelength in vacuo [m],
131 * only one of which need be given. The other should be
132 * set to zero. If both are zero, only a subset of the
133 * spectral variables can be computed, the remainder are
134 * set to zero. Specifically, given one of FREQ, AFRQ,
135 * ENER, WAVN, WAVE, or AWAV the others can be computed
136 * without knowledge of the rest frequency. Likewise,
137 * VRAD, VOPT, ZOPT, VELO, and BETA.
138 *
139 * Given and returned:
140 * specs struct spxprm*
141 * Data structure containing all spectral variables and
142 * their derivatives, in SI units.
143 *
144 * Function return value:
145 * int Status return value:
146 * 0: Success.
147 * 1: Null spxprm pointer passed.
148 * 2: Invalid spectral parameters.
149 * 3: Invalid spectral variable.
150 *
151 * For returns > 1, a detailed error message is set in
152 * spxprm::err if enabled, see wcserr_enable().
153 *
154 * freqafrq(), afrqfreq(), freqener(), enerfreq(), freqwavn(), wavnfreq(),
155 * freqwave(), wavefreq(), freqawav(), awavfreq(), waveawav(), awavwave(),
156 * velobeta(), and betavelo() implement vector conversions between wave-like
157 * or velocity-like spectral types (i.e. conversions that do not need the rest
158 * frequency or wavelength). They all have the same API.
159 *
160 *
161 * freqafrq() - Convert frequency to angular frequency (vector)
162 * ------------------------------------------------------------
163 * freqafrq() converts frequency to angular frequency.
164 *
165 * Given:
166 * param double Ignored.
167 *
168 * nspec int Vector length.
169 *
170 * instep,
171 * outstep int Vector strides.
172 *
173 * inspec const double[]
174 * Input spectral variables, in SI units.
175 *
176 * Returned:
177 * outspec double[] Output spectral variables, in SI units.
178 *
179 * stat int[] Status return value for each vector element:
180 * 0: Success.
181 * 1: Invalid value of inspec.
182 *
183 * Function return value:
184 * int Status return value:
185 * 0: Success.
186 * 2: Invalid spectral parameters.
187 * 4: One or more of the inspec coordinates were
188 * invalid, as indicated by the stat vector.
189 *
190 *
191 * freqvelo(), velofreq(), freqvrad(), and vradfreq() implement vector
192 * conversions between frequency and velocity spectral types. They all have
193 * the same API.
194 *
195 *
196 * freqvelo() - Convert frequency to relativistic velocity (vector)
197 * ----------------------------------------------------------------
198 * freqvelo() converts frequency to relativistic velocity.
199 *
200 * Given:
201 * param double Rest frequency [Hz].
202 *
203 * nspec int Vector length.
204 *
205 * instep,
206 * outstep int Vector strides.
207 *
208 * inspec const double[]
209 * Input spectral variables, in SI units.
210 *
211 * Returned:
212 * outspec double[] Output spectral variables, in SI units.
213 *
214 * stat int[] Status return value for each vector element:
215 * 0: Success.
216 * 1: Invalid value of inspec.
217 *
218 * Function return value:
219 * int Status return value:
220 * 0: Success.
221 * 2: Invalid spectral parameters.
222 * 4: One or more of the inspec coordinates were
223 * invalid, as indicated by the stat vector.
224 *
225 *
226 * wavevelo(), velowave(), awavvelo(), veloawav(), wavevopt(), voptwave(),
227 * wavezopt(), and zoptwave() implement vector conversions between wavelength
228 * and velocity spectral types. They all have the same API.
229 *
230 *
231 * wavevelo() - Conversions between wavelength and velocity types (vector)
232 * -----------------------------------------------------------------------
233 * wavevelo() converts vacuum wavelength to relativistic velocity.
234 *
235 * Given:
236 * param double Rest wavelength in vacuo [m].
237 *
238 * nspec int Vector length.
239 *
240 * instep,
241 * outstep int Vector strides.
242 *
243 * inspec const double[]
244 * Input spectral variables, in SI units.
245 *
246 * Returned:
247 * outspec double[] Output spectral variables, in SI units.
248 *
249 * stat int[] Status return value for each vector element:
250 * 0: Success.
251 * 1: Invalid value of inspec.
252 *
253 * Function return value:
254 * int Status return value:
255 * 0: Success.
256 * 2: Invalid spectral parameters.
257 * 4: One or more of the inspec coordinates were
258 * invalid, as indicated by the stat vector.
259 *
260 *
261 * spxprm struct - Spectral variables and their derivatives
262 * --------------------------------------------------------
263 * The spxprm struct contains the value of all spectral variables and their
264 * derivatives. It is used solely by specx() which constructs it from
265 * information provided via its function arguments.
266 *
267 * This struct should be considered read-only, no members need ever be set nor
268 * should ever be modified by the user.
269 *
270 * double restfrq
271 * (Returned) Rest frequency [Hz].
272 *
273 * double restwav
274 * (Returned) Rest wavelength [m].
275 *
276 * int wavetype
277 * (Returned) True if wave types have been computed, and ...
278 *
279 * int velotype
280 * (Returned) ... true if velocity types have been computed; types are
281 * defined below.
282 *
283 * If one or other of spxprm::restfrq and spxprm::restwav is given
284 * (non-zero) then all spectral variables may be computed. If both are
285 * given, restfrq is used. If restfrq and restwav are both zero, only wave
286 * characteristic xor velocity type spectral variables may be computed
287 * depending on the variable given. These flags indicate what is
288 * available.
289 *
290 * double freq
291 * (Returned) Frequency [Hz] (wavetype).
292 *
293 * double afrq
294 * (Returned) Angular frequency [rad/s] (wavetype).
295 *
296 * double ener
297 * (Returned) Photon energy [J] (wavetype).
298 *
299 * double wavn
300 * (Returned) Wave number [/m] (wavetype).
301 *
302 * double vrad
303 * (Returned) Radio velocity [m/s] (velotype).
304 *
305 * double wave
306 * (Returned) Vacuum wavelength [m] (wavetype).
307 *
308 * double vopt
309 * (Returned) Optical velocity [m/s] (velotype).
310 *
311 * double zopt
312 * (Returned) Redshift [dimensionless] (velotype).
313 *
314 * double awav
315 * (Returned) Air wavelength [m] (wavetype).
316 *
317 * double velo
318 * (Returned) Relativistic velocity [m/s] (velotype).
319 *
320 * double beta
321 * (Returned) Relativistic beta [dimensionless] (velotype).
322 *
323 * double dfreqafrq
324 * (Returned) Derivative of frequency with respect to angular frequency
325 * [/rad] (constant, = 1 / 2*pi), and ...
326 * double dafrqfreq
327 * (Returned) ... vice versa [rad] (constant, = 2*pi, always available).
328 *
329 * double dfreqener
330 * (Returned) Derivative of frequency with respect to photon energy
331 * [/J/s] (constant, = 1/h), and ...
332 * double denerfreq
333 * (Returned) ... vice versa [Js] (constant, = h, Planck's constant,
334 * always available).
335 *
336 * double dfreqwavn
337 * (Returned) Derivative of frequency with respect to wave number [m/s]
338 * (constant, = c, the speed of light in vacuo), and ...
339 * double dwavnfreq
340 * (Returned) ... vice versa [s/m] (constant, = 1/c, always available).
341 *
342 * double dfreqvrad
343 * (Returned) Derivative of frequency with respect to radio velocity [/m],
344 * and ...
345 * double dvradfreq
346 * (Returned) ... vice versa [m] (wavetype && velotype).
347 *
348 * double dfreqwave
349 * (Returned) Derivative of frequency with respect to vacuum wavelength
350 * [/m/s], and ...
351 * double dwavefreq
352 * (Returned) ... vice versa [m s] (wavetype).
353 *
354 * double dfreqawav
355 * (Returned) Derivative of frequency with respect to air wavelength,
356 * [/m/s], and ...
357 * double dawavfreq
358 * (Returned) ... vice versa [m s] (wavetype).
359 *
360 * double dfreqvelo
361 * (Returned) Derivative of frequency with respect to relativistic
362 * velocity [/m], and ...
363 * double dvelofreq
364 * (Returned) ... vice versa [m] (wavetype && velotype).
365 *
366 * double dwavevopt
367 * (Returned) Derivative of vacuum wavelength with respect to optical
368 * velocity [s], and ...
369 * double dvoptwave
370 * (Returned) ... vice versa [/s] (wavetype && velotype).
371 *
372 * double dwavezopt
373 * (Returned) Derivative of vacuum wavelength with respect to redshift [m],
374 * and ...
375 * double dzoptwave
376 * (Returned) ... vice versa [/m] (wavetype && velotype).
377 *
378 * double dwaveawav
379 * (Returned) Derivative of vacuum wavelength with respect to air
380 * wavelength [dimensionless], and ...
381 * double dawavwave
382 * (Returned) ... vice versa [dimensionless] (wavetype).
383 *
384 * double dwavevelo
385 * (Returned) Derivative of vacuum wavelength with respect to relativistic
386 * velocity [s], and ...
387 * double dvelowave
388 * (Returned) ... vice versa [/s] (wavetype && velotype).
389 *
390 * double dawavvelo
391 * (Returned) Derivative of air wavelength with respect to relativistic
392 * velocity [s], and ...
393 * double dveloawav
394 * (Returned) ... vice versa [/s] (wavetype && velotype).
395 *
396 * double dvelobeta
397 * (Returned) Derivative of relativistic velocity with respect to
398 * relativistic beta [m/s] (constant, = c, the speed of light in vacuo),
399 * and ...
400 * double dbetavelo
401 * (Returned) ... vice versa [s/m] (constant, = 1/c, always available).
402 *
403 * struct wcserr *err
404 * (Returned) If enabled, when an error status is returned, this struct
405 * contains detailed information about the error, see wcserr_enable().
406 *
407 * void *padding
408 * (An unused variable inserted for alignment purposes only.)
409 *
410 * Global variable: const char *spx_errmsg[] - Status return messages
411 * ------------------------------------------------------------------
412 * Error messages to match the status value returned from each function.
413 *
414 *===========================================================================*/
415 
416 #ifndef WCSLIB_SPEC
417 #define WCSLIB_SPEC
418 
419 #ifdef __cplusplus
420 extern "C" {
421 #endif
422 
423 extern const char *spx_errmsg[];
424 
425 enum spx_errmsg {
426  SPXERR_SUCCESS = 0, /* Success. */
427  SPXERR_NULL_POINTER = 1, /* Null spxprm pointer passed. */
428  SPXERR_BAD_SPEC_PARAMS = 2, /* Invalid spectral parameters. */
429  SPXERR_BAD_SPEC_VAR = 3, /* Invalid spectral variable. */
430  SPXERR_BAD_INSPEC_COORD = 4 /* One or more of the inspec coordinates were
431  invalid. */
432 };
433 
434 struct spxprm {
435  double restfrq, restwav; /* Rest frequency [Hz] and wavelength [m]. */
436 
437  int wavetype, velotype; /* True if wave/velocity types have been */
438  /* computed; types are defined below. */
439 
440  /* Spectral variables computed by specx(). */
441  /*------------------------------------------------------------------------*/
442  double freq, /* wavetype: Frequency [Hz]. */
443  afrq, /* wavetype: Angular frequency [rad/s]. */
444  ener, /* wavetype: Photon energy [J]. */
445  wavn, /* wavetype: Wave number [/m]. */
446  vrad, /* velotype: Radio velocity [m/s]. */
447  wave, /* wavetype: Vacuum wavelength [m]. */
448  vopt, /* velotype: Optical velocity [m/s]. */
449  zopt, /* velotype: Redshift. */
450  awav, /* wavetype: Air wavelength [m]. */
451  velo, /* velotype: Relativistic velocity [m/s]. */
452  beta; /* velotype: Relativistic beta. */
453 
454  /* Derivatives of spectral variables computed by specx(). */
455  /*------------------------------------------------------------------------*/
456  double dfreqafrq, dafrqfreq, /* Constant, always available. */
457  dfreqener, denerfreq, /* Constant, always available. */
458  dfreqwavn, dwavnfreq, /* Constant, always available. */
459  dfreqvrad, dvradfreq, /* wavetype && velotype. */
460  dfreqwave, dwavefreq, /* wavetype. */
461  dfreqawav, dawavfreq, /* wavetype. */
462  dfreqvelo, dvelofreq, /* wavetype && velotype. */
463  dwavevopt, dvoptwave, /* wavetype && velotype. */
464  dwavezopt, dzoptwave, /* wavetype && velotype. */
465  dwaveawav, dawavwave, /* wavetype. */
466  dwavevelo, dvelowave, /* wavetype && velotype. */
467  dawavvelo, dveloawav, /* wavetype && velotype. */
468  dvelobeta, dbetavelo; /* Constant, always available. */
469 
470  /* Error handling */
471  /*------------------------------------------------------------------------*/
472  struct wcserr *err;
473 
474  /* Private */
475  /*------------------------------------------------------------------------*/
476  void *padding; /* (Dummy inserted for alignment purposes.) */
477 };
478 
479 /* Size of the spxprm struct in int units, used by the Fortran wrappers. */
480 #define SPXLEN (sizeof(struct spxprm)/sizeof(int))
481 
482 
483 int specx(const char *type, double spec, double restfrq, double restwav,
484  struct spxprm *specs);
485 
486 
487 /* For use in declaring function prototypes, e.g. in spcprm. */
488 #define SPX_ARGS double param, int nspec, int instep, int outstep, \
489  const double inspec[], double outspec[], int stat[]
490 
491 int freqafrq(SPX_ARGS);
492 int afrqfreq(SPX_ARGS);
493 
494 int freqener(SPX_ARGS);
495 int enerfreq(SPX_ARGS);
496 
497 int freqwavn(SPX_ARGS);
498 int wavnfreq(SPX_ARGS);
499 
500 int freqwave(SPX_ARGS);
501 int wavefreq(SPX_ARGS);
502 
503 int freqawav(SPX_ARGS);
504 int awavfreq(SPX_ARGS);
505 
506 int waveawav(SPX_ARGS);
507 int awavwave(SPX_ARGS);
508 
509 int velobeta(SPX_ARGS);
510 int betavelo(SPX_ARGS);
511 
512 
513 int freqvelo(SPX_ARGS);
514 int velofreq(SPX_ARGS);
515 
516 int freqvrad(SPX_ARGS);
517 int vradfreq(SPX_ARGS);
518 
519 
520 int wavevelo(SPX_ARGS);
521 int velowave(SPX_ARGS);
522 
523 int awavvelo(SPX_ARGS);
524 int veloawav(SPX_ARGS);
525 
526 int wavevopt(SPX_ARGS);
527 int voptwave(SPX_ARGS);
528 
529 int wavezopt(SPX_ARGS);
530 int zoptwave(SPX_ARGS);
531 
532 
533 #ifdef __cplusplus
534 }
535 #endif
536 
537 #endif /* WCSLIB_SPEC */
int wavnfreq(SPX_ARGS)
Convert wave number to frequency (vector).
double dawavwave
Definition: spx.h:456
double dwaveawav
Definition: spx.h:456
double dvelowave
Definition: spx.h:456
int waveawav(SPX_ARGS)
Convert vacuum wavelength to air wavelength (vector).
double dvelobeta
Definition: spx.h:456
double wave
Definition: spx.h:442
int freqawav(SPX_ARGS)
Convert frequency to air wavelength (vector).
Error message handling.
Definition: wcserr.h:225
double dzoptwave
Definition: spx.h:456
#define SPX_ARGS
For use in declaring spectral conversion function prototypes.
Definition: spx.h:488
double velo
Definition: spx.h:442
int wavevopt(SPX_ARGS)
Convert vacuum wavelength to optical velocity (vector).
double beta
Definition: spx.h:442
double dwavnfreq
Definition: spx.h:456
int enerfreq(SPX_ARGS)
Convert photon energy to frequency (vector).
double dfreqener
Definition: spx.h:456
int voptwave(SPX_ARGS)
Convert optical velocity to vacuum wavelength (vector).
double dfreqvelo
Definition: spx.h:456
Definition: spx.h:427
int awavvelo(SPX_ARGS)
Convert air wavelength to relativistic velocity (vector).
int afrqfreq(SPX_ARGS)
Convert angular frequency to frequency (vector).
double dvelofreq
Definition: spx.h:456
double dafrqfreq
Definition: spx.h:456
double dwavevopt
Definition: spx.h:456
double dvoptwave
Definition: spx.h:456
int freqener(SPX_ARGS)
Convert frequency to photon energy (vector).
double dbetavelo
Definition: spx.h:456
Definition: spx.h:426
int veloawav(SPX_ARGS)
Convert relativistic velocity to air wavelength (vector).
double dveloawav
Definition: spx.h:456
int wavefreq(SPX_ARGS)
Convert vacuum wavelength to frequency (vector).
int velobeta(SPX_ARGS)
Convert relativistic velocity to relativistic beta (vector).
double dfreqwave
Definition: spx.h:456
double dvradfreq
Definition: spx.h:456
int specx(const char *type, double spec, double restfrq, double restwav, struct spxprm *specs)
Spectral cross conversions (scalar).
int wavetype
Definition: spx.h:437
double dwavevelo
Definition: spx.h:456
struct wcserr * err
Definition: spx.h:472
int vradfreq(SPX_ARGS)
Convert radio velocity to frequency (vector).
double awav
Definition: spx.h:442
double dfreqvrad
Definition: spx.h:456
double ener
Definition: spx.h:442
double wavn
Definition: spx.h:442
double dawavfreq
Definition: spx.h:456
int betavelo(SPX_ARGS)
Convert relativistic beta to relativistic velocity (vector).
double dwavefreq
Definition: spx.h:456
double dawavvelo
Definition: spx.h:456
double vrad
Definition: spx.h:442
spx_errmsg
Definition: spx.h:425
double denerfreq
Definition: spx.h:456
Definition: spx.h:429
int zoptwave(SPX_ARGS)
Convert redshift to vacuum wavelength (vector).
double afrq
Definition: spx.h:442
Spectral variables and their derivatives.
Definition: spx.h:434
int awavwave(SPX_ARGS)
Convert air wavelength to vacuum wavelength (vector).
int velowave(SPX_ARGS)
Convert relativistic velocity to vacuum wavelength (vector).
int freqvrad(SPX_ARGS)
Convert frequency to radio velocity (vector).
double zopt
Definition: spx.h:442
void * padding
Definition: spx.h:476
int velotype
Definition: spx.h:437
int freqvelo(SPX_ARGS)
Convert frequency to relativistic velocity (vector).
double vopt
Definition: spx.h:442
int freqwavn(SPX_ARGS)
Convert frequency to wave number (vector).
double restwav
Definition: spx.h:435
int wavevelo(SPX_ARGS)
Conversions between wavelength and velocity types (vector).
double dfreqawav
Definition: spx.h:456
double restfrq
Definition: spx.h:435
int freqafrq(SPX_ARGS)
Convert frequency to angular frequency (vector).
double dwavezopt
Definition: spx.h:456
Definition: spx.h:428
int velofreq(SPX_ARGS)
Convert relativistic velocity to frequency (vector).
int awavfreq(SPX_ARGS)
Convert air wavelength to frequency (vector).
double dfreqwavn
Definition: spx.h:456
double dfreqafrq
Definition: spx.h:456
int freqwave(SPX_ARGS)
Convert frequency to vacuum wavelength (vector).
double freq
Definition: spx.h:442
int wavezopt(SPX_ARGS)
Convert vacuum wavelength to redshift (vector).
Definition: spx.h:430