Instrument Neutral Distributed Interface INDI 2.2.5
spk.h
Go to the documentation of this file.
1#ifndef SPKHDEF
2#define SPKHDEF
3
4/*
5** - - - - - -
6** s p k . h
7** - - - - - -
8**
9** Prototype function declarations for SPK library.
10**
11** This revision: 2021 December 4
12**
13** Copyright P.T.Wallace. All rights reserved.
14*/
15
16#include "sofa.h"
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
22/*
23** ---------
24** Constants
25** ---------
26*/
27
28/* Julian Date of Modified Julian Date zero */
29#define DJM0 (2400000.5)
30
31/* Day length in seconds */
32#define DAYSEC (86400.0)
33
34/*
35** ------------
36** Enumerations
37** ------------
38*/
39
40/* Supported mount types */
41typedef enum { EQUAT = 1, /* equatorial */
42 ALTAZ = 2 /* altazimuth (left-handed */
44
45/* Supported target systems */
46typedef enum { ICRS = 1, /* ICRS astrometric RA,Dec */
47 APPT = 2, /* geocentric apparent RA,Dec */
48 AZEL = 3 /* observed az,el */
50
51/* Virtual Telescope solution options */
52typedef enum { AXES = 1, /* mount demands and field orientation */
53 TARG = 2, /* sky coordinates */
54 HOTS = 3, /* focal plane x,y */
55 DEFT = 4 /* default */
57
58
59/*
60** ----------
61** Structures
62** ----------
63**
64** n.b. All data members are public. In most cases (the astrometry
65** structure is the exception), no "initialization" functions
66** are provided, and simple direct assignment to data members
67** must be made.
68*/
69
70/* Earth orientation parameters */
71typedef struct {
72 double xp; /* polar motion in x (radians) */
73 double yp; /* polar motion in y (radians) */
74 double dut1; /* UT1-UTC (s) */
75} spkEOP;
76
77/* Observatory */
78typedef struct {
79 double slon; /* site east longitude (ITRF, radians) */
80 double slat; /* site geodetic latitude (ITRF, radians) */
81 double sh; /* site altitude above WGS84 ellipsoid (m) */
82 spkMOUNT mount; /* mount type */
83 double pavoid; /* closest to mount pole allowed (radians) */
84} spkOBS;
85
86/* Ambient air conditions */
87typedef struct {
88 double p; /* pressure (hPa = mB) */
89 double t; /* temperature (degrees Celsius) */
90 double h; /* relative humidity (0-1) */
91} spkAIR;
92
93/* Optics */
94typedef struct {
95 double fl; /* focal length (user units) */
96 double wl; /* wavelength (micrometers) */
97} spkOPT;
98
99/* Pointing model */
100typedef struct {
101 double pia; /* IA: roll (-HA or pi-azimuth) index error */
102 double pib; /* IB: pitch (Dec or elevation) index error */
103 double pvd; /* VD: downward droop */
104 double pca; /* CA: telescope/pitch nonperpendicularity */
105 double pnp; /* NP: roll/pitch nonperpendicularity */
106 double paw; /* AW: roll axis misalignment across meridian */
107 double pan; /* AN: roll axis misalignment along meridian */
108 double ga; /* dCA guiding correction */
109 double gb; /* dIB guiding correction */
110} spkPM;
111
112/* Pointing origin (aka hotspot) */
113typedef struct {
114 double x; /* x-coordinate in rotating FP (user units) */
115 double y; /* y-coordinate in rotating FP (user units) */
116} spkPO;
117
118/* Orientations of the three axes */
119typedef struct {
120 double a; /* achieved -HA or pi-Az (radians) */
121 double b; /* achieved Dec or El (radians) */
122 double r; /* achieved rotator angle (radians) */
123} spkAX3;
124
125/* Time (UTC) */
126typedef struct {
127 int iy; /* year CE */
128 int mo; /* month */
129 int id; /* day */
130 int ih; /* hour */
131 int mi; /* minute */
132 double sec; /* seconds */
133} spkUTC;
134
135/* Astrometry */
136typedef struct {
137 double tai; /* TAI MJD (JD-2400000.5) */
138 iauASTROM astrom; /* star-independent astrometry quantities */
139 double eo; /* equation of the origins (ERA-GST, radians) */
140} spkAST;
141
142/* Target (celestial pointing direction) */
143typedef struct {
144 spkSYS sys; /* ICRS, APPT or AZEL */
145 double a; /* RA or left-handed azimuth (radians) */
146 double b; /* Dec or elevation (radians) */
147} spkTAR;
148
149/*
150** -------------------
151** Function prototypes
152** -------------------
153*/
154
155int spkAstr ( int jfull, spkUTC utc, double ds, spkEOP* eop,
156 spkOBS* obs, spkAIR* air, spkOPT* opt, spkAST* ast );
157
158void spkCtar ( double rc, double dc, double pr, double pd, double px,
159 double rv, spkAST* ast, spkTAR* tar );
160
161int spkVtel ( spkVTS isoln, spkOBS* obs, spkOPT* opt, spkPM* pm,
162 spkAST* ast, spkAX3* ax3, spkTAR* tar, spkPO* po,
163 double* tara, double* tare, double* tarr, double* tarp,
164 double soln[5] );
165
166/* Added for Pmfit compatibility in INDI */
167int Pmfit ( double phi, char mount, int n, double* obs, int nt,
168 double* pm, double* sigmas, double* skysig );
169int Bfun ( int nt, double phi, char mount, double rdem, double pdem, double* bf );
170int Simeqn ( int n, double* a, double* y );
171
172#ifdef __cplusplus
173}
174#endif
175
176#endif
eraASTROM iauASTROM
Definition sofa.h:28
int spkAstr(int jfull, spkUTC utc, double ds, spkEOP *eop, spkOBS *obs, spkAIR *air, spkOPT *opt, spkAST *ast)
Definition astr.c:4
spkMOUNT
Definition spk.h:41
@ EQUAT
Definition spk.h:41
@ ALTAZ
Definition spk.h:42
int Pmfit(double phi, char mount, int n, double *obs, int nt, double *pm, double *sigmas, double *skysig)
Definition pmfit.c:10
spkVTS
Definition spk.h:52
@ HOTS
Definition spk.h:54
@ AXES
Definition spk.h:52
@ DEFT
Definition spk.h:55
@ TARG
Definition spk.h:53
spkSYS
Definition spk.h:46
@ APPT
Definition spk.h:47
@ AZEL
Definition spk.h:48
@ ICRS
Definition spk.h:46
int Bfun(int nt, double phi, char mount, double rdem, double pdem, double *bf)
Definition pmfit.c:267
int spkVtel(spkVTS isoln, spkOBS *obs, spkOPT *opt, spkPM *pm, spkAST *ast, spkAX3 *ax3, spkTAR *tar, spkPO *po, double *tara, double *tare, double *tarr, double *tarp, double soln[5])
Definition vtel.c:33
void spkCtar(double rc, double dc, double pr, double pd, double px, double rv, spkAST *ast, spkTAR *tar)
Definition ctar.c:4
int Simeqn(int n, double *a, double *y)
Definition pmfit.c:461
Definition spk.h:87
double h
Definition spk.h:90
double t
Definition spk.h:89
double p
Definition spk.h:88
Definition spk.h:136
double eo
Definition spk.h:139
iauASTROM astrom
Definition spk.h:138
double tai
Definition spk.h:137
Definition spk.h:119
double b
Definition spk.h:121
double a
Definition spk.h:120
double r
Definition spk.h:122
Definition spk.h:71
double xp
Definition spk.h:72
double dut1
Definition spk.h:74
double yp
Definition spk.h:73
Definition spk.h:78
double slat
Definition spk.h:80
double slon
Definition spk.h:79
double pavoid
Definition spk.h:83
spkMOUNT mount
Definition spk.h:82
double sh
Definition spk.h:81
Definition spk.h:94
double wl
Definition spk.h:96
double fl
Definition spk.h:95
Definition spk.h:100
double pib
Definition spk.h:102
double ga
Definition spk.h:108
double paw
Definition spk.h:106
double pca
Definition spk.h:104
double pnp
Definition spk.h:105
double pia
Definition spk.h:101
double pvd
Definition spk.h:103
double gb
Definition spk.h:109
double pan
Definition spk.h:107
Definition spk.h:113
double x
Definition spk.h:114
double y
Definition spk.h:115
Definition spk.h:143
spkSYS sys
Definition spk.h:144
double a
Definition spk.h:145
double b
Definition spk.h:146
Definition spk.h:126
int mi
Definition spk.h:131
int mo
Definition spk.h:128
double sec
Definition spk.h:132
int id
Definition spk.h:129
int iy
Definition spk.h:127
int ih
Definition spk.h:130