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 Page</span></a></li>
<li><a href="pages.html"><span>Related Pages</span></a></li>
<li><a href="annotated.html"><span>Data 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 <http://www.gnu.org/licenses/>.</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., & Calabretta, M.R. 2002, A&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., & Allen, S.L.</span>
<a name="l00042"></a>00042 <span class="comment">* 2006, A&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 > 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 > 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 > 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 > 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' -> 'ZOPT-F2W', but not required for</span>
<a name="l00423"></a>00423 <span class="comment">* 'VELO-F2V' -> '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 > 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' -> 'ZOPT-F2W', but not required for</span>
<a name="l00487"></a>00487 <span class="comment">* 'VELO-F2V' -> '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 > 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' -> 'ZOPT-F2W', but not required for</span>
<a name="l00552"></a>00552 <span class="comment">* 'VELO-F2V' -> '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 > 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 -> P -> 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 -> P -> 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
<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>
|