casacore
MeasTable.h
Go to the documentation of this file.
1 //# MeasTable.h: MeasTable provides Measure computing database data
2 //# Copyright (C) 1995-1999,2000-2004
3 //# Associated Universities, Inc. Washington DC, USA.
4 //#
5 //# This library is free software; you can redistribute it and/or modify it
6 //# under the terms of the GNU Library General Public License as published by
7 //# the Free Software Foundation; either version 2 of the License, or (at your
8 //# option) any later version.
9 //#
10 //# This library is distributed in the hope that it will be useful, but WITHOUT
11 //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13 //# License for more details.
14 //#
15 //# You should have received a copy of the GNU Library General Public License
16 //# along with this library; if not, write to the Free Software Foundation,
17 //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18 //#
19 //# Correspondence concerning AIPS++ should be addressed as follows:
20 //# Internet email: aips2-request@nrao.edu.
21 //# Postal address: AIPS++ Project Office
22 //# National Radio Astronomy Observatory
23 //# 520 Edgemont Road
24 //# Charlottesville, VA 22903-2475 USA
25 //#
26 //#
27 //# $Id$
28 
29 #ifndef MEASURES_MEASTABLE_H
30 #define MEASURES_MEASTABLE_H
31 
32 //# Includes
33 #include <casacore/casa/aips.h>
34 #include <casacore/measures/Measures/MeasJPL.h> // calcPlanetary(MeasJPL::Files *)
35 #include <casacore/measures/Measures/MeasTableMul.h>
36 #include <casacore/measures/Measures/MeasData.h>
37 #include <casacore/measures/Measures/MPosition.h>
38 #include <casacore/measures/Measures/MDirection.h>
39 #include <casacore/measures/Measures/MFrequency.h>
40 #include <casacore/scimath/Functionals/Polynomial.h>
41 #include <casacore/casa/OS/Mutex.h>
42 #include <vector>
43 
44 namespace casacore { //# NAMESPACE CASACORE - BEGIN
45 
46 //# Forward Declarations
47 class RotMatrix;
48 class Euler;
49 
50 // <summary>
51 // MeasTable provides Measure computing database data
52 // </summary>
53 
54 // <use visibility=local>
55 
56 // <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="tMeasMath" demos="">
57 // </reviewed>
58 
59 // <prerequisite>
60 // <li> <linkto class=Measure>Measure</linkto> class
61 // <li> <linkto class=MeasData>MeasData</linkto> class for constant data
62 // <li> <linkto class=Aipsrc>Aipsrc</linkto> class for data placement
63 // </prerequisite>
64 //
65 // <etymology>
66 // MeasTable from Measure and Table
67 // </etymology>
68 //
69 // <synopsis>
70 // MeasTable contains the database interface for all
71 // data necessary for precession, nutation and other
72 // <linkto class=Measure>Measure</linkto> related calculations.<br>
73 // All data are obtained by calls to a method. E.g.
74 // <src> fundArg(1) </src> will provide the first fundamental argument for
75 // nutation calculations, i.e. 'l'. <br>
76 // This class contains no constructors or destructors, only static
77 // methods and (static) constants.
78 // <br> References:<br> Explanatory supplements to the Astronomical Almanac
79 // <br> C. Ron and J. Vondrak, Bull. Astron. Inst. Czechosl. 37, p96, 1986
80 // <br> M. Soma, Th. Hirayama and H. Kinoshita, Celest. Mech. 41, p389, 1988
81 // <br> V.S. Gubanov, Astron. Zh. 49, p1112, 1972
82 //
83 // Where strings are passed in as arguments (observatory names, sources), they
84 // will be case insensitive, and minimum match.
85 // </synopsis>
86 //
87 // <example>
88 // Usage examples can be found in <linkto class=Precession>Precession</linkto>
89 // </example>
90 //
91 // <motivation>
92 // To create a clean interface between the actual calculations and the
93 // methods to obtain the parameters for these calculations. Note that the
94 // tables are in general in the format and units found in the literature. This
95 // is to be able to easy check and change them. However, in the future
96 // re-arrangement could produce faster and more compact code.
97 // </motivation>
98 //
99 // <todo asof="1997/09/02">
100 // <li> more database interfaces, rather than constants
101 // </todo>
102 
103 class MeasTable {
104 
105 public:
106 
107  //# Enumerations
108  // Types to be used in different calls
109  enum Types {
110  // Planetary information
111  MERCURY = 1,
112  VENUS = 2,
113  EARTH = 3,
114  MARS = 4,
115  JUPITER = 5,
116  SATURN = 6,
117  URANUS = 7,
118  NEPTUNE = 8,
119  PLUTO = 9,
120  MOON = 10,
121  SUN = 11,
122  // Solar system barycentre
123  BARYSOLAR = 12,
124  // Earth-Moon system barycentre
125  BARYEARTH = 13,
126  // Nutations
127  NUTATION = 14,
128  // Librations
129  LIBRATION = 15,
130  // Number of types
132 
133  // Codes for JPL constants: order should be same as in MeasJPL, length less
134  // than or equal
135  enum JPLconst {
136  // Light velocity used in AU/d
138  // Solar mass (GM0)/c<sup>2</sup> in AU
140  // AU in km
141  AU,
142  // Solar radius in AU
144  // # of codes
146 
147  //# General Member Functions
148  // Selection related data
149  // <group>
150  // Are the IAU2000 precession/nutation to be used or not (IAU1984)
151  // Note that an Aipsrc::reRead() is not reflected in the return value here.
152  static Bool useIAU2000();
153  // If IAU2000 model, do we use the high precision 2000A model?
154  // Note that an Aipsrc::reRead() is not reflected in the return value here.
155  static Bool useIAU2000A();
156  // </group>
157 
158  // Precession related data
159  // <group>
160  // Get the precession-rate part of the IAU2000 precession-nutation models
161  // (which 0=dpsi (long) and 1=deps (obliquity) and 2 =0)
162  static Double precRate00(const uInt which);
163 
164  // Get the frame bias matrix for IAU2000 model.
166 
167  // Generate the precession calculation polynomials for a fixed Epoch T
168  // in the result area specified.
169  // T is given in Julian centuries since J2000.0.
170  static void
172 
173  // Generate the precession polynomials for IAU2000 system.
174  static void
176 
177  // Generate the precession polynomials for 1950 system for a fixed Epoch T
178  // in the area specified. T is given in Tropical centuries since B1850.0
179  static void
181  // </group>
182 
183  // Nutation related data
184  // <group>
185  // Generate the polynomial for the fundamental arguments (eps, l, l',
186  // F, D, omega) as a function of Julian centuries
187  // <group>
188  static const Polynomial<Double> &fundArg(uInt which);
189  static const Polynomial<Double> &fundArg1950(uInt which);
190  static const Polynomial<Double> &fundArg2000(uInt which);
191  // </group>
192 
193  // Get the planetary arguments (L, L', F, D, Om, Me, Ve, E, Ma, Ju Sa,
194  // Ur, Ne, pre)
196 
197  // Generate the which' vector of the nutation series arguments
198  // <group>
199  static const Double* mulArg(uInt which);
200  static const Double* mulArg1950(uInt which);
201  static const Double* mulArg2000A(uInt which);
202  static const Double* mulArg2000B(uInt which);
203  static const Double* mulPlanArg2000A(uInt which);
204  // </group>
205 
206  // Generate the which' vector of the equation of equinoxes (IAU2000)
207  // complementary terms series arguments
208  static const Double* mulArgEqEqCT2000(uInt which);
209 
210  // Generate the which' vector of the nutation series multipliers
211  // at T, measured in Julian centuries since J2000.0, respectively B1900.0
212  // <group>
217  static const Double* mulPlanSC2000A(uInt which);
218  // </group>
219 
220  // Generate the which' vector of the equation of equinoxes (IAU2000)
221  // complementary terms series multipliers
222  // at T, measured in Julian centuries since J2000.0, respectively B1900.0
223  static const Double* mulSCEqEqCT2000(uInt which);
224 
225  // Get nutation angles corrections for UTC T in rad.
226  // which = 0 : dPsi as given by IERS for IAU nutation theory;
227  // = 1: dEps as same.
228  static Double dPsiEps(uInt which, Double T);
229  // </group>
230 
231  // Planetary (JPL DE) related data
232  // <group>
233  // Get the position (AU or rad) and velocity (AU/d or rad/d) for specified
234  // code at TDB T. The ephemeris to use (now DE200 or DE405) can be selected
235  // with the 'measures.jpl.ephemeris' aipsrc resource (default DE200).
237  // Get the JPL DE constant indicated
239  // </group>
240 
241  // Observatory positions
242  // <group>
243  // Initialise list of all observatories from Observatories table
244  // Called using theirObsInitOnce.
245  static void initObservatories();
246  // Get list of all observatories
247  static const Vector<String> &Observatories();
248  // Get position of observatory nam (False if not present)
249  static Bool Observatory(MPosition &obs, const String &nam);
250 
251  // Get _absolute_ path to AntennaResponses table of observatory
252  // <src>nam</src>. It returns False if no _valid_ path can be found or the
253  // observatory is unknown. If the observatory is known, antRespPath will
254  // be set to the entry in the AntennaResponses column of the
255  // Observatories table even if it doesn't describe a valid path; if the
256  // entry is not an absolute path, the data directory name will be
257  // prepended and validity verified.
258  static Bool AntennaResponsesPath(String &antRespPath, const String &nam);
259  // </group>
260 
261  // Source list positions
262  // <group>
263  // Initialise list of all source from Sources table
264  // Called using theirSrcInitOnce.
265  static void initSources();
266  // Get list of all sources
267  static const Vector<String> &Sources();
268  // Get position of source <src>nam</src> (False if not present)
269  static Bool Source(MDirection &obs, const String &nam);
270  // </group>
271 
272  // Rest frequencies
273  // <group>
274  // Initialise list from internal Table for now
275  // Called using theirLinesInitOnce.
276  static void initLines();
277  // Get list of all frequencies
278  static const Vector<String> &Lines();
279  // Get frequency of line name (False if not present)
280  static Bool Line(MFrequency &obs, const String &nam);
281  // </group>
282 
283  // Initialise list of IGRF data
284  // Called using theirIGRFInitOnce.
285  static void initIGRF();
286  // Earth magnetic field (IGRF) data
287  // Get the harmonic terms for specified time (mjd)
289 
290  // Aberration related data
291  // <group>
292  // Generate the polynomial for the fundamental arguments (l1-l8, w, D, l,
293  // l', F) for the Ron/Vondrak aberration calculations as a function of
294  // Julian centuries(J2000), or the comparable ones for the Gubanov expansion
295  // (B1950).
296  // <group>
297  static const Polynomial<Double> &aberArg(uInt which);
298  static const Polynomial<Double> &aberArgDeriv(uInt which);
299  static const Polynomial<Double> &aber1950Arg(uInt which);
301  // </group>
302 
303  // Generate the 'which' vector of the aberration series arguments
304  // <group>
305  static const Double* mulAberArg(uInt which);
306  static const Double* mulAber1950Arg(uInt which);
307  static const Double* mulAberSunArg(uInt which);
308  static const Double* mulAberEarthArg(uInt which);
309  // </group>
310 
311  // Generate the 'which' vector of the aberration series multipliers
312  // at T, measured in Julian centuries since J2000.0 (or J1900.0, yes,
313  // J1900.0, for B1950).
314  // <group>
317  static const Vector<Double> &mulSunAber(uInt which);
318  static const Vector<Double> &mulEarthAber(uInt which);
319  // </group>
320 
321  // Get the E-terms of Aberration correction (0 for position, 1 for velocity)
322  // <group>
323  static const Vector<Double> &AberETerm(uInt which);
324  // </group>
325 
326  // </group>
327 
328  // Diurnal aberration factor
329  static Double diurnalAber(Double radius, Double T);
330 
331  // LSR (kinematical) velocity conversion: 0 gives J2000; 1 gives B1950.
332  // In both cases a velocity of 20.0 km/s is assumed, and a B1900 RA/Dec
333  // direction of (270,30) degrees. This value has been defined between
334  // the groups doing HI radio work in the mid 1950s.
335  static const Vector<Double> &velocityLSRK(uInt which);
336  // LSR (dynamical, IAU definition). Velocity (9,12,7) km/s in galactic
337  // coordinates. Or 16.552945 towards l,b = 53.13, +25.02 deg.
338  // 0 gives J2000, 1 gives B1950 velocities.
339  static const Vector<Double> &velocityLSR(uInt which);
340  // Velocity of LSR with respect to galactic centre. 220 km/s in direction
341  // l,b = 270, +0 deg. 0 returns J2000, 1 B1950
342  static const Vector<Double> &velocityLSRGal(uInt which);
343  // Velocity of Local Group wrt bary center (F.Ghigo): 308km/s towards
344  // l,b = 105,-7. 0 for J2000, 1 for B1950
345  static const Vector<Double> &velocityCMB(uInt which);
346  // Velocity of CMB wrt bary center (F.Ghigo): 369.5km/s towards
347  // l,b = 264.4,48.4. 0 for J2000, 1 for B1950
348 
349  static const Vector<Double> &velocityLGROUP(uInt which);
350  // Earth and Sun position related data
351  // <group>
352  // Fundamental arguments for Soma et al. methods
353  // <group>
354  static const Polynomial<Double> &posArg(uInt which);
355  // Precomputed derivative of PosArg
356  static const Polynomial<Double> &posArgDeriv(uInt which);
357  // </group>
358  // Generate the which' vector of the position series arguments
359  // <group>
360  static const Double* mulPosEarthXYArg(uInt which);
361  static const Double* mulPosEarthZArg(uInt which);
362  static const Double* mulPosSunXYArg(uInt which);
363  static const Double* mulPosSunZArg(uInt which);
364  // </group>
365 
366  // Generate the which' vector of the position series multipliers
367  // at T, measured in Julian centuries since J2000.0
368  // <group>
373  // </group>
374  // Get the rotation matrix to change position from ecliptic to rectangular
375  // for Soma et al. analytical expression
376  static const RotMatrix &posToRect();
377  // Get the rotation matrix to change position from rectangular to ecliptic
378  // for Soma et al. analytical expression
379  static const RotMatrix &rectToPos();
380  // Get the rotation matrix from galactic to supergalactic.
381  // Based on De Vaucouleurs 1976: Pole at 47.37/6.32 deg; 137.37 l0
382  // Euler angles: 90, 83.68, 47.37 degrees
383  static const RotMatrix &galToSupergal();
384  // Get the rotation matrix from ICRS to J2000/FK5.
385  // Based on the IAU 2000 resolutions (the bias matrix)
386  static const RotMatrix &ICRSToJ2000();
387  // </group>
388 
389  // Position related routines
390  // <group>
391  // Equatorial radius (0) and flattening(1) of geodetic reference spheroids
392  static Double WGS84(uInt which);
393  // </group>
394 
395  // Polar motion related routines
396  // <group>
397  // Get the polar motion (-x,-y,0)(2,1,3) angles at the given epoch
399  // </group>
400 
401  // Time related routines
402  // <note>
403  // WARNING given if correction not obtainable
404  // </note>
405  // <thrown>
406  // <li> AipsError if table seems to be corrupted
407  // </thrown>
408  // <group>
409  // Give TAI-UTC (in s) for MJD utc UTC
410  static Double dUTC(Double utc);
411  // UT1-UTC (in s) for MJD tai TAI
412  static Double dUT1(Double utc);
413  // TDT-TAI (in s) for MJD tai TAI. Note this is equal to TT2000-TAI
414  static Double dTAI(Double tai=0.0);
415  // TDB-TDT (in s) for MJD ut1 UT1
416  static Double dTDT(Double ut1);
417  // TCB-TDB (in s) for MJD tai TAI
418  static Double dTDB(Double tai);
419  // TCG-TT (in s) for MJD tai TAI
420  static Double dTCG(Double tai);
421  // GMST1 at MJD ut1 UT1
422  static Double GMST0(Double ut1);
423  // GMST (IAU2000) including the ERA (IAU2000 Earth Rotation Angle) in rad
424  static Double GMST00(Double ut1, Double tt);
425  // Earth Rotation Angle (IAU2000) in rad
426  static Double ERA00(Double ut1);
427  // s' (IAU2000) in rad (approximate value)
428  static Double sprime00(Double tt);
429  // UT1 at GMSD gmst1 GMST1
430  static Double GMUT0(Double gmst1);
431  // Ratio UT1/MST at MJD ut1 UT1
432  static Double UTtoST(Double ut1);
433  // </group>
434 
435 private:
436 
437  // Copy assign, NOT defined
438  MeasTable &operator=(const MeasTable &other);
439 
440  //# General member functions
441 
442  static void doInitObservatories();
443  static void doInitLines();
444  static void doInitSources();
445  static void doInitIGRF();
446 
447  // The calcNNN() functions are helpers to initialize
448  // function scope static variables in the NNN() callers.
449 
450  // Calculate precessionCoef
451  // <group>
452  static void calcPrecesCoef(Double T, Polynomial<Double> result[3],
453  const Double coeff[3][6]);
454  static void calcPrecesCoef2000(Polynomial<Double> result[3],
455  const Double coeff[3][6]);
456  // </group>
457 
458  // Calculate fundArg
459  // <group>
460  static std::vector<Polynomial<Double> > calcFundArg(const Double coeff[6][4]);
461  static std::vector<Polynomial<Double> > calcFundArg00(const Double coeff[6][5]);
462  static std::vector<Polynomial<Double> > calcPlanArg00(const Double coeff[8][2]);
463  // </group>
464 
465  // Calculate planetary data
466  // <group>
467  static void calcPlanetary(MeasJPL::Files* fil);
469  // </group>
470 
471  // Calculate aberration data
472  // <group>
473  static std::vector<Polynomial<Double> > calcAberArg();
474  static std::vector<Polynomial<Double> > calcAberArgDeriv();
475  static std::vector<Polynomial<Double> > calcAber1950Arg();
476  static std::vector<Polynomial<Double> > calcAber1950ArgDeriv();
477  static std::vector<Vector<Double> > calcMulSunAber();
478  static std::vector<Vector<Double> > calcMulEarthAber();
479  static std::vector<Vector<Double> > calcAberETerm();
480  // </group>
481 
482  // Calculate velocity data
483  // <group>
484  static std::vector<Vector<Double> > calcVelocityLSRK();
485  static std::vector<Vector<Double> > calcVelocityLSR();
486  static std::vector<Vector<Double> > calcVelocityLSRGal();
487  static std::vector<Vector<Double> > calcVelocityLGROUP();
488  static std::vector<Vector<Double> > calcVelocityCMB();
489  // </group>
490 
491  // Calculate Earth and Sun position data
492  // <group>
493  static std::vector<Polynomial<Double> > calcPosArg();
494  static std::vector<Polynomial<Double> > calcPosArgDeriv();
495  // </group>
496 
497  // Calculate some of the rotation matrices for coordinate conversion
498  // <group>
501  // </group>
502 
503  // Calculate time related conversion data
504 
505  // For dUTC() pack vars for clean initialization of function scope statics.
506  // Thread-safe (C++11). For pre-C++11 depends on compiler (GCC, Clang make it so).
507  struct Statics_dUTC {
508  Double (*LEAP)[4];
510  };
511  // <group>
518  // </group>
519 
520  //# Data
521  // Planetary table data
522  // <group>
525  // </group>
526 
527  // Multipliers for nutation, etc.
528  // <group>
539  // </group>
540 
541  // Observatories table data
542  // <group>
547  // </group>
548  // Spectral line table data
549  // <group>
553  // </group>
554  // Sources table data
555  // <group>
559  // </group>
560  // IGRF data
561  // <group>
565  static Double lastIGRF;
567  static Double timeIGRF;
568  static std::vector<Vector<Double> > coefIGRF;
569  static std::vector<Vector<Double> > dIGRF;
570  // </group>
571 
575 };
576 
577 
578 } //# NAMESPACE CASACORE - END
579 
580 #endif
Wrapper around std::call_once.
Definition: Mutex.h:215
CallOnce: func has one arg.
Definition: Mutex.h:252
Referenced counted pointer for constant data.
Definition: CountedPtr.h:81
Files
Types of files.
Definition: MeasJPL.h:158
Class calculating the B1950 aberration multipliers.
Definition: MeasTableMul.h:222
Class calculating the standard aberration multipliers.
Definition: MeasTableMul.h:206
Class calculating the XY earth position multipliers.
Definition: MeasTableMul.h:269
Class calculating the Z earth position multipliers.
Definition: MeasTableMul.h:282
Class calculating the XY solar position multipliers.
Definition: MeasTableMul.h:242
Class calculating the Z solar position multipliers.
Definition: MeasTableMul.h:255
Class calculating the B1950 nutation multipliers.
Definition: MeasTableMul.h:145
Class calculating the J2000A nutation multipliers.
Definition: MeasTableMul.h:177
Class calculating the J2000B nutation multipliers.
Definition: MeasTableMul.h:191
Class calculating the standard nutation multipliers.
Definition: MeasTableMul.h:130
static const Double * mulAber1950Arg(uInt which)
static const Vector< Double > & velocityLSRK(uInt which)
LSR (kinematical) velocity conversion: 0 gives J2000; 1 gives B1950.
static std::vector< Polynomial< Double > > calcPosArgDeriv()
static Polynomial< Double > calcGMST0()
static Double sprime00(Double tt)
s' (IAU2000) in rad (approximate value)
static const Double * mulAberSunArg(uInt which)
static void initSources()
Source list positions.
static std::vector< Polynomial< Double > > calcPosArg()
Calculate Earth and Sun position data.
static std::vector< Vector< Double > > calcVelocityLSR()
static const Polynomial< Double > & aber1950ArgDeriv(uInt which)
static void initIGRF()
Initialise list of IGRF data Called using theirIGRFInitOnce.
static Double ERA00(Double ut1)
Earth Rotation Angle (IAU2000) in rad.
static Vector< MDirection > srcPos
Definition: MeasTable.h:558
static CountedPtr< Matrix< Double > > mulAber(Double time, Double epsilon)
Generate the 'which' vector of the aberration series multipliers at T, measured in Julian centuries s...
static const RotMatrix & posToRect()
Get the rotation matrix to change position from ecliptic to rectangular for Soma et al.
static Double WGS84(uInt which)
Position related routines.
static const Vector< Double > & velocityLSR(uInt which)
LSR (dynamical, IAU definition).
static void doInitObservatories()
static const Polynomial< Double > & fundArg(uInt which)
Nutation related data.
static const Double * mulPosEarthXYArg(uInt which)
Generate the which' vector of the position series arguments.
static std::vector< Vector< Double > > calcMulEarthAber()
static Euler polarMotion(Double ut)
Polar motion related routines.
static Vector< Double > IGRF(Double t)
Earth magnetic field (IGRF) data Get the harmonic terms for specified time (mjd)
static RotMatrix calcICRSToJ2000()
static Double dTDB(Double tai)
TCB-TDB (in s) for MJD tai TAI.
static std::vector< Polynomial< Double > > calcAberArg()
Calculate aberration data.
static std::vector< Vector< Double > > calcVelocityLSRK()
Calculate velocity data.
static Bool Line(MFrequency &obs, const String &nam)
Get frequency of line name (False if not present)
static void calcPrecesCoef(Double T, Polynomial< Double > result[3], const Double coeff[3][6])
The calcNNN() functions are helpers to initialize function scope static variables in the NNN() caller...
static MeasTableMulPosEarthXY theirMulPosEarthXY
Definition: MeasTable.h:537
static Bool AntennaResponsesPath(String &antRespPath, const String &nam)
Get absolute path to AntennaResponses table of observatory nam.
static std::vector< Vector< Double > > calcAberETerm()
static const Polynomial< Double > & posArgDeriv(uInt which)
Precomputed derivative of PosArg.
static Double GMUT0(Double gmst1)
UT1 at GMSD gmst1 GMST1.
static void calcPlanetaryConstants(Double cn[MeasTable::N_JPLconst])
static CountedPtr< Matrix< Double > > mulSC2000B(Double time, Double epsilon)
static CountedPtr< Matrix< Double > > mulSC1950(Double time, Double epsilon)
static const Double * mulArg2000A(uInt which)
static RotMatrix frameBias00()
Get the frame bias matrix for IAU2000 model.
static Vector< String > srcNams
Definition: MeasTable.h:557
static void calcPlanetary(MeasJPL::Files *fil)
Calculate planetary data.
static Vector< Double > Planetary(MeasTable::Types which, Double T)
Planetary (JPL DE) related data.
static Vector< String > lineNams
Definition: MeasTable.h:551
static std::vector< Polynomial< Double > > calcAberArgDeriv()
static Bool Source(MDirection &obs, const String &nam)
Get position of source nam (False if not present)
static Double lastIGRF
Definition: MeasTable.h:565
static Double precRate00(const uInt which)
Precession related data.
static CallOnce0 theirIGRFInitOnce
IGRF data.
Definition: MeasTable.h:562
static Double dUT1(Double utc)
UT1-UTC (in s) for MJD tai TAI.
static const Vector< Double > & mulSunAber(uInt which)
static const RotMatrix & ICRSToJ2000()
Get the rotation matrix from ICRS to J2000/FK5.
static void doInitSources()
static std::vector< Polynomial< Double > > calcPlanArg00(const Double coeff[8][2])
static const Vector< Double > & velocityCMB(uInt which)
Velocity of Local Group wrt bary center (F.Ghigo): 308km/s towards l,b = 105,-7.
static std::vector< Vector< Double > > calcMulSunAber()
static const Vector< String > & Lines()
Get list of all frequencies.
static Double firstIGRF
Definition: MeasTable.h:564
static Statics_dUTC calc_dUTC()
static CountedPtr< Matrix< Double > > mulPosSunXY(Double time, Double epsilon)
static void precessionCoef2000(Polynomial< Double > result[3])
Generate the precession polynomials for IAU2000 system.
static const Polynomial< Double > & fundArg1950(uInt which)
static std::vector< Polynomial< Double > > calcFundArg(const Double coeff[6][4])
Calculate fundArg.
static Vector< MFrequency > linePos
Definition: MeasTable.h:552
static CountedPtr< Matrix< Double > > mulPosSunZ(Double time, Double epsilon)
static Double UTtoST(Double ut1)
Ratio UT1/MST at MJD ut1 UT1.
static MeasTableMulAber theirMulAber
Definition: MeasTable.h:533
static Bool useIAU2000A()
If IAU2000 model, do we use the high precision 2000A model? Note that an Aipsrc::reRead() is not refl...
static const Double * mulSCEqEqCT2000(uInt which)
Generate the which' vector of the equation of equinoxes (IAU2000) complementary terms series multipli...
static CallOnce0 theirSrcInitOnce
Sources table data.
Definition: MeasTable.h:556
static Double Planetary(MeasTable::JPLconst what)
Get the JPL DE constant indicated.
static const Double * mulPosSunXYArg(uInt which)
static Double dUTC(Double utc)
Time related routines Note: WARNING given if correction not obtainable
static CallOnce0 theirObsInitOnce
Observatories table data.
Definition: MeasTable.h:543
static CountedPtr< Matrix< Double > > mulAber1950(Double time, Double epsilon)
static CountedPtr< Matrix< Double > > mulSC(Double time, Double epsilon)
Generate the which' vector of the nutation series multipliers at T, measured in Julian centuries sinc...
static void initLines()
Rest frequencies.
static const Vector< Double > & velocityLSRGal(uInt which)
Velocity of LSR with respect to galactic centre.
static const Double * mulPlanSC2000A(uInt which)
static CallOnce0 theirLinesInitOnce
Spectral line table data.
Definition: MeasTable.h:550
static Vector< String > obsNams
Definition: MeasTable.h:544
static const Polynomial< Double > & posArg(uInt which)
Earth and Sun position related data.
static const Double * mulPosSunZArg(uInt which)
static const Vector< Double > & velocityLGROUP(uInt which)
Velocity of CMB wrt bary center (F.Ghigo): 369.5km/s towards l,b = 264.4,48.4.
static const Double * mulArg2000B(uInt which)
static const Polynomial< Double > & fundArg2000(uInt which)
static MeasTableMulPosSunXY theirMulPosSunXY
Definition: MeasTable.h:535
static Double diurnalAber(Double radius, Double T)
Diurnal aberration factor.
static Double GMST00(Double ut1, Double tt)
GMST (IAU2000) including the ERA (IAU2000 Earth Rotation Angle) in rad.
MeasTable & operator=(const MeasTable &other)
Copy assign, NOT defined.
static Polynomial< Double > calcERA00()
static Vector< String > antResponsesPath
Definition: MeasTable.h:546
static std::vector< Vector< Double > > coefIGRF
Definition: MeasTable.h:568
static const Double * mulPosEarthZArg(uInt which)
static void precessionCoef1950(Double T, Polynomial< Double > result[3])
Generate the precession polynomials for 1950 system for a fixed Epoch T in the area specified.
static const Vector< String > & Observatories()
Get list of all observatories.
static Polynomial< Double > calcGMUT0()
static CountedPtr< Matrix< Double > > mulPosEarthZ(Double time, Double epsilon)
static MeasTableMulPosSunZ theirMulPosSunZ
Definition: MeasTable.h:536
static Double dTCG(Double tai)
TCG-TT (in s) for MJD tai TAI.
static void initObservatories()
Observatory positions.
static Polynomial< Double > calcUTtoST()
static const Double * mulArg1950(uInt which)
static Double dtimeIGRF
Definition: MeasTable.h:563
static std::vector< Vector< Double > > dIGRF
Definition: MeasTable.h:569
static Double dTDT(Double ut1)
TDB-TDT (in s) for MJD ut1 UT1.
static std::vector< Vector< Double > > calcVelocityLSRGal()
static Bool Observatory(MPosition &obs, const String &nam)
Get position of observatory nam (False if not present)
static const Polynomial< Double > & aberArgDeriv(uInt which)
static Double timeIGRF
Definition: MeasTable.h:567
static Double dTAI(Double tai=0.0)
TDT-TAI (in s) for MJD tai TAI.
static CallOnce theirPlanetaryConstantsInitOnce
Definition: MeasTable.h:524
static MeasTableMulPosEarthZ theirMulPosEarthZ
Definition: MeasTable.h:538
static void precessionCoef(Double T, Polynomial< Double > result[3])
Generate the precession calculation polynomials for a fixed Epoch T in the result area specified.
static MeasTableMulSC2000A theirMulSC2000A
Definition: MeasTable.h:531
static MeasTableMulAber1950 theirMulAber1950
Definition: MeasTable.h:534
static Double time0IGRF
Definition: MeasTable.h:566
Types
Types to be used in different calls.
Definition: MeasTable.h:109
@ NUTATION
Nutations.
Definition: MeasTable.h:127
@ LIBRATION
Librations.
Definition: MeasTable.h:129
@ BARYSOLAR
Solar system barycentre.
Definition: MeasTable.h:123
@ BARYEARTH
Earth-Moon system barycentre.
Definition: MeasTable.h:125
@ MERCURY
Planetary information.
Definition: MeasTable.h:111
@ N_Types
Number of types.
Definition: MeasTable.h:131
static const Double * mulPlanArg2000A(uInt which)
static const Polynomial< Double > & planetaryArg2000(uInt which)
Get the planetary arguments (L, L', F, D, Om, Me, Ve, E, Ma, Ju Sa, Ur, Ne, pre)
static const Double * mulAberEarthArg(uInt which)
static RotMatrix calcRectToPos()
Calculate some of the rotation matrices for coordinate conversion.
static MeasTableMulSC theirMulSC
Multipliers for nutation, etc.
Definition: MeasTable.h:529
static const Vector< Double > & AberETerm(uInt which)
Get the E-terms of Aberration correction (0 for position, 1 for velocity)
static const Vector< String > & Sources()
Get list of all sources.
static const Vector< Double > & mulEarthAber(uInt which)
static CountedPtr< Matrix< Double > > mulSC2000A(Double time, Double epsilon)
static std::vector< Polynomial< Double > > calcAber1950Arg()
static Vector< MPosition > obsPos
Definition: MeasTable.h:545
static CountedPtr< Matrix< Double > > mulPosEarthXY(Double time, Double epsilon)
Generate the which' vector of the position series multipliers at T, measured in Julian centuries sinc...
static Bool useIAU2000()
Selection related data.
static CallOnce theirPlanetaryInitOnce
Planetary table data.
Definition: MeasTable.h:523
static void calcPrecesCoef2000(Polynomial< Double > result[3], const Double coeff[3][6])
static MeasTableMulSC1950 theirMulSC1950
Definition: MeasTable.h:530
static std::vector< Vector< Double > > calcVelocityLGROUP()
static void doInitLines()
static const Polynomial< Double > & aberArg(uInt which)
Aberration related data.
static Double GMST0(Double ut1)
GMST1 at MJD ut1 UT1.
static std::vector< Polynomial< Double > > calcFundArg00(const Double coeff[6][5])
static const Polynomial< Double > & aber1950Arg(uInt which)
static std::vector< Polynomial< Double > > calcAber1950ArgDeriv()
static MeasTableMulSC2000B theirMulSC2000B
Definition: MeasTable.h:532
static const RotMatrix & galToSupergal()
Get the rotation matrix from galactic to supergalactic.
static const Double * mulArgEqEqCT2000(uInt which)
Generate the which' vector of the equation of equinoxes (IAU2000) complementary terms series argument...
static void doInitIGRF()
static const Double * mulArg(uInt which)
Generate the which' vector of the nutation series arguments.
static const Double * mulAberArg(uInt which)
Generate the 'which' vector of the aberration series arguments.
static Polynomial< Double > calcGMST00()
static std::vector< Vector< Double > > calcVelocityCMB()
static const RotMatrix & rectToPos()
Get the rotation matrix to change position from rectangular to ecliptic for Soma et al.
static Double dPsiEps(uInt which, Double T)
Get nutation angles corrections for UTC T in rad.
JPLconst
Codes for JPL constants: order should be same as in MeasJPL, length less than or equal.
Definition: MeasTable.h:135
@ RADS
Solar radius in AU.
Definition: MeasTable.h:143
@ GMS
Solar mass (GM0)/c2 in AU.
Definition: MeasTable.h:139
@ CAU
Light velocity used in AU/d.
Definition: MeasTable.h:137
String: the storage and methods of handling collections of characters.
Definition: String.h:223
this file contains all the compiler specific defines
Definition: mainpage.dox:28
TableExprNode time(const TableExprNode &node)
Definition: ExprNode.h:1580
unsigned int uInt
Definition: aipstype.h:51
int Int
Definition: aipstype.h:50
bool Bool
Define the standard types used by Casacore.
Definition: aipstype.h:42
double Double
Definition: aipstype.h:55
Calculate time related conversion data.
Definition: MeasTable.h:507