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