aephem.h
Go to the documentation of this file.
1 //==============================================================================
4 // AEPHEM - an astronomical ephemeris and reduction library.
5 // Copyright 2012 Adam Hincks, Canadian Institute for Theoretical Astrophysics
6 //
7 // This file is part of AEPHEM.
8 //
9 // AEPHEM is free software: you can redistribute it and/or modify
10 // it under the terms of the GNU General Public License as published by
11 // the Free Software Foundation, either version 3 of the License, or
12 // (at your option) any later version.
13 //
14 // AEPHEM is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 // GNU General Public License for more details.
18 //
19 // You should have received a copy of the GNU General Public License
20 // along with AEPHEM. If not, see <http://www.gnu.org/licenses/>.
21 //==============================================================================
22 
23 #ifndef AEPHEM_H
24 #define AEPHEM_H
25 
26 #ifdef __cplusplus
27  extern "C" {
28 #endif
29 
30 #include <math.h>
31 #include <stdio.h>
32 
33 // Constants.
34 #define AE_DTR 1.7453292519943295769e-2
35 #define AE_RTD 5.7295779513082320877e1
36 #define AE_RTS 2.0626480624709635516e5
37 #define AE_STR 4.8481368110953599359e-6
38 #define AE_STD (1.0 / 3600.0)
39 #define AE_STDAY 0.00001157407407407407
40 #define AE_COSSUN -0.014543897651582657
41 #define AE_COSZEN -9.8900378587411476e-3
42 #define AE_J2000 2451545.0
43 #define AE_B1950 2433282.423
44 #define AE_J1900 2415020.0
45 #define AE_MJD_START 2400000.5
47 #define AE_AU 1.49597870691e8
48 #define AE_CLIGHT 2.99792458e5
49 #define AE_S_PER_D 86400.0
50 #define AE_D_PER_S (1.0 / AE_S_PER_D)
51 #define AE_CLIGHT_AUD (86400.0 * AE_CLIGHT / AE_AU)
53 #define AE_R_EARTH 6378137.0
54 #define AE_R_EARTH_AU (0.001 * AE_R_EARTH / AE_AU)
56 #define AE_E_M_RAT 81.300585
57 #define AE_FLAT 298.257222101
60 #define AE_T_CMB 2.725
62 #define AE_JPL_HEAD_SIZE (5 * sizeof(double) + 41 * sizeof(int32_t))
64 #define AE_JPL_CONST_LEN 6
65 
66 enum ae_retcode_t {
98 };
99 
101 #define AE_N_SS_BODIES 16
102 #define AE_N_SS_BODIES_JPL 13
104 enum ae_ss_bodies_t {
124 };
125 
130 };
131 
136 };
137 
143 };
144 
145 #define AE_PLANTBL_N_HARMONIC 18
146 struct ae_plantbl_t {
148  char maxargs;
149  char max_harmonic[AE_PLANTBL_N_HARMONIC];
151  char *arg_tbl;
152  void *lon_tbl;
153  void *lat_tbl;
154  void *rad_tbl;
155  double distance;
156  double timescale;
157  double trunclvl;
158 };
159 
161 struct ae_orbit_t {
162  char name[32];
163  double epoch;
164  double i;
165  double W;
166  double w;
167  double a;
168  double dm;
169  double ecc;
170  double M;
171  double equinox;
172 
173  // The following used by perterbation formulas.
175  double L;
176  double r;
177  double plat;
178 };
179 
183 struct ae_star_t {
184  char name[32];
185  double epoch;
186  double ra;
187  double dec;
188  double px;
189  double mura;
190  double mudec;
191  double v;
192  double mag;
193 };
194 
199  double start;
200  double end;
201  double step;
202  int n_const;
203  double au;
204  double em_ratio;
205  int ipt[13][3];
207  char **const_name;
208  double *const_val;
209 
210  // The following are computed within the code.
211  FILE *fp;
212  int is_bin;
213  int n_coeff;
214  int swop;
215  int rec_size;
217  int max_cheby;
218  long ascii_start;
220  double sun_pv[6];
221  double sun_pv_t;
222  double *block;
223  double *pc;
224  double *vc;
225  double last_x;
226 };
227 
232  int time_var;
233  double a;
234  double b;
235  double c;
236  double d;
237 };
238 
249  double r_mean;
250  double r_eq;
251  double r_pole;
253  double max_elev;
254  double max_depress;
255  double pole_ra;
256  double pole_ra_t;
260  double pole_dec;
261  double pole_dec_t;
265  double w;
266  double w_d;
269  double w_d_sq;
272 };
273 
274 // Predefined orbits.
275 extern struct ae_orbit_t ae_orb_mercury;
276 extern struct ae_orbit_t ae_orb_venus;
277 extern struct ae_orbit_t ae_orb_earth;
278 extern struct ae_orbit_t ae_orb_mars;
279 extern struct ae_orbit_t ae_orb_jupiter;
280 extern struct ae_orbit_t ae_orb_saturn;
281 extern struct ae_orbit_t ae_orb_uranus;
282 extern struct ae_orbit_t ae_orb_neptune;
283 extern struct ae_orbit_t ae_orb_pluto;
284 extern struct ae_orbit_t *ae_orb_planet[];
285 
286 // Predefined perturbation tables.
287 extern struct ae_plantbl_t ae_mer404;
288 extern struct ae_plantbl_t ae_ven404;
289 extern struct ae_plantbl_t ae_ear404;
290 extern struct ae_plantbl_t ae_mar404;
291 extern struct ae_plantbl_t ae_jup404;
292 extern struct ae_plantbl_t ae_sat404;
293 extern struct ae_plantbl_t ae_ura404;
294 extern struct ae_plantbl_t ae_nep404;
295 extern struct ae_plantbl_t ae_plu404;
296 extern struct ae_plantbl_t ae_mlat404;
297 extern struct ae_plantbl_t ae_mlr404;
298 
299 // Predefined physical parameters.
300 extern struct ae_physical_t ae_phys_sun;
301 extern struct ae_physical_t ae_phys_mercury;
302 extern struct ae_physical_t ae_phys_venus;
303 extern struct ae_physical_t ae_phys_earth;
304 extern struct ae_physical_t ae_phys_mars;
305 extern struct ae_physical_t ae_phys_jupiter;
306 extern struct ae_physical_t ae_phys_saturn;
307 extern struct ae_ring_geometry_t ae_saturn_rings;
308 extern struct ae_physical_t ae_phys_uranus;
309 extern struct ae_physical_t ae_phys_neptune;
310 extern struct ae_physical_t ae_phys_pluto;
311 extern struct ae_physical_t *ae_phys_planet[];
312 extern struct ae_physical_term_t ae_phys_no_term[];
313 
314 // Predefined names.
315 extern const char *ae_constel_name[];
316 extern const char *ae_ss_name[];
317 
318 void ae_altaz_to_radec(double last, double glat, double alt, double az,
319  double *ra, double *dec);
320 void ae_annual_aberration(double v_earth[], double p[], int direction);
321 double ae_cal_to_jd(long year, int month, double day);
322 int ae_cat_to_constel_index(const char *cat_name, char *full_name, int len);
323 int ae_coord_to_constel_index(double ra, double dec, double epoch);
324 double ae_ctime_to_jd(double t);
325 double ae_ctime_to_last(double t, double delta_t, double tlong, double nutl,
326  double eps);
327 double aes_ctime_to_last(double t, double tlong);
328 double ae_delta_t(double jd_ut1);
329 void ae_delta_q(double q0[], double q1[], double *dra, double *ddec);
330 double ae_disc_semiminor(double a, double c, double lat);
331 double ae_disc_solid_angle(double a, double b, double dist);
332 double aes_disc_solid_angle(double jd_ut1, const struct ae_orbit_t *o_orb,
333  const struct ae_orbit_t *q_orb,
334  const struct ae_physical_t *phys);
335 void ae_diurnal_aberration(double last, double tlat, double trho, int direction,
336  double *ra, double *dec);
337 void ae_diurnal_parallax(double last, double tlat, double trho, double dist,
338  double *ra, double *dec);
339 double ae_dut1(double jd_utc);
340 double ae_epsilon(double jd_tt);
341 void ae_fk4_to_fk5(struct ae_star_t *star);
342 void ae_geocentric(double jd_tt, double q[], double e[], double v_e[],
343  double *ra, double *dec, double *dist);
344 void ae_geocentric_moon_from_orbit(double jd_tt, const struct ae_orbit_t *o_orb,
345  double *ra, double *dec, double *dist);
346 void ae_geocentric_from_cat(double jd_tt, double e[], double v_e[],
347  const struct ae_star_t *star, double *ra,
348  double *dec);
349 int ae_geocentric_from_jpl(struct ae_jpl_handle_t *jh, double jd_tt,
350  int obj_num, double *ra, double *dec, double *dist);
351 void ae_geocentric_from_orbit(double jd_tt, const struct ae_orbit_t *o_orb,
352  const struct ae_orbit_t *q_orb, double *ra,
353  double *dec, double *dist);
354 void ae_geocentric_sun_from_orbit(double jd_tt, const struct ae_orbit_t *o_orb,
355  double *ra, double *dec, double *dist);
356 void ae_geocentric_lat(double glat, double height, double *tlat, double *trho);
357 int ae_read_orbit_from_cat(const char *path, const char *name,
358  struct ae_orbit_t *orb);
359 int ae_read_star_from_cat(const char *path, const char *name,
360  struct ae_star_t *star);
361 void ae_gmoon(double jd, double rect[], double pol[]);
362 double ae_gmst(double jd_ut1, double jd_tt);
363 double ae_gast(double jd_ut1, double jd_tt, double nutl, double eps);
364 double ae_lmst(double jd_ut1, double jd_tt, double tlong);
365 double ae_last(double jd_ut1, double jd_tt, double tlong, double nutl,
366  double eps);
367 double aes_last(double jd_ut1, double tlong);
368 void ae_gplan(double jd_tt, struct ae_plantbl_t *plan, double pobj[]);
369 double ae_g1plan(double jd_tt, struct ae_plantbl_t *plan);
370 void ae_g2plan(double jd_tt, struct ae_plantbl_t *plan, double pobj[],
371  double *lp_equinox);
372 void ae_g3plan(double jd_tt, struct ae_plantbl_t *plan, double pobj[],
373  int objnum);
374 void ae_jd_to_cal(double jd, int *year, int *month, double *day);
375 double ae_jpl_get_const_val(const struct ae_jpl_handle_t *jh,
376  const char *const_name);
377 int ae_jpl_init(const char *path, struct ae_jpl_handle_t *jh);
378 int ae_jpl_init_ascii(const char *path, const char *header_path,
379  int search_dates, struct ae_jpl_handle_t *jh);
380 int ae_jpl_init_bin(const char *path, struct ae_jpl_handle_t *jh);
381 int ae_jpl_get_coords(struct ae_jpl_handle_t *jh, double jd_tt, int obj_num,
382  double r[], double v[], char is_planetary);
383 void ae_jpl_close(struct ae_jpl_handle_t *jh);
384 void ae_kepler(double jd_tt, const struct ae_orbit_t *orb, double q[]);
385 double ae_light_t(double p[], double q[], int do_retardation);
386 int ae_light_t_jpl(struct ae_jpl_handle_t *jh, double jd_tt, double e[],
387  int obj_num, double q[], double v_q[], char is_planetary);
388 void ae_light_t_orbit(double jd_tt, double e[], const struct ae_orbit_t *orb,
389  double q[]);
390 double ae_mjd(double jd);
391 double ae_mod_2pi(double x);
392 double ae_mod_360(double x);
393 double ae_mod_180(double x);
394 void ae_nutation_lon_ob(double jd_tt, double *nutl, double *nuto);
395 void ae_nutate(double nutl, double nuto, double eps, double p[], int direction);
396 void aes_nutate(double jd_tt, double p[], int direction);
397 void ae_phys_pole(double jd_ut1, double jd_tt, const struct ae_physical_t *phys,
398  double n[], double *w);
399 int ae_is_retrograde(const struct ae_physical_t *phys);
400 void ae_polar_to_rect(double ra, double dec, double radius, double rect[]);
401 void ae_precess(double jd_tt, double r[], int direction);
402 void ae_radec_to_altaz(double last, double glat, double ra, double dec,
403  double *alt, double *az);
404 void ae_radec_to_gal(double ra, double dec, double *l, double *b, int fk5);
405 void ae_gal_to_radec(double ra, double dec, double *l, double *b, int fk5);
406 void ae_rect_to_polar(const double rect[], double *ra, double *dec,
407  double *radius);
408 void ae_rect_to_polar_with_jd(double pp[], double jd, char ofdate,
409  double polar[]);
410 double ae_refrac_visible(double alt, void *param);
411 double ae_refrac_ulich(double alt, void *param);
412 void ae_relativity(double p[], double q[], double o[]);
413 const char *ae_retcode_string(int retcode);
414 double ae_tdb(double jd);
415 void ae_subobs_point(double j[], double n[], double w, double f, int retrograde,
416  double *lat, double *lon);
417 void aes_subobs_point(double jd_ut1, const struct ae_orbit_t *o_orb,
418  const struct ae_orbit_t *q_orb,
419  const struct ae_physical_t *phys,
420  double *lat, double *lon, double *dist);
421 double ae_flattening(const struct ae_physical_t *phys);
422 void ae_topocentric(double jd_tt, double jd_ut1, double tlat, double glat,
423  double tlong, double trho, double (*refrac)(double, void *),
424  void *refrac_param, double dist, double *ra, double *dec);
425 void aes_topocentric(double jd_ut1, double glat, double tlong, double dist,
426  double *ra, double *dec);
427 void ae_v_orbit(double jd_tt, const struct ae_orbit_t *orb, double v[]);
428 double ae_zatan2(double x, double y);
429 
430 // Useful macros.
431 
435 #define ae_get_d(a) ((double)((int)(a)))
436 
440 #define ae_get_m(a) ((double)fabs(((int)(((a) - ae_get_d(a)) * 60))))
441 
445 #define ae_get_s(a) (fabs(((a) - ae_get_d(a) - ((double)((int)(((a) - ae_get_d(a)) * 60))) / 60) * 3600))
446 
449 #define ae_dms_fmt "%dd %d' %.2f\""
450 
453 #define ae_dms_sfmt "%4dd %02d' %05.2f\""
454 
457 #define ae_dms_arg(a) (int)ae_get_d(a), (int)ae_get_m(a), ae_get_s(a)
458 
461 #define ae_hms_fmt "%dh %dm %.2fs"
462 
465 #define ae_hms_sfmt "%3dh %02dm %05.2fs"
466 
469 #define ae_hms_arg(a) (int)ae_get_d(a / 15.0), (int)ae_get_m(a / 15.0), ae_get_s(a / 15.0)
470 
471 // DEVEL START
474  int n;
475  const char **name;
476  const double *tau;
477  const double *a_inner;
480  const double *a_outer;
481 };
482 
484 struct ae_stokes_t {
485  double i;
486  double q;
487  double u;
488  double v;
489 };
490 
493  double t_disc;
494  double *t_ring;
495  double t_background;
496  double *pol_ring;
499  double pol_disc;
500  double pol_disc_angle;
502 };
503 
505  double n_disc;
506  double *n_ring_disc;
509  double *n_ring_back;
510  double *exp_tau;
511  double cos_ring_inc;
512 };
513 
517  int n_pix;
518  double res;
520  struct ae_stokes_t **data;
521 };
522 
523 void ae_map_saturn(double res, const struct ae_physical_t *b,
524  const struct ae_ring_geometry_t *r, double inclination,
525  const struct ae_saturn_temp_model_t *sm,
526  struct ae_planet_map_t *map,
527  struct ae_saturn_components_t *comp);
528 int ae_map_to_gnuplot(const struct ae_planet_map_t *map, char stokes,
529  const char *path);
530 void ae_map_t_eff(const struct ae_planet_map_t *map,
531  const struct ae_physical_t *b, double subobs_lat,
532  double background, struct ae_stokes_t *t_eff);
533 void ae_saturn_t_eff(const struct ae_ring_geometry_t *r,
534  const struct ae_saturn_temp_model_t *sm,
535  const struct ae_saturn_components_t *components,
536  struct ae_stokes_t *t_eff);
537 void ae_set_stokes(struct ae_stokes_t *s, double i, double q, double u,
538  double v);
539 void ae_copy_stokes(const struct ae_stokes_t *origin, struct ae_stokes_t *dest);
540 void ae_saturn_components_alloc(int n_ring,
541  struct ae_saturn_components_t *comp);
542 void ae_saturn_components_free(struct ae_saturn_components_t *comp);
543 // DEVEL END
544 
545 #ifdef __cplusplus
546  }
547 #endif
548 
549 #endif
struct ae_orbit_t * ae_orb_planet[]
Pointers to the planetary orbit objects.
Definition: init.c:192
double ra
Right Ascension, degrees.
Definition: aephem.h:186
#define AE_PLANTBL_N_HARMONIC
Number of arguments for ae_plantbl_t.
Definition: aephem.h:145
const char * ae_constel_name[]
A list of constellation names.
Definition: constel.c:36
void aes_nutate(double jd_tt, double p[], int direction)
Correct for nutation.
Definition: nutate.c:377
int ae_is_retrograde(const struct ae_physical_t *phys)
Determine whether a body's rotation is retrograde.
Definition: physical.c:113
A matrix was not invertible.
Definition: aephem.h:95
void * rad_tbl
Table of radial thingies (?).
Definition: aephem.h:154
double cos_ring_inc
Cosine of the ring inclination.
Definition: aephem.h:511
double epoch
Epoch of orbital elements.
Definition: aephem.h:163
const double * a_inner
Inner radius of rings, in Saturn equatorial radii.
Definition: aephem.h:478
long ascii_len_block
The length of a block, in bytes (ASCII only).
Definition: aephem.h:219
struct ae_physical_term_t * dec_cos_term
Cosine series coefficents for the north pole dec.
Definition: aephem.h:264
Bad JPL header; differing numbers of constants and values.
Definition: aephem.h:77
For holding information on a JPL ephemeris file.
Definition: aephem.h:198
void ae_rect_to_polar(const double rect[], double *ra, double *dec, double *radius)
Convert an equatorial rectangular unit vector to ra/dec/radius.
Definition: coord.c:40
void ae_gmoon(double jd, double rect[], double pol[])
Compute geocentric moon position.
Definition: gplan.c:742
Definition: aephem.h:504
int ae_cat_to_constel_index(const char *cat_name, char *full_name, int len)
Given a catalogue star name, find a star's constellation.
Definition: constel.c:548
double M
Mean anomaly, in degrees.
Definition: aephem.h:170
struct ae_orbit_t ae_orb_venus
Default orbital parameters for Venus.
Definition: init.c:47
Bad JPL header; ksize != 2 * n_coeff.
Definition: aephem.h:74
Use T = # Julian centuries since J2000.
Definition: aephem.h:142
Bad JPL header; could not read date range.
Definition: aephem.h:78
double v
Radial velocity in units of km/s.
Definition: aephem.h:191
double i
The intensity Stokes parameter.
Definition: aephem.h:485
ae_aberration_direction_t
Define directions for aberration.
Definition: aephem.h:133
Neptune, the Mystic.
Definition: aephem.h:115
double em_ratio
Earth-moon ratio.
Definition: aephem.h:204
void ae_altaz_to_radec(double last, double glat, double alt, double az, double *ra, double *dec)
Convert alt/az to ra/dec.
Definition: coord.c:179
double last_x
Value at which coefficients were evaluated.
Definition: aephem.h:225
int n_pix
The dimension of each side of the map.
Definition: aephem.h:517
int max_cheby
Maximum Chebyshev coefficients for a body.
Definition: aephem.h:217
A required FITS keyword was corrupt.
Definition: aephem.h:91
void ae_diurnal_aberration(double last, double tlat, double trho, int direction, double *ra, double *dec)
Correct for diurnal aberration.
Definition: diurnal_ab.c:51
double w
Argument of the perihelion, in degrees.
Definition: aephem.h:166
double ae_gast(double jd_ut1, double jd_tt, double nutl, double eps)
Get Greenwich apparent sidereal time.
Definition: calendar.c:85
struct ae_plantbl_t ae_plu404
Ephemeris for Pluto.
Definition: plu404.c:1401
The moon.
Definition: aephem.h:122
void ae_gplan(double jd_tt, struct ae_plantbl_t *plan, double pobj[])
Use a table to find a planet's polar, heliocentric position.
Definition: gplan.c:106
Mercury, the Winged Messenger.
Definition: aephem.h:108
double pole_dec
North pole declination, J2000.
Definition: aephem.h:260
void ae_geocentric_lat(double glat, double height, double *tlat, double *trho)
Calculate the geocentric latitude and the distance to the earth's centre.
Definition: coord.c:310
struct ae_physical_t ae_phys_mars
Physical parameters for Mars.
Definition: phys_data.c:93
struct ae_physical_t ae_phys_saturn
Physical parameters for Saturn.
Definition: phys_data.c:129
void ae_relativity(double p[], double q[], double o[])
Correct for light deflection due to solar gravitation.
Definition: relativity.c:42
void ae_geocentric(double jd_tt, double q[], double e[], double v_e[], double *ra, double *dec, double *dist)
Given heliocentric coordinates, reduce to geocentric coordinates.
Definition: geocentric.c:82
double W
Longitude of the ascending node, in degrees.
Definition: aephem.h:165
double pole_ra_t
North pole ra coefficient for T = Julian centuries since J2000.
Definition: aephem.h:257
int n_coeff
Number of Chebyshev coefficients.
Definition: aephem.h:213
Add the effect of aberration.
Definition: aephem.h:134
double c
The b in , in degrees.
Definition: aephem.h:235
double equinox
Epoch of equinox and ecliptic.
Definition: aephem.h:171
double res
The resolution of the map, in units of the planet's semi-major axis.
Definition: aephem.h:519
double ae_ctime_to_jd(double t)
Convert a C time to a Julian date.
Definition: calendar.c:339
int n
Number of rings.
Definition: aephem.h:474
double * n_ring_back
Number of pixels looking off-disc through each of the rings.
Definition: aephem.h:509
A function requiring cfitsio was called, but cfitsio is not available.
Definition: aephem.h:89
struct ae_orbit_t ae_orb_pluto
Default orbital parameters for Pluto.
Definition: init.c:173
ae_precess_direction_t
Define directions for precession and nutation.
Definition: aephem.h:127
void ae_jpl_close(struct ae_jpl_handle_t *jh)
Finish with a JPL handle.
Definition: jpl_eph.c:504
double epoch
Epoch of coordinates.
Definition: aephem.h:185
void ae_kepler(double jd_tt, const struct ae_orbit_t *orb, double q[])
Find a Keplerian orbit.
Definition: kepler.c:83
double a
The a in .
Definition: aephem.h:233
For holding information on a body's physical and rotational properties.
Definition: aephem.h:248
double plat
Perturbation in ecliptic latitude.
Definition: aephem.h:177
double ae_zatan2(double x, double y)
Quadrant correct inverse circular tangent.
Definition: math_util.c:109
void ae_rect_to_polar_with_jd(double pp[], double jd, char ofdate, double polar[])
Convert equatorial rectangular coordinates to polar coordinates.
Definition: coord.c:68
struct ae_plantbl_t ae_mlat404
Ephemeris for the moon.
Definition: mlat404.c:1129
double au
Definition of the AU.
Definition: aephem.h:203
Unknown object number.
Definition: aephem.h:86
long ascii_start
The beginning byte number of the data (ASCII only).
Definition: aephem.h:218
Bad JPL block.
Definition: aephem.h:81
int rec_size
Record size.
Definition: aephem.h:215
const double * tau
Opacities of rings.
Definition: aephem.h:476
void ae_geocentric_moon_from_orbit(double jd_tt, const struct ae_orbit_t *o_orb, double *ra, double *dec, double *dist)
Calculate the geocentric coordinates of the moon from orbital elements.
Definition: geocentric.c:381
int time_var
One of AE_PHYSICAL_D or AE_PHYSICAL_T, or AE_PHYSICAL_END to mark last term.
Definition: aephem.h:232
struct ae_physical_t ae_phys_jupiter
Physical parameters for Jupiter.
Definition: phys_data.c:116
int ae_read_orbit_from_cat(const char *path, const char *name, struct ae_orbit_t *orb)
Parse orbital elements from a catalogue file.
Definition: kfiles.c:54
void aes_topocentric(double jd_ut1, double glat, double tlong, double dist, double *ra, double *dec)
Apply diurnal aberrations and calculate topocentric altitude and azimuth.
Definition: topocentric.c:112
struct ae_physical_t ae_phys_pluto
Physical parameters for Pluto.
Definition: phys_data.c:218
double ae_gmst(double jd_ut1, double jd_tt)
Get the Greenwich mean sidereal time.
Definition: calendar.c:44
void ae_precess(double jd_tt, double r[], int direction)
Precess a coordinate.
Definition: precess.c:178
void ae_nutate(double nutl, double nuto, double eps, double p[], int direction)
Correct for nutation.
Definition: nutate.c:311
Bad chebyshev time when gettin JPL data.
Definition: aephem.h:85
double ae_mod_180(double x)
Reduce x modulo 360 degrees, but centre at 0 degrees.
Definition: math_util.c:60
void ae_geocentric_sun_from_orbit(double jd_tt, const struct ae_orbit_t *o_orb, double *ra, double *dec, double *dist)
Calculate the geocentric coordinates of the sun from orbital elements.
Definition: geocentric.c:320
double ae_disc_semiminor(double a, double c, double lat)
Calculate the semi-minor axis of an observed disc.
Definition: physical.c:93
For storing information on a planet's (i.e., Saturn's) rings.
Definition: aephem.h:473
The sun.
Definition: aephem.h:118
struct ae_plantbl_t ae_mar404
Ephemeris for Mars.
Definition: mar404.c:1579
int ipt[13][3]
Index pointers to the Chebyshev coefficents.
Definition: aephem.h:205
double distance
Distance.
Definition: aephem.h:155
double d
The c in , in degrees.
Definition: aephem.h:236
Pluto, now a dwarf planet.
Definition: aephem.h:116
double px
Parallax, seconds of arc.
Definition: aephem.h:188
double mag
Visual magnitude.
Definition: aephem.h:192
Could not compute projection's native pole.
Definition: aephem.h:94
double n_disc
Number of pixels looking on the disc.
Definition: aephem.h:505
int n_const
Number of constants.
Definition: aephem.h:202
Our moon, relative to the Earth-moon barycentre.
Definition: aephem.h:117
ae_retcode_t
Error codes that functions might return.
Definition: aephem.h:69
double ae_mod_2pi(double x)
Reduce x modulo 2 pi.
Definition: math_util.c:78
Was expecting a JPL binary file.
Definition: aephem.h:80
For holding data on planetary ephemerides.
Definition: aephem.h:147
struct ae_orbit_t ae_orb_earth
Default orbital parameters for Earth.
Definition: init.c:65
void ae_annual_aberration(double v_earth[], double p[], int direction)
Correct for the annual aberration.
Definition: annual_ab.c:45
void ae_delta_q(double q0[], double q1[], double *dra, double *ddec)
Convert change in rectangular coordinatates to change in ra/dec.
Definition: coord.c:350
void ae_polar_to_rect(double ra, double dec, double radius, double rect[])
Convert ra/dec/radius to a rectangular vector.
Definition: coord.c:117
double r
Computed radius vector.
Definition: aephem.h:176
double mudec
Proper motion in Dec., "/century.
Definition: aephem.h:190
void ae_nutation_lon_ob(double jd_tt, double *nutl, double *nuto)
Calculate the nutation in longitude and oblation.
Definition: nutate.c:194
struct ae_physical_term_t ae_phys_no_term[]
An empty series for ephemeride terms with no extra terms.
Definition: phys_data.c:26
double ae_disc_solid_angle(double a, double b, double dist)
Calculate the solid angle of an observed disc.
Definition: physical.c:44
double pole_dec_t
North pole dec coefficient for T = Julian centuries since J2000.
Definition: aephem.h:262
For marking the end of the series.
Definition: aephem.h:140
int ae_light_t_jpl(struct ae_jpl_handle_t *jh, double jd_tt, double e[], int obj_num, double q[], double v_q[], char is_planetary)
Get the apparent position of an object, corrected for light-travel time.
Definition: light_t.c:90
double aes_last(double jd_ut1, double tlong)
Get the local apparent sidereal time.
Definition: calendar.c:145
const char * ae_ss_name[]
The names of the solar system bodies.
Definition: init.c:234
struct ae_physical_term_t * w_sin_term
Sine series coefficents for the prime meridian.
Definition: aephem.h:271
For holding information on a star/planet.
Definition: aephem.h:183
struct ae_plantbl_t ae_mer404
Ephemeris for Mercury.
Definition: mer404.c:1043
void ae_radec_to_gal(double ra, double dec, double *l, double *b, int fk5)
Convert ra/dec to l/b (galactic coordinates).
Definition: coord.c:216
double * t_ring
The temperature of the rings.
Definition: aephem.h:494
For holding Stokes parameters.
Definition: aephem.h:484
struct ae_physical_t ae_phys_neptune
Physical parameters for Neptune.
Definition: phys_data.c:205
struct ae_plantbl_t ae_mlr404
Ephemeris data for the moon.
Definition: mlr404.c:3275
Saturn, the Bringer of Old Age.
Definition: aephem.h:113
void ae_phys_pole(double jd_ut1, double jd_tt, const struct ae_physical_t *phys, double n[], double *w)
Calculate the axis of a body's north pole and its prime meridean.
Definition: physical.c:270
double rms_dev_spheroid
RMS deviation from spheroid, km. Not required.
Definition: aephem.h:252
double ae_delta_t(double jd_ut1)
Get the value of delta T == Ephemeris Time - Universal Time.
Definition: calendar.c:460
double v
The V stokes parameter.
Definition: aephem.h:488
Unable to parse float in JPL file.
Definition: aephem.h:84
Transform from J2000 to JD.
Definition: aephem.h:128
int ae_coord_to_constel_index(double ra, double dec, double epoch)
Given a sky coordinate, find the constellation it is in.
Definition: constel.c:654
For modelling Saturn's emission.
Definition: aephem.h:492
struct ae_plantbl_t ae_ear404
Ephemeris for the earth-moon barycentre.
Definition: ear404.c:1777
void ae_light_t_orbit(double jd_tt, double e[], const struct ae_orbit_t *orb, double q[])
Get the apparent position of an object, corrected for light-travel time.
Definition: light_t.c:46
ae_ss_bodies_t
Enumerate Solar System bodies.
Definition: aephem.h:107
void ae_radec_to_altaz(double last, double glat, double ra, double dec, double *alt, double *az)
Convert ra/dec to alt/az.
Definition: coord.c:144
double * vc
For caching velocity Chebyshev coefficients.
Definition: aephem.h:224
The Solar System Barycenter.
Definition: aephem.h:123
double ecc
Eccentricity.
Definition: aephem.h:169
double dec
Declination, degrees.
Definition: aephem.h:187
struct ae_orbit_t ae_orb_uranus
Default orbital parameters for Uranus.
Definition: init.c:137
int ae_jpl_init_ascii(const char *path, const char *header_path, int search_dates, struct ae_jpl_handle_t *jh)
Read a JPL ephemeris ASCII header.
Definition: jpl_eph.c:160
struct ae_stokes_t ** data
The bitmap.
Definition: aephem.h:520
void aes_subobs_point(double jd_ut1, const struct ae_orbit_t *o_orb, const struct ae_orbit_t *q_orb, const struct ae_physical_t *phys, double *lat, double *lon, double *dist)
Calculate the sub-observer point.
Definition: physical.c:147
double * block
A local cache of the most recent block read.
Definition: aephem.h:222
The JPL header was corrupted.
Definition: aephem.h:73
double ae_lmst(double jd_ut1, double jd_tt, double tlong)
Get the local mean sidereal time.
Definition: calendar.c:106
Bad JPL header; could not find a group.
Definition: aephem.h:75
int ae_jpl_init_bin(const char *path, struct ae_jpl_handle_t *jh)
Read a JPL Ephemeris header in binary format.
Definition: jpl_eph.c:383
struct ae_plantbl_t ae_sat404
Ephemeris for Saturn.
Definition: sat404.c:1737
double sun_pv_t
The time for which sun_pv was last calculated.
Definition: aephem.h:221
double step
Ephemeris step-size, in days.
Definition: aephem.h:201
Nutation.
Definition: aephem.h:119
struct ae_physical_t ae_phys_earth
Physical parameters for Earth.
Definition: phys_data.c:80
For storing a planetary map.
Definition: aephem.h:516
double ae_ctime_to_last(double t, double delta_t, double tlong, double nutl, double eps)
Calculate the local apparent sidereal time from a C time.
Definition: calendar.c:369
double t_disc
The temperature of the disc.
Definition: aephem.h:493
int ephemeris_version
Version number.
Definition: aephem.h:206
Mars, the Bringer of War.
Definition: aephem.h:111
Transform from JD to J2000.
Definition: aephem.h:129
double * exp_tau
For recording the opacity of the rings.
Definition: aephem.h:510
struct ae_physical_t ae_phys_uranus
Physical parameters for Uranus.
Definition: phys_data.c:174
double * pol_ring
Fractional linear polarisation of rings, assumed normal to ring surface.
Definition: aephem.h:497
double ae_flattening(const struct ae_physical_t *phys)
Calculate a body's flattening.
Definition: physical.c:328
void ae_topocentric(double jd_tt, double jd_ut1, double tlat, double glat, double tlong, double trho, double(*refrac)(double, void *), void *refrac_param, double dist, double *ra, double *dec)
Apply diurnal aberrations and calculate topocentric altitude and azimuth.
Definition: topocentric.c:60
double t_background
The background temperature.
Definition: aephem.h:495
The function does not work as it is still being developed!
Definition: aephem.h:97
struct ae_physical_t * ae_phys_planet[]
Pointers to the planetary physical information objects.
Definition: init.c:213
double ae_last(double jd_ut1, double jd_tt, double tlong, double nutl, double eps)
Get the local apparent sidereal time.
Definition: calendar.c:127
Uranus, the Magician.
Definition: aephem.h:114
double w_d_sq
Prime meridean coefficient for d^2.
Definition: aephem.h:269
void ae_geocentric_from_orbit(double jd_tt, const struct ae_orbit_t *o_orb, const struct ae_orbit_t *q_orb, double *ra, double *dec, double *dist)
Determine geocentric coordinates using orbital elements.
Definition: geocentric.c:141
double * const_val
Constant values.
Definition: aephem.h:208
int ae_read_star_from_cat(const char *path, const char *name, struct ae_star_t *star)
Parse star positional data from a catalogue file.
Definition: kfiles.c:119
ae_physical_use_d_or_t
Define whether a term uses T or d for physical ephemeride terms.
Definition: aephem.h:139
double ae_mjd(double jd)
Given a Julian Date, get the Modified Julian Date.
Definition: calendar.c:410
An unknown projection type was detected.
Definition: aephem.h:92
struct ae_plantbl_t ae_ven404
Ephemeris for Venus.
Definition: ven404.c:844
const double * a_outer
Outer radius of rings, in Saturn equatorial radii.
Definition: aephem.h:480
char name[32]
Object name (31 chars).
Definition: aephem.h:184
double r_eq
Equatorial radius, km.
Definition: aephem.h:250
A required FITS keyword did not exist.
Definition: aephem.h:90
void ae_g2plan(double jd_tt, struct ae_plantbl_t *plan, double pobj[], double *lp_equinox)
Accumulate the sum of trigonometric series in two variables.
Definition: gplan.c:521
Was expecting a JPL ASCII file.
Definition: aephem.h:79
An unexpected EOF was found in a file.
Definition: aephem.h:71
double ae_refrac_ulich(double alt, void *param)
Atmospheric refraction correction (in millimetre bands).
Definition: refrac.c:128
void ae_gal_to_radec(double ra, double dec, double *l, double *b, int fk5)
Convert l/b (galactic coordinates) to ra/dec.
Definition: coord.c:262
Julian date outside JPL ephemeris range.
Definition: aephem.h:83
void ae_g3plan(double jd_tt, struct ae_plantbl_t *plan, double pobj[], int objnum)
Accumulate the sum of trigonometric series in three variables.
Definition: gplan.c:379
struct ae_orbit_t ae_orb_mars
Default orbital parameters for Mars.
Definition: init.c:83
double * n_ring_disc
Number of pixels looking on-disc through each of the rings.
Definition: aephem.h:507
An error occurred in a call to libcfitsio.
Definition: aephem.h:93
int ae_jpl_init(const char *path, struct ae_jpl_handle_t *jh)
Initialise to use a JPL ephemeris file.
Definition: jpl_eph.c:75
void ae_diurnal_parallax(double last, double tlat, double trho, double dist, double *ra, double *dec)
Correct for diurnal parallax.
Definition: diurnal_px.c:46
struct ae_physical_t ae_phys_venus
Physical parameters for Venus.
Definition: phys_data.c:67
void ae_geocentric_from_cat(double jd_tt, double e[], double v_e[], const struct ae_star_t *star, double *ra, double *dec)
Reduce a star's catalogue coordinates to its apparent place.
Definition: geocentric.c:233
Remove the effect of aberration.
Definition: aephem.h:135
struct ae_physical_t ae_phys_mercury
Physical parameters for Mercury.
Definition: phys_data.c:54
struct ae_physical_term_t * ra_sin_term
Sine series coefficents for the north pole ra.
Definition: aephem.h:259
void ae_fk4_to_fk5(struct ae_star_t *star)
Convert FK4 B1950.0 catalogue coordinates to FK5 J2000.0 coordinates.
Definition: fk4_to_fk5.c:58
double ae_cal_to_jd(long year, int month, double day)
Calculate Julian date from a Gregorian calendar date.
Definition: calendar.c:219
Use d = # days since J2000.
Definition: aephem.h:141
struct ae_plantbl_t * ptable
The perturbation tables.
Definition: aephem.h:174
For holding information on an orbit.
Definition: aephem.h:161
double pol_disc_angle
Angle east of north of disc polarisation, in degrees.
Definition: aephem.h:501
double L
Computed mean longitude.
Definition: aephem.h:175
double * pc
For caching position Chebyshev coefficients.
Definition: aephem.h:223
char * arg_tbl
Table of arguments (?).
Definition: aephem.h:151
int is_bin
Is the file binary or ASCII?
Definition: aephem.h:212
Jove, the Bringer of Jollity.
Definition: aephem.h:112
A path could not be accessed for I/O.
Definition: aephem.h:70
struct ae_physical_t ae_phys_sun
Physical parameters for the Sun.
Definition: phys_data.c:31
void * lon_tbl
Table of longitudinal thingies (?).
Definition: aephem.h:152
int ae_jpl_get_coords(struct ae_jpl_handle_t *jh, double jd_tt, int obj_num, double r[], double v[], char is_planetary)
Get object positions from a JPL ephemeris file.
Definition: jpl_eph.c:851
const char * ae_retcode_string(int retcode)
For returning human readable return codes.
Definition: init.c:292
void ae_subobs_point(double j[], double n[], double w, double f, int retrograde, double *lat, double *lon)
Calculate the sub-observer point.
Definition: physical.c:213
double aes_disc_solid_angle(double jd_ut1, const struct ae_orbit_t *o_orb, const struct ae_orbit_t *q_orb, const struct ae_physical_t *phys)
Calculate the solid angle of an observed disc.
Definition: physical.c:63
double timescale
Timescale.
Definition: aephem.h:156
struct ae_orbit_t ae_orb_mercury
Default orbital parameters for Mercury.
Definition: init.c:29
double aes_ctime_to_last(double t, double tlong)
Calculate the local sidereal time from a C time.
Definition: calendar.c:393
double start
JD at which the ephemeris begins.
Definition: aephem.h:199
double ae_tdb(double jd)
Find Barycentric Dynamical Time from Terrestrial Dynamical Time.
Definition: calendar.c:165
char max_power_of_t
The maximum power in time.
Definition: aephem.h:150
int ae_geocentric_from_jpl(struct ae_jpl_handle_t *jh, double jd_tt, int obj_num, double *ra, double *dec, double *dist)
Determine geocentric coordinates using JPL ephemerides.
Definition: geocentric.c:192
double r_pole
Polar radius, km.
Definition: aephem.h:251
double pol_disc
Fractional linear polarisation of disc.
Definition: aephem.h:499
Venus, the Bringer of Peace.
Definition: aephem.h:109
Libration.
Definition: aephem.h:120
int last_block_num
Last block number read.
Definition: aephem.h:216
Object not found in a catalogue file.
Definition: aephem.h:87
double w
Prime meridean.
Definition: aephem.h:265
struct ae_orbit_t ae_orb_neptune
Default orbital parameters for Neptune.
Definition: init.c:155
double mura
Proper motion in R.A., "/century.
Definition: aephem.h:189
double q
The Q stokes parameter.
Definition: aephem.h:486
void * lat_tbl
Table of latitudinal thingies (?).
Definition: aephem.h:153
The coefficients for sine/cosine terms in a body's rotation data.
Definition: aephem.h:229
double dm
Daily motion, in AU per day.
Definition: aephem.h:168
double ae_g1plan(double jd_tt, struct ae_plantbl_t *plan)
Accumulate the sum of trigonometric series in one variable.
Definition: gplan.c:647
double ae_dut1(double jd_utc)
Given a UTC, return DUT1.
Definition: calendar.c:614
double pole_ra
North pole ra, J2000.
Definition: aephem.h:255
double max_depress
Maximum depression, km. Not required.
Definition: aephem.h:254
double trunclvl
?
Definition: aephem.h:157
double max_elev
Maximum elevation, km. Not required.
Definition: aephem.h:253
struct ae_plantbl_t ae_nep404
Ephemeris for Neptune.
Definition: nep404.c:480
FILE * fp
The JPL file being read from.
Definition: aephem.h:211
struct ae_orbit_t ae_orb_saturn
Default orbital parameters for Saturn.
Definition: init.c:119
double u
The U stokes parameter.
Definition: aephem.h:487
double r_mean
Mean radius, km. Not required.
Definition: aephem.h:249
double ae_light_t(double p[], double q[], int do_retardation)
Get light-travel time between two objects.
Definition: light_t.c:127
struct ae_ring_geometry_t ae_saturn_rings
Physical parameters for Saturn's rings.
Definition: phys_data.c:164
double a
Mean distance (semimajor axis), in AU.
Definition: aephem.h:167
double ae_refrac_visible(double alt, void *param)
Atmospheric refraction correction (in visible bands).
Definition: refrac.c:50
void ae_jd_to_cal(double jd, int *year, int *month, double *day)
Calculate month, day, and year from a Julian date.
Definition: calendar.c:277
struct ae_plantbl_t ae_jup404
Ephemeris for Jupiter.
Definition: jup404.c:1235
double i
Inclination, in degrees.
Definition: aephem.h:164
const char ** name
Names of rings.
Definition: aephem.h:475
An unknown read error occured in a file.
Definition: aephem.h:72
char maxargs
The length of arg_tbl, lon_tbl, lat_tbl and rad_tbl.
Definition: aephem.h:148
struct ae_plantbl_t ae_ura404
Ephemeris for Uranus.
Definition: ura404.c:1384
char ** const_name
Constant names.
Definition: aephem.h:207
double ae_jpl_get_const_val(const struct ae_jpl_handle_t *jh, const char *const_name)
Get the value of a constant defined in the JPL ephemeris header.
Definition: jpl_eph.c:522
double end
JD at which the ephemeris ends.
Definition: aephem.h:200
void ae_v_orbit(double jd_tt, const struct ae_orbit_t *orb, double v[])
Calculate the velocity of an object as it moves in its orbit.
Definition: v_orbit.c:40
Earth-moon barycentre.
Definition: aephem.h:110
struct ae_orbit_t ae_orb_jupiter
Default orbital parameters for Jupiter.
Definition: init.c:101
The earth.
Definition: aephem.h:121
double ae_mod_360(double x)
Reduce x modulo 360 degrees.
Definition: math_util.c:37
int swop
Do we need to swop bytes?
Definition: aephem.h:214
char name[32]
Name of the object.
Definition: aephem.h:162
double sun_pv[6]
For storing barycentric sun position/velocity.
Definition: aephem.h:220
double ae_epsilon(double jd_tt)
Calculate the obliquity of the ecliptic.
Definition: epsilon.c:55
double b
The b in , in degrees.
Definition: aephem.h:234
Data file seems corrupt.
Definition: aephem.h:82
double w_d
Prime meridean coefficient for d = days since J2000.
Definition: aephem.h:267