File Coverage

palsrc/palDs2tp.c
Criterion Covered Total %
statement 0 19 0.0
branch 0 6 0.0
condition n/a
subroutine n/a
pod n/a
total 0 25 0.0


line stmt bran cond sub pod time code
1             /*
2             *+
3             * Name:
4             * palDs2tp
5              
6             * Purpose:
7             * Spherical to tangent plane projection
8              
9             * Language:
10             * Starlink ANSI C
11              
12             * Type of Module:
13             * Library routine
14              
15             * Invocation:
16             * palDs2tp( double ra, double dec, double raz, double decz,
17             * double *xi, double *eta, int *j );
18              
19             * Arguments:
20             * ra = double (Given)
21             * RA spherical coordinate of point to be projected (radians)
22             * dec = double (Given)
23             * Dec spherical coordinate of point to be projected (radians)
24             * raz = double (Given)
25             * RA spherical coordinate of tangent point (radians)
26             * decz = double (Given)
27             * Dec spherical coordinate of tangent point (radians)
28             * xi = double * (Returned)
29             * First rectangular coordinate on tangent plane (radians)
30             * eta = double * (Returned)
31             * Second rectangular coordinate on tangent plane (radians)
32             * j = int * (Returned)
33             * status: 0 = OK, star on tangent plane
34             * 1 = error, star too far from axis
35             * 2 = error, antistar on tangent plane
36             * 3 = error, antistar too far from axis
37              
38             * Description:
39             * Projection of spherical coordinates onto tangent plane:
40             * "gnomonic" projection - "standard coordinates"
41              
42             * Authors:
43             * PTW: Pat Wallace (STFC)
44             * TIMJ: Tim Jenness (JAC, Hawaii)
45             * {enter_new_authors_here}
46              
47             * History:
48             * 2012-02-08 (TIMJ):
49             * Initial version with documentation taken from Fortran SLA
50             * Adapted with permission from the Fortran SLALIB library.
51             * {enter_further_changes_here}
52              
53             * Copyright:
54             * Copyright (C) 1996 Rutherford Appleton Laboratory
55             * Copyright (C) 2012 Science and Technology Facilities Council.
56             * All Rights Reserved.
57              
58             * Licence:
59             * This program is free software: you can redistribute it and/or
60             * modify it under the terms of the GNU Lesser General Public
61             * License as published by the Free Software Foundation, either
62             * version 3 of the License, or (at your option) any later
63             * version.
64             *
65             * This program is distributed in the hope that it will be useful,
66             * but WITHOUT ANY WARRANTY; without even the implied warranty of
67             * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
68             * GNU Lesser General Public License for more details.
69             *
70             * You should have received a copy of the GNU Lesser General
71             * License along with this program. If not, see
72             * .
73              
74             * Bugs:
75             * {note_any_bugs_here}
76             *-
77             */
78              
79             #include "pal.h"
80             #include
81              
82             void
83 0           palDs2tp ( double ra, double dec, double raz, double decz,
84             double *xi, double *eta, int *j ) {
85              
86             const double TINY = 1.0e-6;
87              
88             double cdec;
89             double sdec;
90             double radif;
91             double cdecz;
92             double denom;
93             double sdecz;
94             double cradif;
95             double sradif;
96              
97             /* Trig functions */
98 0           sdecz = sin(decz);
99 0           sdec = sin(dec);
100 0           cdecz = cos(decz);
101 0           cdec = cos(dec);
102 0           radif = ra - raz;
103 0           sradif = sin(radif);
104 0           cradif = cos(radif);
105              
106             /* Reciprocal of star vector length to tangent plane */
107 0           denom = sdec * sdecz + cdec * cdecz * cradif;
108              
109             /* Handle vectors too far from axis */
110 0 0         if (denom > TINY) {
111 0           *j = 0;
112 0 0         } else if (denom >= 0.) {
113 0           *j = 1;
114             denom = TINY;
115 0 0         } else if (denom > -TINY) {
116 0           *j = 2;
117             denom = -TINY;
118             } else {
119 0           *j = 3;
120             }
121              
122             /* Compute tangent plane coordinates (even in dubious cases) */
123 0           *xi = cdec * sradif / denom;
124 0           *eta = (sdec * cdecz - cdec * sdecz * cradif) / denom;
125              
126 0           return;
127             }