File: spc_8h-source.html

package info (click to toggle)
python-pywcs 1.11-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 11,888 kB
  • sloc: ansic: 31,441; lex: 6,170; fortran: 6,080; sh: 3,478; python: 3,122; sed: 408; makefile: 76
file content (902 lines) | stat: -rw-r--r-- 98,823 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>WCSLIB 4.8.2: spc.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.6 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
<h1>spc.h</h1><a href="spc_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*============================================================================</span>
<a name="l00002"></a>00002 <span class="comment"></span>
<a name="l00003"></a>00003 <span class="comment">  WCSLIB 4.8 - an implementation of the FITS WCS standard.</span>
<a name="l00004"></a>00004 <span class="comment">  Copyright (C) 1995-2011, Mark Calabretta</span>
<a name="l00005"></a>00005 <span class="comment"></span>
<a name="l00006"></a>00006 <span class="comment">  This file is part of WCSLIB.</span>
<a name="l00007"></a>00007 <span class="comment"></span>
<a name="l00008"></a>00008 <span class="comment">  WCSLIB is free software: you can redistribute it and/or modify it under the</span>
<a name="l00009"></a>00009 <span class="comment">  terms of the GNU Lesser General Public License as published by the Free</span>
<a name="l00010"></a>00010 <span class="comment">  Software Foundation, either version 3 of the License, or (at your option)</span>
<a name="l00011"></a>00011 <span class="comment">  any later version.</span>
<a name="l00012"></a>00012 <span class="comment"></span>
<a name="l00013"></a>00013 <span class="comment">  WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY</span>
<a name="l00014"></a>00014 <span class="comment">  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span>
<a name="l00015"></a>00015 <span class="comment">  FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for</span>
<a name="l00016"></a>00016 <span class="comment">  more details.</span>
<a name="l00017"></a>00017 <span class="comment"></span>
<a name="l00018"></a>00018 <span class="comment">  You should have received a copy of the GNU Lesser General Public License</span>
<a name="l00019"></a>00019 <span class="comment">  along with WCSLIB.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<a name="l00020"></a>00020 <span class="comment"></span>
<a name="l00021"></a>00021 <span class="comment">  Correspondence concerning WCSLIB may be directed to:</span>
<a name="l00022"></a>00022 <span class="comment">    Internet email: mcalabre@atnf.csiro.au</span>
<a name="l00023"></a>00023 <span class="comment">    Postal address: Dr. Mark Calabretta</span>
<a name="l00024"></a>00024 <span class="comment">                    Australia Telescope National Facility, CSIRO</span>
<a name="l00025"></a>00025 <span class="comment">                    PO Box 76</span>
<a name="l00026"></a>00026 <span class="comment">                    Epping NSW 1710</span>
<a name="l00027"></a>00027 <span class="comment">                    AUSTRALIA</span>
<a name="l00028"></a>00028 <span class="comment"></span>
<a name="l00029"></a>00029 <span class="comment">  Author: Mark Calabretta, Australia Telescope National Facility</span>
<a name="l00030"></a>00030 <span class="comment">  http://www.atnf.csiro.au/~mcalabre/index.html</span>
<a name="l00031"></a>00031 <span class="comment">  $Id: spc.h,v 4.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $</span>
<a name="l00032"></a>00032 <span class="comment">*=============================================================================</span>
<a name="l00033"></a>00033 <span class="comment">*</span>
<a name="l00034"></a>00034 <span class="comment">* WCSLIB 4.8 - C routines that implement the spectral coordinate systems</span>
<a name="l00035"></a>00035 <span class="comment">* recognized by the FITS World Coordinate System (WCS) standard.  Refer to</span>
<a name="l00036"></a>00036 <span class="comment">*</span>
<a name="l00037"></a>00037 <span class="comment">*   "Representations of world coordinates in FITS",</span>
<a name="l00038"></a>00038 <span class="comment">*   Greisen, E.W., &amp; Calabretta, M.R. 2002, A&amp;A, 395, 1061 (Paper I)</span>
<a name="l00039"></a>00039 <span class="comment">*</span>
<a name="l00040"></a>00040 <span class="comment">*   "Representations of spectral coordinates in FITS",</span>
<a name="l00041"></a>00041 <span class="comment">*   Greisen, E.W., Calabretta, M.R., Valdes, F.G., &amp; Allen, S.L.</span>
<a name="l00042"></a>00042 <span class="comment">*   2006, A&amp;A, 446, 747 (Paper III)</span>
<a name="l00043"></a>00043 <span class="comment">*</span>
<a name="l00044"></a>00044 <span class="comment">* Refer to the README file provided with WCSLIB for an overview of the</span>
<a name="l00045"></a>00045 <span class="comment">* library.</span>
<a name="l00046"></a>00046 <span class="comment">*</span>
<a name="l00047"></a>00047 <span class="comment">*</span>
<a name="l00048"></a>00048 <span class="comment">* Summary of the spc routines</span>
<a name="l00049"></a>00049 <span class="comment">* ---------------------------</span>
<a name="l00050"></a>00050 <span class="comment">* These routines implement the part of the FITS WCS standard that deals with</span>
<a name="l00051"></a>00051 <span class="comment">* spectral coordinates.  They define methods to be used for computing spectral</span>
<a name="l00052"></a>00052 <span class="comment">* world coordinates from intermediate world coordinates (a linear</span>
<a name="l00053"></a>00053 <span class="comment">* transformation of image pixel coordinates), and vice versa.  They are based</span>
<a name="l00054"></a>00054 <span class="comment">* on the spcprm struct which contains all information needed for the</span>
<a name="l00055"></a>00055 <span class="comment">* computations.  The struct contains some members that must be set by the</span>
<a name="l00056"></a>00056 <span class="comment">* user, and others that are maintained by these routines, somewhat like a</span>
<a name="l00057"></a>00057 <span class="comment">* C++ class but with no encapsulation.</span>
<a name="l00058"></a>00058 <span class="comment">*</span>
<a name="l00059"></a>00059 <span class="comment">* Routine spcini() is provided to initialize the spcprm struct with default</span>
<a name="l00060"></a>00060 <span class="comment">* values, spcfree() reclaims any memory that may have been allocated to store</span>
<a name="l00061"></a>00061 <span class="comment">* an error message, and spcprt() prints its contents.</span>
<a name="l00062"></a>00062 <span class="comment">*</span>
<a name="l00063"></a>00063 <span class="comment">* A setup routine, spcset(), computes intermediate values in the spcprm struct</span>
<a name="l00064"></a>00064 <span class="comment">* from parameters in it that were supplied by the user.  The struct always</span>
<a name="l00065"></a>00065 <span class="comment">* needs to be set up by spcset() but it need not be called explicitly - refer</span>
<a name="l00066"></a>00066 <span class="comment">* to the explanation of spcprm::flag.</span>
<a name="l00067"></a>00067 <span class="comment">*</span>
<a name="l00068"></a>00068 <span class="comment">* spcx2s() and spcs2x() implement the WCS spectral coordinate transformations.</span>
<a name="l00069"></a>00069 <span class="comment">* In fact, they are high level driver routines for the lower level spectral</span>
<a name="l00070"></a>00070 <span class="comment">* coordinate transformation routines described in spx.h.</span>
<a name="l00071"></a>00071 <span class="comment">*</span>
<a name="l00072"></a>00072 <span class="comment">* A number of routines are provided to aid in analysing or synthesising sets</span>
<a name="l00073"></a>00073 <span class="comment">* of FITS spectral axis keywords:</span>
<a name="l00074"></a>00074 <span class="comment">*</span>
<a name="l00075"></a>00075 <span class="comment">*   - spctype() checks a spectral CTYPEia keyword for validity and returns</span>
<a name="l00076"></a>00076 <span class="comment">*     information derived from it.</span>
<a name="l00077"></a>00077 <span class="comment">*</span>
<a name="l00078"></a>00078 <span class="comment">*   - Spectral keyword analysis routine spcspxe() computes the values of the</span>
<a name="l00079"></a>00079 <span class="comment">*     X-type spectral variables for the S-type variables supplied.</span>
<a name="l00080"></a>00080 <span class="comment">*</span>
<a name="l00081"></a>00081 <span class="comment">*   - Spectral keyword synthesis routine, spcxpse(), computes the S-type</span>
<a name="l00082"></a>00082 <span class="comment">*     variables for the X-types supplied.</span>
<a name="l00083"></a>00083 <span class="comment">*</span>
<a name="l00084"></a>00084 <span class="comment">*   - Given a set of spectral keywords, a translation routine, spctrne(),</span>
<a name="l00085"></a>00085 <span class="comment">*     produces the corresponding set for the specified spectral CTYPEia.</span>
<a name="l00086"></a>00086 <span class="comment">*</span>
<a name="l00087"></a>00087 <span class="comment">*   - spcaips() translates AIPS-convention spectral keywords, CTYPEn and</span>
<a name="l00088"></a>00088 <span class="comment">*     VELREF, into CTYPEia and SPECSYSa.</span>
<a name="l00089"></a>00089 <span class="comment">*</span>
<a name="l00090"></a>00090 <span class="comment">* Spectral variable types - S, P, and X:</span>
<a name="l00091"></a>00091 <span class="comment">* --------------------------------------</span>
<a name="l00092"></a>00092 <span class="comment">* A few words of explanation are necessary regarding spectral variable types</span>
<a name="l00093"></a>00093 <span class="comment">* in FITS.</span>
<a name="l00094"></a>00094 <span class="comment">*</span>
<a name="l00095"></a>00095 <span class="comment">* Every FITS spectral axis has three associated spectral variables:</span>
<a name="l00096"></a>00096 <span class="comment">*</span>
<a name="l00097"></a>00097 <span class="comment">*   S-type: the spectral variable in which coordinates are to be</span>
<a name="l00098"></a>00098 <span class="comment">*     expressed.  Each S-type is encoded as four characters and is</span>
<a name="l00099"></a>00099 <span class="comment">*     linearly related to one of four basic types as follows:</span>
<a name="l00100"></a>00100 <span class="comment">*</span>
<a name="l00101"></a>00101 <span class="comment">*     F: frequency</span>
<a name="l00102"></a>00102 <span class="comment">*       'FREQ':  frequency</span>
<a name="l00103"></a>00103 <span class="comment">*       'AFRQ':  angular frequency</span>
<a name="l00104"></a>00104 <span class="comment">*       'ENER':  photon energy</span>
<a name="l00105"></a>00105 <span class="comment">*       'WAVN':  wave number</span>
<a name="l00106"></a>00106 <span class="comment">*       'VRAD':  radio velocity</span>
<a name="l00107"></a>00107 <span class="comment">*</span>
<a name="l00108"></a>00108 <span class="comment">*     W: wavelength in vacuo</span>
<a name="l00109"></a>00109 <span class="comment">*       'WAVE':  wavelength</span>
<a name="l00110"></a>00110 <span class="comment">*       'VOPT':  optical velocity</span>
<a name="l00111"></a>00111 <span class="comment">*       'ZOPT':  redshift</span>
<a name="l00112"></a>00112 <span class="comment">*</span>
<a name="l00113"></a>00113 <span class="comment">*     A: wavelength in air</span>
<a name="l00114"></a>00114 <span class="comment">*       'AWAV':  wavelength in air</span>
<a name="l00115"></a>00115 <span class="comment">*</span>
<a name="l00116"></a>00116 <span class="comment">*     V: velocity</span>
<a name="l00117"></a>00117 <span class="comment">*       'VELO':  relativistic velocity</span>
<a name="l00118"></a>00118 <span class="comment">*       'BETA':  relativistic beta factor</span>
<a name="l00119"></a>00119 <span class="comment">*</span>
<a name="l00120"></a>00120 <span class="comment">*     The S-type forms the first four characters of the CTYPEia keyvalue,</span>
<a name="l00121"></a>00121 <span class="comment">*     and CRVALia and CDELTia are expressed as S-type quantities so that</span>
<a name="l00122"></a>00122 <span class="comment">*     they provide a first-order approximation to the S-type variable at</span>
<a name="l00123"></a>00123 <span class="comment">*     the reference point.</span>
<a name="l00124"></a>00124 <span class="comment">*</span>
<a name="l00125"></a>00125 <span class="comment">*     Note that 'AFRQ', angular frequency, is additional to the variables</span>
<a name="l00126"></a>00126 <span class="comment">*     defined in WCS Paper III.</span>
<a name="l00127"></a>00127 <span class="comment">*</span>
<a name="l00128"></a>00128 <span class="comment">*   P-type: the basic spectral variable (F, W, A, or V) with which the</span>
<a name="l00129"></a>00129 <span class="comment">*     S-type variable is associated (see list above).</span>
<a name="l00130"></a>00130 <span class="comment">*</span>
<a name="l00131"></a>00131 <span class="comment">*     For non-grism axes, the P-type is encoded as the eighth character of</span>
<a name="l00132"></a>00132 <span class="comment">*     CTYPEia.</span>
<a name="l00133"></a>00133 <span class="comment">*</span>
<a name="l00134"></a>00134 <span class="comment">*   X-type: the basic spectral variable (F, W, A, or V) for which the</span>
<a name="l00135"></a>00135 <span class="comment">*     spectral axis is linear, grisms excluded (see below).</span>
<a name="l00136"></a>00136 <span class="comment">*</span>
<a name="l00137"></a>00137 <span class="comment">*     For non-grism axes, the X-type is encoded as the sixth character of</span>
<a name="l00138"></a>00138 <span class="comment">*     CTYPEia.</span>
<a name="l00139"></a>00139 <span class="comment">*</span>
<a name="l00140"></a>00140 <span class="comment">*   Grisms: Grism axes have normal S-, and P-types but the axis is linear,</span>
<a name="l00141"></a>00141 <span class="comment">*     not in any spectral variable, but in a special "grism parameter".</span>
<a name="l00142"></a>00142 <span class="comment">*     The X-type spectral variable is either W or A for grisms in vacuo or</span>
<a name="l00143"></a>00143 <span class="comment">*     air respectively, but is encoded as 'w' or 'a' to indicate that an</span>
<a name="l00144"></a>00144 <span class="comment">*     additional transformation is required to convert to or from the</span>
<a name="l00145"></a>00145 <span class="comment">*     grism parameter.  The spectral algorithm code for grisms also has a</span>
<a name="l00146"></a>00146 <span class="comment">*     special encoding in CTYPEia, either 'GRI' (in vacuo) or 'GRA' (in air).</span>
<a name="l00147"></a>00147 <span class="comment">*</span>
<a name="l00148"></a>00148 <span class="comment">* In the algorithm chain, the non-linear transformation occurs between the</span>
<a name="l00149"></a>00149 <span class="comment">* X-type and the P-type variables; the transformation between P-type and</span>
<a name="l00150"></a>00150 <span class="comment">* S-type variables is always linear.</span>
<a name="l00151"></a>00151 <span class="comment">*</span>
<a name="l00152"></a>00152 <span class="comment">* When the P-type and X-type variables are the same, the spectral axis is</span>
<a name="l00153"></a>00153 <span class="comment">* linear in the S-type variable and the second four characters of CTYPEia</span>
<a name="l00154"></a>00154 <span class="comment">* are blank.  This can never happen for grism axes.</span>
<a name="l00155"></a>00155 <span class="comment">*</span>
<a name="l00156"></a>00156 <span class="comment">* As an example, correlating radio spectrometers always produce spectra that</span>
<a name="l00157"></a>00157 <span class="comment">* are regularly gridded in frequency; a redshift scale on such a spectrum is</span>
<a name="l00158"></a>00158 <span class="comment">* non-linear.  The required value of CTYPEia would be 'ZOPT-F2W', where the</span>
<a name="l00159"></a>00159 <span class="comment">* desired S-type is 'ZOPT' (redshift), the P-type is necessarily 'W'</span>
<a name="l00160"></a>00160 <span class="comment">* (wavelength), and the X-type is 'F' (frequency) by the nature of the</span>
<a name="l00161"></a>00161 <span class="comment">* instrument.</span>
<a name="l00162"></a>00162 <span class="comment">*</span>
<a name="l00163"></a>00163 <span class="comment">* Argument checking:</span>
<a name="l00164"></a>00164 <span class="comment">* ------------------</span>
<a name="l00165"></a>00165 <span class="comment">* The input spectral values are only checked for values that would result in</span>
<a name="l00166"></a>00166 <span class="comment">* floating point exceptions.  In particular, negative frequencies and</span>
<a name="l00167"></a>00167 <span class="comment">* wavelengths are allowed, as are velocities greater than the speed of</span>
<a name="l00168"></a>00168 <span class="comment">* light.  The same is true for the spectral parameters - rest frequency and</span>
<a name="l00169"></a>00169 <span class="comment">* wavelength.</span>
<a name="l00170"></a>00170 <span class="comment">*</span>
<a name="l00171"></a>00171 <span class="comment">* Accuracy:</span>
<a name="l00172"></a>00172 <span class="comment">* ---------</span>
<a name="l00173"></a>00173 <span class="comment">* No warranty is given for the accuracy of these routines (refer to the</span>
<a name="l00174"></a>00174 <span class="comment">* copyright notice); intending users must satisfy for themselves their</span>
<a name="l00175"></a>00175 <span class="comment">* adequacy for the intended purpose.  However, closure effectively to within</span>
<a name="l00176"></a>00176 <span class="comment">* double precision rounding error was demonstrated by test routine tspc.c</span>
<a name="l00177"></a>00177 <span class="comment">* which accompanies this software.</span>
<a name="l00178"></a>00178 <span class="comment">*</span>
<a name="l00179"></a>00179 <span class="comment">*</span>
<a name="l00180"></a>00180 <span class="comment">* spcini() - Default constructor for the spcprm struct</span>
<a name="l00181"></a>00181 <span class="comment">* ----------------------------------------------------</span>
<a name="l00182"></a>00182 <span class="comment">* spcini() sets all members of a spcprm struct to default values.  It should</span>
<a name="l00183"></a>00183 <span class="comment">* be used to initialize every spcprm struct.</span>
<a name="l00184"></a>00184 <span class="comment">*</span>
<a name="l00185"></a>00185 <span class="comment">* Given and returned:</span>
<a name="l00186"></a>00186 <span class="comment">*   spc       struct spcprm*</span>
<a name="l00187"></a>00187 <span class="comment">*                       Spectral transformation parameters.</span>
<a name="l00188"></a>00188 <span class="comment">*</span>
<a name="l00189"></a>00189 <span class="comment">* Function return value:</span>
<a name="l00190"></a>00190 <span class="comment">*             int       Status return value:</span>
<a name="l00191"></a>00191 <span class="comment">*                         0: Success.</span>
<a name="l00192"></a>00192 <span class="comment">*                         1: Null spcprm pointer passed.</span>
<a name="l00193"></a>00193 <span class="comment">*</span>
<a name="l00194"></a>00194 <span class="comment">*</span>
<a name="l00195"></a>00195 <span class="comment">* spcfree() - Destructor for the spcprm struct</span>
<a name="l00196"></a>00196 <span class="comment">* --------------------------------------------</span>
<a name="l00197"></a>00197 <span class="comment">* spcfree() frees any memory that may have been allocated to store an error</span>
<a name="l00198"></a>00198 <span class="comment">* message in the spcprm struct.</span>
<a name="l00199"></a>00199 <span class="comment">*</span>
<a name="l00200"></a>00200 <span class="comment">* Given:</span>
<a name="l00201"></a>00201 <span class="comment">*   spc       struct spcprm*</span>
<a name="l00202"></a>00202 <span class="comment">*                       Spectral transformation parameters.</span>
<a name="l00203"></a>00203 <span class="comment">*</span>
<a name="l00204"></a>00204 <span class="comment">* Function return value:</span>
<a name="l00205"></a>00205 <span class="comment">*             int       Status return value:</span>
<a name="l00206"></a>00206 <span class="comment">*                         0: Success.</span>
<a name="l00207"></a>00207 <span class="comment">*                         1: Null spcprm pointer passed.</span>
<a name="l00208"></a>00208 <span class="comment">*</span>
<a name="l00209"></a>00209 <span class="comment">*</span>
<a name="l00210"></a>00210 <span class="comment">* spcprt() - Print routine for the spcprm struct</span>
<a name="l00211"></a>00211 <span class="comment">* ----------------------------------------------</span>
<a name="l00212"></a>00212 <span class="comment">* spcprt() prints the contents of a spcprm struct using wcsprintf().  Mainly</span>
<a name="l00213"></a>00213 <span class="comment">* intended for diagnostic purposes.</span>
<a name="l00214"></a>00214 <span class="comment">*</span>
<a name="l00215"></a>00215 <span class="comment">* Given:</span>
<a name="l00216"></a>00216 <span class="comment">*   spc       const struct spcprm*</span>
<a name="l00217"></a>00217 <span class="comment">*                       Spectral transformation parameters.</span>
<a name="l00218"></a>00218 <span class="comment">*</span>
<a name="l00219"></a>00219 <span class="comment">* Function return value:</span>
<a name="l00220"></a>00220 <span class="comment">*             int       Status return value:</span>
<a name="l00221"></a>00221 <span class="comment">*                         0: Success.</span>
<a name="l00222"></a>00222 <span class="comment">*                         1: Null spcprm pointer passed.</span>
<a name="l00223"></a>00223 <span class="comment">*</span>
<a name="l00224"></a>00224 <span class="comment">*</span>
<a name="l00225"></a>00225 <span class="comment">* spcset() - Setup routine for the spcprm struct</span>
<a name="l00226"></a>00226 <span class="comment">* ----------------------------------------------</span>
<a name="l00227"></a>00227 <span class="comment">* spcset() sets up a spcprm struct according to information supplied within</span>
<a name="l00228"></a>00228 <span class="comment">* it.</span>
<a name="l00229"></a>00229 <span class="comment">*</span>
<a name="l00230"></a>00230 <span class="comment">* Note that this routine need not be called directly; it will be invoked by</span>
<a name="l00231"></a>00231 <span class="comment">* spcx2s() and spcs2x() if spcprm::flag is anything other than a predefined</span>
<a name="l00232"></a>00232 <span class="comment">* magic value.</span>
<a name="l00233"></a>00233 <span class="comment">*</span>
<a name="l00234"></a>00234 <span class="comment">* Given and returned:</span>
<a name="l00235"></a>00235 <span class="comment">*   spc       struct spcprm*</span>
<a name="l00236"></a>00236 <span class="comment">*                       Spectral transformation parameters.</span>
<a name="l00237"></a>00237 <span class="comment">*</span>
<a name="l00238"></a>00238 <span class="comment">* Function return value:</span>
<a name="l00239"></a>00239 <span class="comment">*             int       Status return value:</span>
<a name="l00240"></a>00240 <span class="comment">*                         0: Success.</span>
<a name="l00241"></a>00241 <span class="comment">*                         1: Null spcprm pointer passed.</span>
<a name="l00242"></a>00242 <span class="comment">*                         2: Invalid spectral parameters.</span>
<a name="l00243"></a>00243 <span class="comment">*</span>
<a name="l00244"></a>00244 <span class="comment">*                       For returns &gt; 1, a detailed error message is set in</span>
<a name="l00245"></a>00245 <span class="comment">*                       spcprm::err if enabled, see wcserr_enable().</span>
<a name="l00246"></a>00246 <span class="comment">*</span>
<a name="l00247"></a>00247 <span class="comment">*</span>
<a name="l00248"></a>00248 <span class="comment">* spcx2s() - Transform to spectral coordinates</span>
<a name="l00249"></a>00249 <span class="comment">* --------------------------------------------</span>
<a name="l00250"></a>00250 <span class="comment">* spcx2s() transforms intermediate world coordinates to spectral coordinates.</span>
<a name="l00251"></a>00251 <span class="comment">*</span>
<a name="l00252"></a>00252 <span class="comment">* Given and returned:</span>
<a name="l00253"></a>00253 <span class="comment">*   spc       struct spcprm*</span>
<a name="l00254"></a>00254 <span class="comment">*                       Spectral transformation parameters.</span>
<a name="l00255"></a>00255 <span class="comment">*</span>
<a name="l00256"></a>00256 <span class="comment">* Given:</span>
<a name="l00257"></a>00257 <span class="comment">*   nx        int       Vector length.</span>
<a name="l00258"></a>00258 <span class="comment">*</span>
<a name="l00259"></a>00259 <span class="comment">*   sx        int       Vector stride.</span>
<a name="l00260"></a>00260 <span class="comment">*</span>
<a name="l00261"></a>00261 <span class="comment">*   sspec     int       Vector stride.</span>
<a name="l00262"></a>00262 <span class="comment">*</span>
<a name="l00263"></a>00263 <span class="comment">*   x         const double[]</span>
<a name="l00264"></a>00264 <span class="comment">*                       Intermediate world coordinates, in SI units.</span>
<a name="l00265"></a>00265 <span class="comment">*</span>
<a name="l00266"></a>00266 <span class="comment">* Returned:</span>
<a name="l00267"></a>00267 <span class="comment">*   spec      double[]  Spectral coordinates, in SI units.</span>
<a name="l00268"></a>00268 <span class="comment">*</span>
<a name="l00269"></a>00269 <span class="comment">*   stat      int[]     Status return value status for each vector element:</span>
<a name="l00270"></a>00270 <span class="comment">*                         0: Success.</span>
<a name="l00271"></a>00271 <span class="comment">*                         1: Invalid value of x.</span>
<a name="l00272"></a>00272 <span class="comment">*</span>
<a name="l00273"></a>00273 <span class="comment">* Function return value:</span>
<a name="l00274"></a>00274 <span class="comment">*             int       Status return value:</span>
<a name="l00275"></a>00275 <span class="comment">*                         0: Success.</span>
<a name="l00276"></a>00276 <span class="comment">*                         1: Null spcprm pointer passed.</span>
<a name="l00277"></a>00277 <span class="comment">*                         2: Invalid spectral parameters.</span>
<a name="l00278"></a>00278 <span class="comment">*                         3: One or more of the x coordinates were invalid,</span>
<a name="l00279"></a>00279 <span class="comment">*                            as indicated by the stat vector.</span>
<a name="l00280"></a>00280 <span class="comment">*</span>
<a name="l00281"></a>00281 <span class="comment">*                       For returns &gt; 1, a detailed error message is set in</span>
<a name="l00282"></a>00282 <span class="comment">*                       spcprm::err if enabled, see wcserr_enable().</span>
<a name="l00283"></a>00283 <span class="comment">*</span>
<a name="l00284"></a>00284 <span class="comment">*</span>
<a name="l00285"></a>00285 <span class="comment">* spcs2x() - Transform spectral coordinates</span>
<a name="l00286"></a>00286 <span class="comment">* -----------------------------------------</span>
<a name="l00287"></a>00287 <span class="comment">* spcs2x() transforms spectral world coordinates to intermediate world</span>
<a name="l00288"></a>00288 <span class="comment">* coordinates.</span>
<a name="l00289"></a>00289 <span class="comment">*</span>
<a name="l00290"></a>00290 <span class="comment">* Given and returned:</span>
<a name="l00291"></a>00291 <span class="comment">*   spc       struct spcprm*</span>
<a name="l00292"></a>00292 <span class="comment">*                       Spectral transformation parameters.</span>
<a name="l00293"></a>00293 <span class="comment">*</span>
<a name="l00294"></a>00294 <span class="comment">* Given:</span>
<a name="l00295"></a>00295 <span class="comment">*   nspec     int       Vector length.</span>
<a name="l00296"></a>00296 <span class="comment">*</span>
<a name="l00297"></a>00297 <span class="comment">*   sspec     int       Vector stride.</span>
<a name="l00298"></a>00298 <span class="comment">*</span>
<a name="l00299"></a>00299 <span class="comment">*   sx        int       Vector stride.</span>
<a name="l00300"></a>00300 <span class="comment">*</span>
<a name="l00301"></a>00301 <span class="comment">*   spec      const double[]</span>
<a name="l00302"></a>00302 <span class="comment">*                       Spectral coordinates, in SI units.</span>
<a name="l00303"></a>00303 <span class="comment">*</span>
<a name="l00304"></a>00304 <span class="comment">* Returned:</span>
<a name="l00305"></a>00305 <span class="comment">*   x         double[]  Intermediate world coordinates, in SI units.</span>
<a name="l00306"></a>00306 <span class="comment">*</span>
<a name="l00307"></a>00307 <span class="comment">*   stat      int[]     Status return value status for each vector element:</span>
<a name="l00308"></a>00308 <span class="comment">*                         0: Success.</span>
<a name="l00309"></a>00309 <span class="comment">*                         1: Invalid value of spec.</span>
<a name="l00310"></a>00310 <span class="comment">*</span>
<a name="l00311"></a>00311 <span class="comment">* Function return value:</span>
<a name="l00312"></a>00312 <span class="comment">*             int       Status return value:</span>
<a name="l00313"></a>00313 <span class="comment">*                         0: Success.</span>
<a name="l00314"></a>00314 <span class="comment">*                         1: Null spcprm pointer passed.</span>
<a name="l00315"></a>00315 <span class="comment">*                         2: Invalid spectral parameters.</span>
<a name="l00316"></a>00316 <span class="comment">*                         4: One or more of the spec coordinates were</span>
<a name="l00317"></a>00317 <span class="comment">*                            invalid, as indicated by the stat vector.</span>
<a name="l00318"></a>00318 <span class="comment">*</span>
<a name="l00319"></a>00319 <span class="comment">*                       For returns &gt; 1, a detailed error message is set in</span>
<a name="l00320"></a>00320 <span class="comment">*                       spcprm::err if enabled, see wcserr_enable().</span>
<a name="l00321"></a>00321 <span class="comment">*</span>
<a name="l00322"></a>00322 <span class="comment">*</span>
<a name="l00323"></a>00323 <span class="comment">* spctype() - Spectral CTYPEia keyword analysis</span>
<a name="l00324"></a>00324 <span class="comment">* ---------------------------------------------</span>
<a name="l00325"></a>00325 <span class="comment">* spctype() checks whether a CTYPEia keyvalue is a valid spectral axis type</span>
<a name="l00326"></a>00326 <span class="comment">* and if so returns information derived from it relating to the associated S-,</span>
<a name="l00327"></a>00327 <span class="comment">* P-, and X-type spectral variables (see explanation above).</span>
<a name="l00328"></a>00328 <span class="comment">*</span>
<a name="l00329"></a>00329 <span class="comment">* The return arguments are guaranteed not be modified if CTYPEia is not a</span>
<a name="l00330"></a>00330 <span class="comment">* valid spectral type; zero-pointers may be specified for any that are not of</span>
<a name="l00331"></a>00331 <span class="comment">* interest.</span>
<a name="l00332"></a>00332 <span class="comment">*</span>
<a name="l00333"></a>00333 <span class="comment">* A deprecated form of this function, spctyp(), lacks the wcserr** parameter.</span>
<a name="l00334"></a>00334 <span class="comment">*</span>
<a name="l00335"></a>00335 <span class="comment">* Given:</span>
<a name="l00336"></a>00336 <span class="comment">*   ctype     const char[9]</span>
<a name="l00337"></a>00337 <span class="comment">*                       The CTYPEia keyvalue, (eight characters with null</span>
<a name="l00338"></a>00338 <span class="comment">*                       termination).</span>
<a name="l00339"></a>00339 <span class="comment">*</span>
<a name="l00340"></a>00340 <span class="comment">* Returned:</span>
<a name="l00341"></a>00341 <span class="comment">*   stype     char[]    The four-letter name of the S-type spectral variable</span>
<a name="l00342"></a>00342 <span class="comment">*                       copied or translated from ctype.  If a non-zero</span>
<a name="l00343"></a>00343 <span class="comment">*                       pointer is given, the array must accomodate a null-</span>
<a name="l00344"></a>00344 <span class="comment">*                       terminated string of length 5.</span>
<a name="l00345"></a>00345 <span class="comment">*</span>
<a name="l00346"></a>00346 <span class="comment">*   scode     char[]    The three-letter spectral algorithm code copied or</span>
<a name="l00347"></a>00347 <span class="comment">*                       translated from ctype.  Logarithmic ('LOG') and</span>
<a name="l00348"></a>00348 <span class="comment">*                       tabular ('TAB') codes are also recognized.  If a</span>
<a name="l00349"></a>00349 <span class="comment">*                       non-zero pointer is given, the array must accomodate a</span>
<a name="l00350"></a>00350 <span class="comment">*                       null-terminated string of length 4.</span>
<a name="l00351"></a>00351 <span class="comment">*</span>
<a name="l00352"></a>00352 <span class="comment">*   sname     char[]    Descriptive name of the S-type spectral variable.</span>
<a name="l00353"></a>00353 <span class="comment">*                       If a non-zero pointer is given, the array must</span>
<a name="l00354"></a>00354 <span class="comment">*                       accomodate a null-terminated string of length 22.</span>
<a name="l00355"></a>00355 <span class="comment">*</span>
<a name="l00356"></a>00356 <span class="comment">*   units     char[]    SI units of the S-type spectral variable.  If a</span>
<a name="l00357"></a>00357 <span class="comment">*                       non-zero pointer is given, the array must accomodate a</span>
<a name="l00358"></a>00358 <span class="comment">*                       null-terminated string of length 8.</span>
<a name="l00359"></a>00359 <span class="comment">*</span>
<a name="l00360"></a>00360 <span class="comment">*   ptype     char*     Character code for the P-type spectral variable</span>
<a name="l00361"></a>00361 <span class="comment">*                       derived from ctype, one of 'F', 'W', 'A', or 'V'.</span>
<a name="l00362"></a>00362 <span class="comment">*</span>
<a name="l00363"></a>00363 <span class="comment">*   xtype     char*     Character code for the X-type spectral variable</span>
<a name="l00364"></a>00364 <span class="comment">*                       derived from ctype, one of 'F', 'W', 'A', or 'V'.</span>
<a name="l00365"></a>00365 <span class="comment">*                       Also, 'w' and 'a' are synonymous to 'W' and 'A' for</span>
<a name="l00366"></a>00366 <span class="comment">*                       grisms in vacuo and air respectively.  Set to 'L' or</span>
<a name="l00367"></a>00367 <span class="comment">*                       'T' for logarithmic ('LOG') and tabular ('TAB') axes.</span>
<a name="l00368"></a>00368 <span class="comment">*</span>
<a name="l00369"></a>00369 <span class="comment">*   restreq   int*      Multivalued flag that indicates whether rest</span>
<a name="l00370"></a>00370 <span class="comment">*                       frequency or wavelength is required to compute</span>
<a name="l00371"></a>00371 <span class="comment">*                       spectral variables for this CTYPEia:</span>
<a name="l00372"></a>00372 <span class="comment">*                         0: Not required.</span>
<a name="l00373"></a>00373 <span class="comment">*                         1: Required for the conversion between S- and</span>
<a name="l00374"></a>00374 <span class="comment">*                            P-types (e.g. 'ZOPT-F2W').</span>
<a name="l00375"></a>00375 <span class="comment">*                         2: Required for the conversion between P- and</span>
<a name="l00376"></a>00376 <span class="comment">*                            X-types (e.g. 'BETA-W2V').</span>
<a name="l00377"></a>00377 <span class="comment">*                         3: Required for the conversion between S- and</span>
<a name="l00378"></a>00378 <span class="comment">*                            P-types, and between P- and X-types, but not</span>
<a name="l00379"></a>00379 <span class="comment">*                            between S- and X-types (this applies only for</span>
<a name="l00380"></a>00380 <span class="comment">*                            'VRAD-V2F', 'VOPT-V2W', and 'ZOPT-V2W').</span>
<a name="l00381"></a>00381 <span class="comment">*                        Thus the rest frequency or wavelength is required for</span>
<a name="l00382"></a>00382 <span class="comment">*                        spectral coordinate computations (i.e. between S- and</span>
<a name="l00383"></a>00383 <span class="comment">*                        X-types) only if restreq%3 != 0.</span>
<a name="l00384"></a>00384 <span class="comment">*</span>
<a name="l00385"></a>00385 <span class="comment">*   err       struct wcserr **</span>
<a name="l00386"></a>00386 <span class="comment">*                       For function return values &gt; 1, this struct will</span>
<a name="l00387"></a>00387 <span class="comment">*                       contain a detailed error message.  May be NULL if an</span>
<a name="l00388"></a>00388 <span class="comment">*                       error message is not desired.</span>
<a name="l00389"></a>00389 <span class="comment">*</span>
<a name="l00390"></a>00390 <span class="comment">* Function return value:</span>
<a name="l00391"></a>00391 <span class="comment">*             int       Status return value:</span>
<a name="l00392"></a>00392 <span class="comment">*                         0: Success.</span>
<a name="l00393"></a>00393 <span class="comment">*                         2: Invalid spectral parameters (not a spectral</span>
<a name="l00394"></a>00394 <span class="comment">*                            CTYPEia).</span>
<a name="l00395"></a>00395 <span class="comment">*</span>
<a name="l00396"></a>00396 <span class="comment">*</span>
<a name="l00397"></a>00397 <span class="comment">* spcspxe() - Spectral keyword analysis</span>
<a name="l00398"></a>00398 <span class="comment">* ------------------------------------</span>
<a name="l00399"></a>00399 <span class="comment">* spcspxe() analyses the CTYPEia and CRVALia FITS spectral axis keyword values</span>
<a name="l00400"></a>00400 <span class="comment">* and returns information about the associated X-type spectral variable.</span>
<a name="l00401"></a>00401 <span class="comment">*</span>
<a name="l00402"></a>00402 <span class="comment">* A deprecated form of this function, spcspx(), lacks the wcserr** parameter.</span>
<a name="l00403"></a>00403 <span class="comment">*</span>
<a name="l00404"></a>00404 <span class="comment">* Given:</span>
<a name="l00405"></a>00405 <span class="comment">*   ctypeS    const char[9]</span>
<a name="l00406"></a>00406 <span class="comment">*                       Spectral axis type, i.e. the CTYPEia keyvalue, (eight</span>
<a name="l00407"></a>00407 <span class="comment">*                       characters with null termination).  For non-grism</span>
<a name="l00408"></a>00408 <span class="comment">*                       axes, the character code for the P-type spectral</span>
<a name="l00409"></a>00409 <span class="comment">*                       variable in the algorithm code (i.e. the eighth</span>
<a name="l00410"></a>00410 <span class="comment">*                       character of CTYPEia) may be set to '?' (it will not</span>
<a name="l00411"></a>00411 <span class="comment">*                       be reset).</span>
<a name="l00412"></a>00412 <span class="comment">*</span>
<a name="l00413"></a>00413 <span class="comment">*   crvalS    double    Value of the S-type spectral variable at the reference</span>
<a name="l00414"></a>00414 <span class="comment">*                       point, i.e. the CRVALia keyvalue, SI units.</span>
<a name="l00415"></a>00415 <span class="comment">*</span>
<a name="l00416"></a>00416 <span class="comment">*   restfrq,</span>
<a name="l00417"></a>00417 <span class="comment">*   restwav   double    Rest frequency [Hz] and rest wavelength in vacuo [m],</span>
<a name="l00418"></a>00418 <span class="comment">*                       only one of which need be given, the other should be</span>
<a name="l00419"></a>00419 <span class="comment">*                       set to zero.  Neither are required if the translation</span>
<a name="l00420"></a>00420 <span class="comment">*                       is between wave-characteristic types, or between</span>
<a name="l00421"></a>00421 <span class="comment">*                       velocity-characteristic types.  E.g., required for</span>
<a name="l00422"></a>00422 <span class="comment">*                       'FREQ'     -&gt; 'ZOPT-F2W', but not required for</span>
<a name="l00423"></a>00423 <span class="comment">*                       'VELO-F2V' -&gt; 'ZOPT-F2W'.</span>
<a name="l00424"></a>00424 <span class="comment">*</span>
<a name="l00425"></a>00425 <span class="comment">* Returned:</span>
<a name="l00426"></a>00426 <span class="comment">*   ptype     char*     Character code for the P-type spectral variable</span>
<a name="l00427"></a>00427 <span class="comment">*                       derived from ctypeS, one of 'F', 'W', 'A', or 'V'.</span>
<a name="l00428"></a>00428 <span class="comment">*</span>
<a name="l00429"></a>00429 <span class="comment">*   xtype     char*     Character code for the X-type spectral variable</span>
<a name="l00430"></a>00430 <span class="comment">*                       derived from ctypeS, one of 'F', 'W', 'A', or 'V'.</span>
<a name="l00431"></a>00431 <span class="comment">*                       Also, 'w' and 'a' are synonymous to 'W' and 'A' for</span>
<a name="l00432"></a>00432 <span class="comment">*                       grisms in vacuo and air respectively; crvalX and dXdS</span>
<a name="l00433"></a>00433 <span class="comment">*                       (see below) will conform to these.</span>
<a name="l00434"></a>00434 <span class="comment">*</span>
<a name="l00435"></a>00435 <span class="comment">*   restreq   int*      Multivalued flag that indicates whether rest frequency</span>
<a name="l00436"></a>00436 <span class="comment">*                       or wavelength is required to compute spectral</span>
<a name="l00437"></a>00437 <span class="comment">*                       variables for this CTYPEia, as for spctype().</span>
<a name="l00438"></a>00438 <span class="comment">*</span>
<a name="l00439"></a>00439 <span class="comment">*   crvalX    double*   Value of the X-type spectral variable at the reference</span>
<a name="l00440"></a>00440 <span class="comment">*                       point, SI units.</span>
<a name="l00441"></a>00441 <span class="comment">*</span>
<a name="l00442"></a>00442 <span class="comment">*   dXdS      double*   The derivative, dX/dS, evaluated at the reference</span>
<a name="l00443"></a>00443 <span class="comment">*                       point, SI units.  Multiply the CDELTia keyvalue by</span>
<a name="l00444"></a>00444 <span class="comment">*                       this to get the pixel spacing in the X-type spectral</span>
<a name="l00445"></a>00445 <span class="comment">*                       coordinate.</span>
<a name="l00446"></a>00446 <span class="comment">*</span>
<a name="l00447"></a>00447 <span class="comment">*   err       struct wcserr **</span>
<a name="l00448"></a>00448 <span class="comment">*                       For function return values &gt; 1, this struct will</span>
<a name="l00449"></a>00449 <span class="comment">*                       contain a detailed error message.  May be NULL if an</span>
<a name="l00450"></a>00450 <span class="comment">*                       error message is not desired.</span>
<a name="l00451"></a>00451 <span class="comment">*</span>
<a name="l00452"></a>00452 <span class="comment">* Function return value:</span>
<a name="l00453"></a>00453 <span class="comment">*             int       Status return value:</span>
<a name="l00454"></a>00454 <span class="comment">*                         0: Success.</span>
<a name="l00455"></a>00455 <span class="comment">*                         2: Invalid spectral parameters.</span>
<a name="l00456"></a>00456 <span class="comment">*</span>
<a name="l00457"></a>00457 <span class="comment">*</span>
<a name="l00458"></a>00458 <span class="comment">* spcxpse() - Spectral keyword synthesis</span>
<a name="l00459"></a>00459 <span class="comment">* -------------------------------------</span>
<a name="l00460"></a>00460 <span class="comment">* spcxpse(), for the spectral axis type specified and the value provided for</span>
<a name="l00461"></a>00461 <span class="comment">* the X-type spectral variable at the reference point, deduces the value of</span>
<a name="l00462"></a>00462 <span class="comment">* the FITS spectral axis keyword CRVALia and also the derivative dS/dX which</span>
<a name="l00463"></a>00463 <span class="comment">* may be used to compute CDELTia.  See above for an explanation of the S-,</span>
<a name="l00464"></a>00464 <span class="comment">* P-, and X-type spectral variables.</span>
<a name="l00465"></a>00465 <span class="comment">*</span>
<a name="l00466"></a>00466 <span class="comment">* A deprecated form of this function, spcxps(), lacks the wcserr** parameter.</span>
<a name="l00467"></a>00467 <span class="comment">*</span>
<a name="l00468"></a>00468 <span class="comment">* Given:</span>
<a name="l00469"></a>00469 <span class="comment">*   ctypeS    const char[9]</span>
<a name="l00470"></a>00470 <span class="comment">*                       The required spectral axis type, i.e. the CTYPEia</span>
<a name="l00471"></a>00471 <span class="comment">*                       keyvalue, (eight characters with null termination).</span>
<a name="l00472"></a>00472 <span class="comment">*                       For non-grism axes, the character code for the P-type</span>
<a name="l00473"></a>00473 <span class="comment">*                       spectral variable in the algorithm code (i.e. the</span>
<a name="l00474"></a>00474 <span class="comment">*                       eighth character of CTYPEia) may be set to '?' (it</span>
<a name="l00475"></a>00475 <span class="comment">*                       will not be reset).</span>
<a name="l00476"></a>00476 <span class="comment">*</span>
<a name="l00477"></a>00477 <span class="comment">*   crvalX    double    Value of the X-type spectral variable at the reference</span>
<a name="l00478"></a>00478 <span class="comment">*                       point (N.B. NOT the CRVALia keyvalue), SI units.</span>
<a name="l00479"></a>00479 <span class="comment">*</span>
<a name="l00480"></a>00480 <span class="comment">*   restfrq,</span>
<a name="l00481"></a>00481 <span class="comment">*   restwav   double    Rest frequency [Hz] and rest wavelength in vacuo [m],</span>
<a name="l00482"></a>00482 <span class="comment">*                       only one of which need be given, the other should be</span>
<a name="l00483"></a>00483 <span class="comment">*                       set to zero.  Neither are required if the translation</span>
<a name="l00484"></a>00484 <span class="comment">*                       is between wave-characteristic types, or between</span>
<a name="l00485"></a>00485 <span class="comment">*                       velocity-characteristic types.  E.g., required for</span>
<a name="l00486"></a>00486 <span class="comment">*                       'FREQ'     -&gt; 'ZOPT-F2W', but not required for</span>
<a name="l00487"></a>00487 <span class="comment">*                       'VELO-F2V' -&gt; 'ZOPT-F2W'.</span>
<a name="l00488"></a>00488 <span class="comment">*</span>
<a name="l00489"></a>00489 <span class="comment">* Returned:</span>
<a name="l00490"></a>00490 <span class="comment">*   ptype     char*     Character code for the P-type spectral variable</span>
<a name="l00491"></a>00491 <span class="comment">*                       derived from ctypeS, one of 'F', 'W', 'A', or 'V'.</span>
<a name="l00492"></a>00492 <span class="comment">*</span>
<a name="l00493"></a>00493 <span class="comment">*   xtype     char*     Character code for the X-type spectral variable</span>
<a name="l00494"></a>00494 <span class="comment">*                       derived from ctypeS, one of 'F', 'W', 'A', or 'V'.</span>
<a name="l00495"></a>00495 <span class="comment">*                       Also, 'w' and 'a' are synonymous to 'W' and 'A' for</span>
<a name="l00496"></a>00496 <span class="comment">*                       grisms; crvalX and cdeltX must conform to these.</span>
<a name="l00497"></a>00497 <span class="comment">*</span>
<a name="l00498"></a>00498 <span class="comment">*   restreq   int*      Multivalued flag that indicates whether rest frequency</span>
<a name="l00499"></a>00499 <span class="comment">*                       or wavelength is required to compute spectral</span>
<a name="l00500"></a>00500 <span class="comment">*                       variables for this CTYPEia, as for spctype().</span>
<a name="l00501"></a>00501 <span class="comment">*</span>
<a name="l00502"></a>00502 <span class="comment">*   crvalS    double*   Value of the S-type spectral variable at the reference</span>
<a name="l00503"></a>00503 <span class="comment">*                       point (i.e. the appropriate CRVALia keyvalue), SI</span>
<a name="l00504"></a>00504 <span class="comment">*                       units.</span>
<a name="l00505"></a>00505 <span class="comment">*</span>
<a name="l00506"></a>00506 <span class="comment">*   dSdX      double*   The derivative, dS/dX, evaluated at the reference</span>
<a name="l00507"></a>00507 <span class="comment">*                       point, SI units.  Multiply this by the pixel spacing</span>
<a name="l00508"></a>00508 <span class="comment">*                       in the X-type spectral coordinate to get the CDELTia</span>
<a name="l00509"></a>00509 <span class="comment">*                       keyvalue.</span>
<a name="l00510"></a>00510 <span class="comment">*</span>
<a name="l00511"></a>00511 <span class="comment">*   err       struct wcserr **</span>
<a name="l00512"></a>00512 <span class="comment">*                       For function return values &gt; 1, this struct will</span>
<a name="l00513"></a>00513 <span class="comment">*                       contain a detailed error message.  May be NULL if an</span>
<a name="l00514"></a>00514 <span class="comment">*                       error message is not desired.</span>
<a name="l00515"></a>00515 <span class="comment">*</span>
<a name="l00516"></a>00516 <span class="comment">* Function return value:</span>
<a name="l00517"></a>00517 <span class="comment">*             int       Status return value:</span>
<a name="l00518"></a>00518 <span class="comment">*                         0: Success.</span>
<a name="l00519"></a>00519 <span class="comment">*                         2: Invalid spectral parameters.</span>
<a name="l00520"></a>00520 <span class="comment">*</span>
<a name="l00521"></a>00521 <span class="comment">*</span>
<a name="l00522"></a>00522 <span class="comment">* spctrne() - Spectral keyword translation</span>
<a name="l00523"></a>00523 <span class="comment">* ---------------------------------------</span>
<a name="l00524"></a>00524 <span class="comment">* spctrne() translates a set of FITS spectral axis keywords into the</span>
<a name="l00525"></a>00525 <span class="comment">* corresponding set for the specified spectral axis type.  For example, a</span>
<a name="l00526"></a>00526 <span class="comment">* 'FREQ' axis may be translated into 'ZOPT-F2W' and vice versa.</span>
<a name="l00527"></a>00527 <span class="comment">*</span>
<a name="l00528"></a>00528 <span class="comment">* A deprecated form of this function, spctrn(), lacks the wcserr** parameter.</span>
<a name="l00529"></a>00529 <span class="comment">*</span>
<a name="l00530"></a>00530 <span class="comment">* Given:</span>
<a name="l00531"></a>00531 <span class="comment">*   ctypeS1   const char[9]</span>
<a name="l00532"></a>00532 <span class="comment">*                       Spectral axis type, i.e. the CTYPEia keyvalue, (eight</span>
<a name="l00533"></a>00533 <span class="comment">*                       characters with null termination).  For non-grism</span>
<a name="l00534"></a>00534 <span class="comment">*                       axes, the character code for the P-type spectral</span>
<a name="l00535"></a>00535 <span class="comment">*                       variable in the algorithm code (i.e. the eighth</span>
<a name="l00536"></a>00536 <span class="comment">*                       character of CTYPEia) may be set to '?' (it will not</span>
<a name="l00537"></a>00537 <span class="comment">*                       be reset).</span>
<a name="l00538"></a>00538 <span class="comment">*</span>
<a name="l00539"></a>00539 <span class="comment">*   crvalS1   double    Value of the S-type spectral variable at the reference</span>
<a name="l00540"></a>00540 <span class="comment">*                       point, i.e. the CRVALia keyvalue, SI units.</span>
<a name="l00541"></a>00541 <span class="comment">*</span>
<a name="l00542"></a>00542 <span class="comment">*   cdeltS1   double    Increment of the S-type spectral variable at the</span>
<a name="l00543"></a>00543 <span class="comment">*                       reference point, SI units.</span>
<a name="l00544"></a>00544 <span class="comment">*</span>
<a name="l00545"></a>00545 <span class="comment">*   restfrq,</span>
<a name="l00546"></a>00546 <span class="comment">*   restwav   double    Rest frequency [Hz] and rest wavelength in vacuo [m],</span>
<a name="l00547"></a>00547 <span class="comment">*                       only one of which need be given, the other should be</span>
<a name="l00548"></a>00548 <span class="comment">*                       set to zero.  Neither are required if the translation</span>
<a name="l00549"></a>00549 <span class="comment">*                       is between wave-characteristic types, or between</span>
<a name="l00550"></a>00550 <span class="comment">*                       velocity-characteristic types.  E.g., required for</span>
<a name="l00551"></a>00551 <span class="comment">*                       'FREQ'     -&gt; 'ZOPT-F2W', but not required for</span>
<a name="l00552"></a>00552 <span class="comment">*                       'VELO-F2V' -&gt; 'ZOPT-F2W'.</span>
<a name="l00553"></a>00553 <span class="comment">*</span>
<a name="l00554"></a>00554 <span class="comment">* Given and returned:</span>
<a name="l00555"></a>00555 <span class="comment">*   ctypeS2   char[9]   Required spectral axis type (eight characters with</span>
<a name="l00556"></a>00556 <span class="comment">*                       null termination).  The first four characters are</span>
<a name="l00557"></a>00557 <span class="comment">*                       required to be given and are never modified.  The</span>
<a name="l00558"></a>00558 <span class="comment">*                       remaining four, the algorithm code, are completely</span>
<a name="l00559"></a>00559 <span class="comment">*                       determined by, and must be consistent with, ctypeS1</span>
<a name="l00560"></a>00560 <span class="comment">*                       and the first four characters of ctypeS2.  A non-zero</span>
<a name="l00561"></a>00561 <span class="comment">*                       status value will be returned if they are inconsistent</span>
<a name="l00562"></a>00562 <span class="comment">*                       (see below).  However, if the final three characters</span>
<a name="l00563"></a>00563 <span class="comment">*                       are specified as "???", or if just the eighth</span>
<a name="l00564"></a>00564 <span class="comment">*                       character is specified as '?', the correct algorithm</span>
<a name="l00565"></a>00565 <span class="comment">*                       code will be substituted (applies for grism axes as</span>
<a name="l00566"></a>00566 <span class="comment">*                       well as non-grism).</span>
<a name="l00567"></a>00567 <span class="comment">*</span>
<a name="l00568"></a>00568 <span class="comment">* Returned:</span>
<a name="l00569"></a>00569 <span class="comment">*   crvalS2   double*   Value of the new S-type spectral variable at the</span>
<a name="l00570"></a>00570 <span class="comment">*                       reference point, i.e. the new CRVALia keyvalue, SI</span>
<a name="l00571"></a>00571 <span class="comment">*                       units.</span>
<a name="l00572"></a>00572 <span class="comment">*</span>
<a name="l00573"></a>00573 <span class="comment">*   cdeltS2   double*   Increment of the new S-type spectral variable at the</span>
<a name="l00574"></a>00574 <span class="comment">*                       reference point, i.e. the new CDELTia keyvalue, SI</span>
<a name="l00575"></a>00575 <span class="comment">*                       units.</span>
<a name="l00576"></a>00576 <span class="comment">*</span>
<a name="l00577"></a>00577 <span class="comment">*   err       struct wcserr **</span>
<a name="l00578"></a>00578 <span class="comment">*                       For function return values &gt; 1, this struct will</span>
<a name="l00579"></a>00579 <span class="comment">*                       contain a detailed error message.  May be NULL if an</span>
<a name="l00580"></a>00580 <span class="comment">*                       error message is not desired.</span>
<a name="l00581"></a>00581 <span class="comment">*</span>
<a name="l00582"></a>00582 <span class="comment">* Function return value:</span>
<a name="l00583"></a>00583 <span class="comment">*             int       Status return value:</span>
<a name="l00584"></a>00584 <span class="comment">*                         0: Success.</span>
<a name="l00585"></a>00585 <span class="comment">*                         2: Invalid spectral parameters.</span>
<a name="l00586"></a>00586 <span class="comment">*</span>
<a name="l00587"></a>00587 <span class="comment">*                       A status value of 2 will be returned if restfrq or</span>
<a name="l00588"></a>00588 <span class="comment">*                       restwav are not specified when required, or if ctypeS1</span>
<a name="l00589"></a>00589 <span class="comment">*                       or ctypeS2 are self-inconsistent, or have different</span>
<a name="l00590"></a>00590 <span class="comment">*                       spectral X-type variables.</span>
<a name="l00591"></a>00591 <span class="comment">*</span>
<a name="l00592"></a>00592 <span class="comment">*</span>
<a name="l00593"></a>00593 <span class="comment">* spcaips() - Translate AIPS-convention spectral keywords</span>
<a name="l00594"></a>00594 <span class="comment">* -------------------------------------------------------</span>
<a name="l00595"></a>00595 <span class="comment">* spcaips() translates AIPS-convention spectral keywords, CTYPEn and VELREF,</span>
<a name="l00596"></a>00596 <span class="comment">* into CTYPEia and SPECSYSa.</span>
<a name="l00597"></a>00597 <span class="comment">*</span>
<a name="l00598"></a>00598 <span class="comment">* Given:</span>
<a name="l00599"></a>00599 <span class="comment">*   ctypeA    const char[9]</span>
<a name="l00600"></a>00600 <span class="comment">*                       CTYPEia keyvalue (eight characters, need not be null-</span>
<a name="l00601"></a>00601 <span class="comment">*                       terminated).</span>
<a name="l00602"></a>00602 <span class="comment">*</span>
<a name="l00603"></a>00603 <span class="comment">*   velref    int       AIPS-convention VELREF code.  It has the following</span>
<a name="l00604"></a>00604 <span class="comment">*                       integer values:</span>
<a name="l00605"></a>00605 <span class="comment">*                         1: LSR kinematic, originally described simply as</span>
<a name="l00606"></a>00606 <span class="comment">*                            "LSR" without distinction between the kinematic</span>
<a name="l00607"></a>00607 <span class="comment">*                            and dynamic definitions.</span>
<a name="l00608"></a>00608 <span class="comment">*                         2: Barycentric, originally described as "HEL"</span>
<a name="l00609"></a>00609 <span class="comment">*                            meaning heliocentric.</span>
<a name="l00610"></a>00610 <span class="comment">*                         3: Topocentric, originally described as "OBS"</span>
<a name="l00611"></a>00611 <span class="comment">*                            meaning geocentric but widely interpreted as</span>
<a name="l00612"></a>00612 <span class="comment">*                            topocentric.</span>
<a name="l00613"></a>00613 <span class="comment">*                       AIPS++ extensions to VELREF are also recognized:</span>
<a name="l00614"></a>00614 <span class="comment">*                         4: LSR dynamic.</span>
<a name="l00615"></a>00615 <span class="comment">*                         5: Geocentric.</span>
<a name="l00616"></a>00616 <span class="comment">*                         6: Source rest frame.</span>
<a name="l00617"></a>00617 <span class="comment">*                         7: Galactocentric.</span>
<a name="l00618"></a>00618 <span class="comment">*                       For an AIPS 'VELO' axis, a radio convention velocity</span>
<a name="l00619"></a>00619 <span class="comment">*                       is denoted by adding 256 to VELREF, otherwise an</span>
<a name="l00620"></a>00620 <span class="comment">*                       optical velocity is indicated (not applicable to</span>
<a name="l00621"></a>00621 <span class="comment">*                       'FELO' axes).  Unrecognized values of VELREF are</span>
<a name="l00622"></a>00622 <span class="comment">*                       simply ignored.</span>
<a name="l00623"></a>00623 <span class="comment">*</span>
<a name="l00624"></a>00624 <span class="comment">*                       VELREF takes precedence over CTYPEia in defining the</span>
<a name="l00625"></a>00625 <span class="comment">*                       Doppler frame, e.g. if</span>
<a name="l00626"></a>00626 <span class="comment">*</span>
<a name="l00627"></a>00627 <span class="comment">=                         CTYPEn = 'VELO-HEL'</span>
<a name="l00628"></a>00628 <span class="comment">=                         VELREF = 1</span>
<a name="l00629"></a>00629 <span class="comment">*</span>
<a name="l00630"></a>00630 <span class="comment">*                       the Doppler frame is set to LSRK.</span>
<a name="l00631"></a>00631 <span class="comment">*</span>
<a name="l00632"></a>00632 <span class="comment">* Returned:</span>
<a name="l00633"></a>00633 <span class="comment">*   ctype     char[9]   Translated CTYPEia keyvalue, or a copy of ctypeA if no</span>
<a name="l00634"></a>00634 <span class="comment">*                       translation was performed (null-filled).</span>
<a name="l00635"></a>00635 <span class="comment">*</span>
<a name="l00636"></a>00636 <span class="comment">*   specsys   char[9]   Doppler reference frame indicated by VELREF or else by</span>
<a name="l00637"></a>00637 <span class="comment">*                       CTYPEn.</span>
<a name="l00638"></a>00638 <span class="comment">*</span>
<a name="l00639"></a>00639 <span class="comment">* Function return value:</span>
<a name="l00640"></a>00640 <span class="comment">*             int       Status return value:</span>
<a name="l00641"></a>00641 <span class="comment">*                        -1: No translation required (not an error).</span>
<a name="l00642"></a>00642 <span class="comment">*                         0: Success.</span>
<a name="l00643"></a>00643 <span class="comment">*</span>
<a name="l00644"></a>00644 <span class="comment">*</span>
<a name="l00645"></a>00645 <span class="comment">* spcprm struct - Spectral transformation parameters</span>
<a name="l00646"></a>00646 <span class="comment">* --------------------------------------------------</span>
<a name="l00647"></a>00647 <span class="comment">* The spcprm struct contains information required to transform spectral</span>
<a name="l00648"></a>00648 <span class="comment">* coordinates.  It consists of certain members that must be set by the user</span>
<a name="l00649"></a>00649 <span class="comment">* ("given") and others that are set by the WCSLIB routines ("returned").  Some</span>
<a name="l00650"></a>00650 <span class="comment">* of the latter are supplied for informational purposes while others are for</span>
<a name="l00651"></a>00651 <span class="comment">* internal use only.</span>
<a name="l00652"></a>00652 <span class="comment">*</span>
<a name="l00653"></a>00653 <span class="comment">*   int flag</span>
<a name="l00654"></a>00654 <span class="comment">*     (Given and returned) This flag must be set to zero whenever any of the</span>
<a name="l00655"></a>00655 <span class="comment">*     following spcprm structure members are set or changed:</span>
<a name="l00656"></a>00656 <span class="comment">*</span>
<a name="l00657"></a>00657 <span class="comment">*       - spcprm::type,</span>
<a name="l00658"></a>00658 <span class="comment">*       - spcprm::code,</span>
<a name="l00659"></a>00659 <span class="comment">*       - spcprm::crval,</span>
<a name="l00660"></a>00660 <span class="comment">*       - spcprm::restfrq,</span>
<a name="l00661"></a>00661 <span class="comment">*       - spcprm::restwav,</span>
<a name="l00662"></a>00662 <span class="comment">*       - spcprm::pv[].</span>
<a name="l00663"></a>00663 <span class="comment">*</span>
<a name="l00664"></a>00664 <span class="comment">*     This signals the initialization routine, spcset(), to recompute the</span>
<a name="l00665"></a>00665 <span class="comment">*     returned members of the spcprm struct.  spcset() will reset flag to</span>
<a name="l00666"></a>00666 <span class="comment">*     indicate that this has been done.</span>
<a name="l00667"></a>00667 <span class="comment">*</span>
<a name="l00668"></a>00668 <span class="comment">*   char type[8]</span>
<a name="l00669"></a>00669 <span class="comment">*     (Given) Four-letter spectral variable type, e.g "ZOPT" for</span>
<a name="l00670"></a>00670 <span class="comment">*     CTYPEia = 'ZOPT-F2W'.  (Declared as char[8] for alignment reasons.)</span>
<a name="l00671"></a>00671 <span class="comment">*</span>
<a name="l00672"></a>00672 <span class="comment">*   char code[4]</span>
<a name="l00673"></a>00673 <span class="comment">*     (Given) Three-letter spectral algorithm code, e.g "F2W" for</span>
<a name="l00674"></a>00674 <span class="comment">*     CTYPEia = 'ZOPT-F2W'.</span>
<a name="l00675"></a>00675 <span class="comment">*</span>
<a name="l00676"></a>00676 <span class="comment">*   double crval</span>
<a name="l00677"></a>00677 <span class="comment">*     (Given) Reference value (CRVALia), SI units.</span>
<a name="l00678"></a>00678 <span class="comment">*</span>
<a name="l00679"></a>00679 <span class="comment">*   double restfrq</span>
<a name="l00680"></a>00680 <span class="comment">*     (Given) The rest frequency [Hz], and ...</span>
<a name="l00681"></a>00681 <span class="comment">*</span>
<a name="l00682"></a>00682 <span class="comment">*   double restwav</span>
<a name="l00683"></a>00683 <span class="comment">*     (Given) ... the rest wavelength in vacuo [m], only one of which need be</span>
<a name="l00684"></a>00684 <span class="comment">*     given, the other should be set to zero.  Neither are required if the</span>
<a name="l00685"></a>00685 <span class="comment">*     X and S spectral variables are both wave-characteristic, or both</span>
<a name="l00686"></a>00686 <span class="comment">*     velocity-characteristic, types.</span>
<a name="l00687"></a>00687 <span class="comment">*</span>
<a name="l00688"></a>00688 <span class="comment">*   double pv[7]</span>
<a name="l00689"></a>00689 <span class="comment">*     (Given) Grism parameters for 'GRI' and 'GRA' algorithm codes:</span>
<a name="l00690"></a>00690 <span class="comment">*       - 0: G, grating ruling density.</span>
<a name="l00691"></a>00691 <span class="comment">*       - 1: m, interference order.</span>
<a name="l00692"></a>00692 <span class="comment">*       - 2: alpha, angle of incidence [deg].</span>
<a name="l00693"></a>00693 <span class="comment">*       - 3: n_r, refractive index at the reference wavelength, lambda_r.</span>
<a name="l00694"></a>00694 <span class="comment">*       - 4: n'_r, dn/dlambda at the reference wavelength, lambda_r (/m).</span>
<a name="l00695"></a>00695 <span class="comment">*       - 5: epsilon, grating tilt angle [deg].</span>
<a name="l00696"></a>00696 <span class="comment">*       - 6: theta, detector tilt angle [deg].</span>
<a name="l00697"></a>00697 <span class="comment">*</span>
<a name="l00698"></a>00698 <span class="comment">* The remaining members of the spcprm struct are maintained by spcset() and</span>
<a name="l00699"></a>00699 <span class="comment">* must not be modified elsewhere:</span>
<a name="l00700"></a>00700 <span class="comment">*</span>
<a name="l00701"></a>00701 <span class="comment">*   double w[6]</span>
<a name="l00702"></a>00702 <span class="comment">*     (Returned) Intermediate values:</span>
<a name="l00703"></a>00703 <span class="comment">*       - 0: Rest frequency or wavelength (SI).</span>
<a name="l00704"></a>00704 <span class="comment">*       - 1: The value of the X-type spectral variable at the reference point</span>
<a name="l00705"></a>00705 <span class="comment">*           (SI units).</span>
<a name="l00706"></a>00706 <span class="comment">*       - 2: dX/dS at the reference point (SI units).</span>
<a name="l00707"></a>00707 <span class="comment">*      The remainder are grism intermediates.</span>
<a name="l00708"></a>00708 <span class="comment">*</span>
<a name="l00709"></a>00709 <span class="comment">*   int isGrism</span>
<a name="l00710"></a>00710 <span class="comment">*     (Returned) Grism coordinates?</span>
<a name="l00711"></a>00711 <span class="comment">*       - 0: no,</span>
<a name="l00712"></a>00712 <span class="comment">*       - 1: in vacuum,</span>
<a name="l00713"></a>00713 <span class="comment">*       - 2: in air.</span>
<a name="l00714"></a>00714 <span class="comment">*</span>
<a name="l00715"></a>00715 <span class="comment">*   int padding1</span>
<a name="l00716"></a>00716 <span class="comment">*     (An unused variable inserted for alignment purposes only.)</span>
<a name="l00717"></a>00717 <span class="comment">*</span>
<a name="l00718"></a>00718 <span class="comment">*   struct wcserr *err</span>
<a name="l00719"></a>00719 <span class="comment">*     (Returned) If enabled, when an error status is returned this structure</span>
<a name="l00720"></a>00720 <span class="comment">*     contains detailed information about the error, see wcserr_enable().</span>
<a name="l00721"></a>00721 <span class="comment">*</span>
<a name="l00722"></a>00722 <span class="comment">*   void *padding2</span>
<a name="l00723"></a>00723 <span class="comment">*     (An unused variable inserted for alignment purposes only.)</span>
<a name="l00724"></a>00724 <span class="comment">*   int (*spxX2P)(SPX_ARGS)</span>
<a name="l00725"></a>00725 <span class="comment">*     (Returned) The first and ...</span>
<a name="l00726"></a>00726 <span class="comment">*   int (*spxP2S)(SPX_ARGS)</span>
<a name="l00727"></a>00727 <span class="comment">*     (Returned) ... the second of the pointers to the transformation</span>
<a name="l00728"></a>00728 <span class="comment">*     functions in the two-step algorithm chain X -&gt; P -&gt; S in the</span>
<a name="l00729"></a>00729 <span class="comment">*     pixel-to-spectral direction where the non-linear transformation is from</span>
<a name="l00730"></a>00730 <span class="comment">*     X to P.  The argument list, SPX_ARGS, is defined in spx.h.</span>
<a name="l00731"></a>00731 <span class="comment">*</span>
<a name="l00732"></a>00732 <span class="comment">*   int (*spxS2P)(SPX_ARGS)</span>
<a name="l00733"></a>00733 <span class="comment">*     (Returned) The first and ...</span>
<a name="l00734"></a>00734 <span class="comment">*   int (*spxP2X)(SPX_ARGS)</span>
<a name="l00735"></a>00735 <span class="comment">*     (Returned) ... the second of the pointers to the transformation</span>
<a name="l00736"></a>00736 <span class="comment">*     functions in the two-step algorithm chain S -&gt; P -&gt; X in the</span>
<a name="l00737"></a>00737 <span class="comment">*     spectral-to-pixel direction where the non-linear transformation is from</span>
<a name="l00738"></a>00738 <span class="comment">*     P to X.  The argument list, SPX_ARGS, is defined in spx.h.</span>
<a name="l00739"></a>00739 <span class="comment">*</span>
<a name="l00740"></a>00740 <span class="comment">*</span>
<a name="l00741"></a>00741 <span class="comment">* Global variable: const char *spc_errmsg[] - Status return messages</span>
<a name="l00742"></a>00742 <span class="comment">* ------------------------------------------------------------------</span>
<a name="l00743"></a>00743 <span class="comment">* Error messages to match the status value returned from each function.</span>
<a name="l00744"></a>00744 <span class="comment">*</span>
<a name="l00745"></a>00745 <span class="comment">*===========================================================================*/</span>
<a name="l00746"></a>00746 
<a name="l00747"></a>00747 <span class="preprocessor">#ifndef WCSLIB_SPC</span>
<a name="l00748"></a>00748 <span class="preprocessor"></span><span class="preprocessor">#define WCSLIB_SPC</span>
<a name="l00749"></a>00749 <span class="preprocessor"></span>
<a name="l00750"></a>00750 <span class="preprocessor">#include "<a class="code" href="spx_8h.html">spx.h</a>"</span>
<a name="l00751"></a>00751 <span class="preprocessor">#include "<a class="code" href="wcserr_8h.html">wcserr.h</a>"</span>
<a name="l00752"></a>00752 
<a name="l00753"></a>00753 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00754"></a>00754 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
<a name="l00755"></a>00755 <span class="preprocessor">#endif</span>
<a name="l00756"></a>00756 <span class="preprocessor"></span>
<a name="l00757"></a>00757 
<a name="l00758"></a>00758 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="spc_8h.html#96978fec523018fd6898301a3452c166" title="Status return messages.">spc_errmsg</a>[];
<a name="l00759"></a>00759 
<a name="l00760"></a><a class="code" href="spc_8h.html#51ba1ce5380fd2e7693c37554d18fc3b">00760</a> <span class="keyword">enum</span> <a class="code" href="spc_8h.html#51ba1ce5380fd2e7693c37554d18fc3b">spc_errmsg_enum</a> {
<a name="l00761"></a><a class="code" href="spc_8h.html#51ba1ce5380fd2e7693c37554d18fc3b0b84f38d1e903eacda3122ce55bff741">00761</a>   <a class="code" href="spc_8h.html#51ba1ce5380fd2e7693c37554d18fc3b0b84f38d1e903eacda3122ce55bff741">SPCERR_SUCCESS</a>         = 0,   <span class="comment">/* Success. */</span>
<a name="l00762"></a><a class="code" href="spc_8h.html#51ba1ce5380fd2e7693c37554d18fc3b7c5e0d09fac9f441e39f3cf28801961f">00762</a>   <a class="code" href="spc_8h.html#51ba1ce5380fd2e7693c37554d18fc3b7c5e0d09fac9f441e39f3cf28801961f">SPCERR_NULL_POINTER</a>    = 1,   <span class="comment">/* Null spcprm pointer passed. */</span>
<a name="l00763"></a><a class="code" href="spc_8h.html#51ba1ce5380fd2e7693c37554d18fc3b0653e60411a641a326492c65d257daa8">00763</a>   <a class="code" href="spc_8h.html#51ba1ce5380fd2e7693c37554d18fc3b0653e60411a641a326492c65d257daa8">SPCERR_BAD_SPEC_PARAMS</a> = 2,   <span class="comment">/* Invalid spectral parameters. */</span>
<a name="l00764"></a><a class="code" href="spc_8h.html#51ba1ce5380fd2e7693c37554d18fc3b3ba9183c7c3dace15eef0606980fd615">00764</a>   <a class="code" href="spc_8h.html#51ba1ce5380fd2e7693c37554d18fc3b3ba9183c7c3dace15eef0606980fd615">SPCERR_BAD_X</a>           = 3,   <span class="comment">/* One or more of x coordinates were</span>
<a name="l00765"></a>00765 <span class="comment">                                   invalid. */</span>
<a name="l00766"></a><a class="code" href="spc_8h.html#51ba1ce5380fd2e7693c37554d18fc3b7e218c5bd52bd6a45d8ad66573653007">00766</a>   <a class="code" href="spc_8h.html#51ba1ce5380fd2e7693c37554d18fc3b7e218c5bd52bd6a45d8ad66573653007">SPCERR_BAD_SPEC</a>        = 4    <span class="comment">/* One or more of the spec coordinates were</span>
<a name="l00767"></a>00767 <span class="comment">                                   invalid. */</span>
<a name="l00768"></a>00768 };
<a name="l00769"></a>00769 
<a name="l00770"></a><a class="code" href="structspcprm.html">00770</a> <span class="keyword">struct </span><a class="code" href="structspcprm.html" title="Spectral transformation parameters.">spcprm</a> {
<a name="l00771"></a>00771   <span class="comment">/* Initialization flag (see the prologue above).                          */</span>
<a name="l00772"></a>00772   <span class="comment">/*------------------------------------------------------------------------*/</span>
<a name="l00773"></a><a class="code" href="structspcprm.html#feeb5f4056f271fd37291a712a7b6791">00773</a>   <span class="keywordtype">int</span>    <a class="code" href="structspcprm.html#feeb5f4056f271fd37291a712a7b6791">flag</a>;                  <span class="comment">/* Set to zero to force initialization.     */</span>
<a name="l00774"></a>00774 
<a name="l00775"></a>00775   <span class="comment">/* Parameters to be provided (see the prologue above).                    */</span>
<a name="l00776"></a>00776   <span class="comment">/*------------------------------------------------------------------------*/</span>
<a name="l00777"></a><a class="code" href="structspcprm.html#387d74de3215763d7e22c222b19a2c44">00777</a>   <span class="keywordtype">char</span>   <a class="code" href="structspcprm.html#387d74de3215763d7e22c222b19a2c44">type</a>[8];               <span class="comment">/* Four-letter spectral variable type.      */</span>
<a name="l00778"></a><a class="code" href="structspcprm.html#5f9a48a52144f8ced93baaffc107a3a6">00778</a>   <span class="keywordtype">char</span>   <a class="code" href="structspcprm.html#5f9a48a52144f8ced93baaffc107a3a6">code</a>[4];               <span class="comment">/* Three-letter spectral algorithm code.    */</span>
<a name="l00779"></a>00779 
<a name="l00780"></a><a class="code" href="structspcprm.html#2c5c2d97e6c5f617272834b1516c84de">00780</a>   <span class="keywordtype">double</span> <a class="code" href="structspcprm.html#2c5c2d97e6c5f617272834b1516c84de">crval</a>;                 <span class="comment">/* Reference value (CRVALia), SI units.     */</span>
<a name="l00781"></a><a class="code" href="structspcprm.html#74433ae0e7e1ec426777bafb402b50c4">00781</a>   <span class="keywordtype">double</span> <a class="code" href="structspcprm.html#74433ae0e7e1ec426777bafb402b50c4">restfrq</a>;               <span class="comment">/* Rest frequency, Hz.                      */</span>
<a name="l00782"></a><a class="code" href="structspcprm.html#4dbc8c7064ae790483017b6c81e7ded2">00782</a>   <span class="keywordtype">double</span> <a class="code" href="structspcprm.html#4dbc8c7064ae790483017b6c81e7ded2">restwav</a>;               <span class="comment">/* Rest wavelength, m.                      */</span>
<a name="l00783"></a>00783 
<a name="l00784"></a><a class="code" href="structspcprm.html#e11db8d7ff8b605eed87298a32fd094d">00784</a>   <span class="keywordtype">double</span> <a class="code" href="structspcprm.html#e11db8d7ff8b605eed87298a32fd094d">pv</a>[7];                 <span class="comment">/* Grism parameters:                        */</span>
<a name="l00785"></a>00785                                 <span class="comment">/*   0: G, grating ruling density.          */</span>
<a name="l00786"></a>00786                                 <span class="comment">/*   1: m, interference order.              */</span>
<a name="l00787"></a>00787                                 <span class="comment">/*   2: alpha, angle of incidence.          */</span>
<a name="l00788"></a>00788                                 <span class="comment">/*   3: n_r, refractive index at lambda_r.  */</span>
<a name="l00789"></a>00789                                 <span class="comment">/*   4: n'_r, dn/dlambda at lambda_r.       */</span>
<a name="l00790"></a>00790                                 <span class="comment">/*   5: epsilon, grating tilt angle.        */</span>
<a name="l00791"></a>00791                                 <span class="comment">/*   6: theta, detector tilt angle.         */</span>
<a name="l00792"></a>00792 
<a name="l00793"></a>00793   <span class="comment">/* Information derived from the parameters supplied.                      */</span>
<a name="l00794"></a>00794   <span class="comment">/*------------------------------------------------------------------------*/</span>
<a name="l00795"></a><a class="code" href="structspcprm.html#8ef0c963f1b0ee957f3403da7559a81c">00795</a>   <span class="keywordtype">double</span> <a class="code" href="structspcprm.html#8ef0c963f1b0ee957f3403da7559a81c">w</a>[6];                  <span class="comment">/* Intermediate values.                     */</span>
<a name="l00796"></a>00796                                 <span class="comment">/*   0: Rest frequency or wavelength (SI).  */</span>
<a name="l00797"></a>00797                                 <span class="comment">/*   1: CRVALX (SI units).                  */</span>
<a name="l00798"></a>00798                                 <span class="comment">/*   2: CDELTX/CDELTia = dX/dS (SI units).  */</span>
<a name="l00799"></a>00799                                 <span class="comment">/* The remainder are grism intermediates.   */</span>
<a name="l00800"></a>00800 
<a name="l00801"></a><a class="code" href="structspcprm.html#ec5d37c00d382a84a090d4f52d9a4346">00801</a>   <span class="keywordtype">int</span>    <a class="code" href="structspcprm.html#ec5d37c00d382a84a090d4f52d9a4346">isGrism</a>;               <span class="comment">/* Grism coordinates?  1: vacuum, 2: air.   */</span>
<a name="l00802"></a><a class="code" href="structspcprm.html#844792d006c308f465ce8ca593a37df3">00802</a>   <span class="keywordtype">int</span>    <a class="code" href="structspcprm.html#844792d006c308f465ce8ca593a37df3">padding1</a>;              <span class="comment">/* (Dummy inserted for alignment purposes.) */</span>
<a name="l00803"></a>00803 
<a name="l00804"></a>00804   <span class="comment">/* Error handling                                                         */</span>
<a name="l00805"></a>00805   <span class="comment">/*------------------------------------------------------------------------*/</span>
<a name="l00806"></a><a class="code" href="structspcprm.html#6d4124d4db8f7addcbfee99a8634522e">00806</a>   <span class="keyword">struct </span><a class="code" href="structwcserr.html" title="Error message handling.">wcserr</a> *<a class="code" href="structspcprm.html#6d4124d4db8f7addcbfee99a8634522e">err</a>;
<a name="l00807"></a>00807 
<a name="l00808"></a>00808   <span class="comment">/* Private                                                                */</span>
<a name="l00809"></a>00809   <span class="comment">/*------------------------------------------------------------------------*/</span>
<a name="l00810"></a><a class="code" href="structspcprm.html#55316470e5591401576ba3c5c384df0b">00810</a>   <span class="keywordtype">void</span>   *<a class="code" href="structspcprm.html#55316470e5591401576ba3c5c384df0b">padding2</a>;             <span class="comment">/* (Dummy inserted for alignment purposes.) */</span>
<a name="l00811"></a>00811   int (*<a class="code" href="structspcprm.html#20db4194170d78054908acf94b41d9d9">spxX2P</a>)(<a class="code" href="spx_8h.html#777e5c4790da397aefcada61445a1bb3" title="For use in declaring spectral conversion function prototypes.">SPX_ARGS</a>);      <span class="comment">/* Pointers to the transformation functions */</span>
<a name="l00812"></a>00812   int (*<a class="code" href="structspcprm.html#dd01b70b4a074a7bdccff378ab61a948">spxP2S</a>)(<a class="code" href="spx_8h.html#777e5c4790da397aefcada61445a1bb3" title="For use in declaring spectral conversion function prototypes.">SPX_ARGS</a>);      <span class="comment">/* in the two-step algorithm chain in the   */</span>
<a name="l00813"></a>00813                                 <span class="comment">/* pixel-to-spectral direction.             */</span>
<a name="l00814"></a>00814 
<a name="l00815"></a>00815   int (*<a class="code" href="structspcprm.html#fb6a33994ad13f402efb68d20a97eee1">spxS2P</a>)(<a class="code" href="spx_8h.html#777e5c4790da397aefcada61445a1bb3" title="For use in declaring spectral conversion function prototypes.">SPX_ARGS</a>);      <span class="comment">/* Pointers to the transformation functions */</span>
<a name="l00816"></a>00816   int (*<a class="code" href="structspcprm.html#6727d3a30592e54c7361e0434a795832">spxP2X</a>)(<a class="code" href="spx_8h.html#777e5c4790da397aefcada61445a1bb3" title="For use in declaring spectral conversion function prototypes.">SPX_ARGS</a>);      <span class="comment">/* in the two-step algorithm chain in the   */</span>
<a name="l00817"></a>00817                                 <span class="comment">/* spectral-to-pixel direction.             */</span>
<a name="l00818"></a>00818 };
<a name="l00819"></a>00819 
<a name="l00820"></a>00820 <span class="comment">/* Size of the spcprm struct in int units, used by the Fortran wrappers. */</span>
<a name="l00821"></a><a class="code" href="spc_8h.html#4e195ae6c61da3608692a3c7f2395599">00821</a> <span class="preprocessor">#define SPCLEN (sizeof(struct spcprm)/sizeof(int))</span>
<a name="l00822"></a>00822 <span class="preprocessor"></span>
<a name="l00823"></a>00823 
<a name="l00824"></a>00824 <span class="keywordtype">int</span> <a class="code" href="spc_8h.html#30c95d776068ef3cc959a50af9995fa9" title="Default constructor for the spcprm struct.">spcini</a>(<span class="keyword">struct</span> <a class="code" href="structspcprm.html" title="Spectral transformation parameters.">spcprm</a> *spc);
<a name="l00825"></a>00825 
<a name="l00826"></a>00826 <span class="keywordtype">int</span> <a class="code" href="spc_8h.html#2e04fc3ccd8aceebb4bfef56c5399a7d" title="Destructor for the spcprm struct.">spcfree</a>(<span class="keyword">struct</span> <a class="code" href="structspcprm.html" title="Spectral transformation parameters.">spcprm</a> *spc);
<a name="l00827"></a>00827 
<a name="l00828"></a>00828 <span class="keywordtype">int</span> <a class="code" href="spc_8h.html#7304d0d00bcf9d2bad1f56ba6d8322ea" title="Print routine for the spcprm struct.">spcprt</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structspcprm.html" title="Spectral transformation parameters.">spcprm</a> *spc);
<a name="l00829"></a>00829 
<a name="l00830"></a>00830 <span class="keywordtype">int</span> <a class="code" href="spc_8h.html#f2ee6399a65f2467841be79e4bbb41c3" title="Setup routine for the spcprm struct.">spcset</a>(<span class="keyword">struct</span> <a class="code" href="structspcprm.html" title="Spectral transformation parameters.">spcprm</a> *spc);
<a name="l00831"></a>00831 
<a name="l00832"></a>00832 <span class="keywordtype">int</span> <a class="code" href="spc_8h.html#e7fe86ae85a1a3bd19c2d78c3dba58f6" title="Transform to spectral coordinates.">spcx2s</a>(<span class="keyword">struct</span> <a class="code" href="structspcprm.html" title="Spectral transformation parameters.">spcprm</a> *spc, <span class="keywordtype">int</span> nx, <span class="keywordtype">int</span> sx, <span class="keywordtype">int</span> sspec,
<a name="l00833"></a>00833            <span class="keyword">const</span> <span class="keywordtype">double</span> x[], <span class="keywordtype">double</span> spec[], <span class="keywordtype">int</span> stat[]);
<a name="l00834"></a>00834 
<a name="l00835"></a>00835 <span class="keywordtype">int</span> <a class="code" href="spc_8h.html#e6e89217a5eca87a2101ae195da74347" title="Transform spectral coordinates.">spcs2x</a>(<span class="keyword">struct</span> <a class="code" href="structspcprm.html" title="Spectral transformation parameters.">spcprm</a> *spc, <span class="keywordtype">int</span> nspec, <span class="keywordtype">int</span> sspec, <span class="keywordtype">int</span> sx,
<a name="l00836"></a>00836            <span class="keyword">const</span> <span class="keywordtype">double</span> spec[], <span class="keywordtype">double</span> x[], <span class="keywordtype">int</span> stat[]);
<a name="l00837"></a>00837 
<a name="l00838"></a>00838 <span class="keywordtype">int</span> <a class="code" href="spc_8h.html#eb46b7cc0b8e5a01be7862b3c446204a" title="Spectral CTYPEia keyword analysis.">spctype</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> ctype[], <span class="keywordtype">char</span> stype[], <span class="keywordtype">char</span> scode[], <span class="keywordtype">char</span> sname[],
<a name="l00839"></a>00839             <span class="keywordtype">char</span> units[], <span class="keywordtype">char</span> *ptype, <span class="keywordtype">char</span> *xtype, <span class="keywordtype">int</span> *restreq,
<a name="l00840"></a>00840             <span class="keyword">struct</span> <a class="code" href="structwcserr.html" title="Error message handling.">wcserr</a> **err);
<a name="l00841"></a>00841 
<a name="l00842"></a>00842 <span class="keywordtype">int</span> <a class="code" href="spc_8h.html#300fdb21c6e53aca6749db3455e531b2" title="Spectral keyword analysis.">spcspxe</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> ctypeS[], <span class="keywordtype">double</span> crvalS, <span class="keywordtype">double</span> restfrq,
<a name="l00843"></a>00843             <span class="keywordtype">double</span> restwav, <span class="keywordtype">char</span> *ptype, <span class="keywordtype">char</span> *xtype, <span class="keywordtype">int</span> *restreq,
<a name="l00844"></a>00844             <span class="keywordtype">double</span> *crvalX, <span class="keywordtype">double</span> *dXdS, <span class="keyword">struct</span> <a class="code" href="structwcserr.html" title="Error message handling.">wcserr</a> **err);
<a name="l00845"></a>00845 
<a name="l00846"></a>00846 <span class="keywordtype">int</span> <a class="code" href="spc_8h.html#99689938e16d737f26bf6504f2e1599a" title="Spectral keyword synthesis.">spcxpse</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> ctypeS[], <span class="keywordtype">double</span> crvalX, <span class="keywordtype">double</span> restfrq,
<a name="l00847"></a>00847             <span class="keywordtype">double</span> restwav, <span class="keywordtype">char</span> *ptype, <span class="keywordtype">char</span> *xtype, <span class="keywordtype">int</span> *restreq,
<a name="l00848"></a>00848             <span class="keywordtype">double</span> *crvalS, <span class="keywordtype">double</span> *dSdX, <span class="keyword">struct</span> <a class="code" href="structwcserr.html" title="Error message handling.">wcserr</a> **err);
<a name="l00849"></a>00849 
<a name="l00850"></a>00850 <span class="keywordtype">int</span> <a class="code" href="spc_8h.html#cc0b7b9e5bc5495f24129492e4ff5218" title="Spectral keyword translation.">spctrne</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> ctypeS1[], <span class="keywordtype">double</span> crvalS1, <span class="keywordtype">double</span> cdeltS1,
<a name="l00851"></a>00851             <span class="keywordtype">double</span> restfrq, <span class="keywordtype">double</span> restwav, <span class="keywordtype">char</span> ctypeS2[], <span class="keywordtype">double</span> *crvalS2,
<a name="l00852"></a>00852             <span class="keywordtype">double</span> *cdeltS2, <span class="keyword">struct</span> <a class="code" href="structwcserr.html" title="Error message handling.">wcserr</a> **err);
<a name="l00853"></a>00853 
<a name="l00854"></a>00854 <span class="keywordtype">int</span> <a class="code" href="spc_8h.html#615d3ef3a505a8be7da1578d9338d218" title="Translate AIPS-convention spectral keywords.">spcaips</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> ctypeA[], <span class="keywordtype">int</span> velref, <span class="keywordtype">char</span> ctype[], <span class="keywordtype">char</span> specsys[]);
<a name="l00855"></a>00855 
<a name="l00856"></a>00856 
<a name="l00857"></a>00857 <span class="comment">/* Deprecated. */</span>
<a name="l00858"></a><a class="code" href="spc_8h.html#4d66edc63bfc8a39adc6bac9e88c8e81">00858</a> <span class="preprocessor">#define spcini_errmsg spc_errmsg</span>
<a name="l00859"></a><a class="code" href="spc_8h.html#c39694faccdd56850677999d714cd14a">00859</a> <span class="preprocessor"></span><span class="preprocessor">#define spcprt_errmsg spc_errmsg</span>
<a name="l00860"></a><a class="code" href="spc_8h.html#49807752ce4e223d4095cf6ad13bac0a">00860</a> <span class="preprocessor"></span><span class="preprocessor">#define spcset_errmsg spc_errmsg</span>
<a name="l00861"></a><a class="code" href="spc_8h.html#ab517aed3ee9f8d5a5ca1f990d310b61">00861</a> <span class="preprocessor"></span><span class="preprocessor">#define spcx2s_errmsg spc_errmsg</span>
<a name="l00862"></a><a class="code" href="spc_8h.html#f0e4274b242fd41625b6ad4f4376b8da">00862</a> <span class="preprocessor"></span><span class="preprocessor">#define spcs2x_errmsg spc_errmsg</span>
<a name="l00863"></a>00863 <span class="preprocessor"></span>
<a name="l00864"></a>00864 <span class="keywordtype">int</span> <a class="code" href="spc_8h.html#6f88e6f1a549bffa0d0ab2b9523d2000">spctyp</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> ctype[], <span class="keywordtype">char</span> stype[], <span class="keywordtype">char</span> scode[], <span class="keywordtype">char</span> sname[],
<a name="l00865"></a>00865            <span class="keywordtype">char</span> units[], <span class="keywordtype">char</span> *ptype, <span class="keywordtype">char</span> *xtype, <span class="keywordtype">int</span> *restreq);
<a name="l00866"></a>00866 <span class="keywordtype">int</span> <a class="code" href="spc_8h.html#b9fc42d8e1d281839a0a42ac00bcd180">spcspx</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> ctypeS[], <span class="keywordtype">double</span> crvalS, <span class="keywordtype">double</span> restfrq, <span class="keywordtype">double</span> restwav,
<a name="l00867"></a>00867            <span class="keywordtype">char</span> *ptype, <span class="keywordtype">char</span> *xtype, <span class="keywordtype">int</span> *restreq, <span class="keywordtype">double</span> *crvalX,
<a name="l00868"></a>00868            <span class="keywordtype">double</span> *dXdS);
<a name="l00869"></a>00869 <span class="keywordtype">int</span> <a class="code" href="spc_8h.html#49f16254df0e3498ae2c1eb641f5232c">spcxps</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> ctypeS[], <span class="keywordtype">double</span> crvalX, <span class="keywordtype">double</span> restfrq, <span class="keywordtype">double</span> restwav,
<a name="l00870"></a>00870            <span class="keywordtype">char</span> *ptype, <span class="keywordtype">char</span> *xtype, <span class="keywordtype">int</span> *restreq, <span class="keywordtype">double</span> *crvalS,
<a name="l00871"></a>00871            <span class="keywordtype">double</span> *dSdX);
<a name="l00872"></a>00872 <span class="keywordtype">int</span> <a class="code" href="spc_8h.html#96e8686daa13255e36506c3bfc213e46">spctrn</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> ctypeS1[], <span class="keywordtype">double</span> crvalS1, <span class="keywordtype">double</span> cdeltS1,
<a name="l00873"></a>00873            <span class="keywordtype">double</span> restfrq, <span class="keywordtype">double</span> restwav, <span class="keywordtype">char</span> ctypeS2[], <span class="keywordtype">double</span> *crvalS2,
<a name="l00874"></a>00874            <span class="keywordtype">double</span> *cdeltS2);
<a name="l00875"></a>00875 
<a name="l00876"></a>00876 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00877"></a>00877 <span class="preprocessor"></span>}
<a name="l00878"></a>00878 <span class="preprocessor">#endif</span>
<a name="l00879"></a>00879 <span class="preprocessor"></span>
<a name="l00880"></a>00880 <span class="preprocessor">#endif </span><span class="comment">/* WCSLIB_SPC */</span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>