casacore
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 *)
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.
166  static RotMatrix frameBias00();
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)
196  static const Polynomial<Double> &planetaryArg2000(uInt which);
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>
214  static CountedPtr<Matrix<Double> > mulSC(Double time, Double epsilon);
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
239  static Double Planetary(MeasTable::JPLconst what);
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)
289  static Vector<Double> IGRF(Double t);
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);
301  static const Polynomial<Double> &aber1950ArgDeriv(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
399  static Euler polarMotion(Double ut);
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>
500  static RotMatrix calcRectToPos();
501  static RotMatrix calcICRSToJ2000();
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>
513  static Statics_dUTC calc_dUTC();
514  static Polynomial<Double> calcGMST0();
516  static Polynomial<Double> calcERA00();
517  static Polynomial<Double> calcGMUT0();
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
static MeasTableMulPosSunZ theirMulPosSunZ
Definition: MeasTable.h:537
static Double dTDT(Double ut1)
TDB-TDT (in s) for MJD ut1 UT1.
static std::vector< Vector< Double > > calcMulSunAber()
A Measure: astronomical direction.
Definition: MDirection.h:174
static const Polynomial< Double > & fundArg1950(uInt which)
static const Double * mulAber1950Arg(uInt which)
static const Vector< Double > & velocityLSRGal(uInt which)
Velocity of LSR with respect to galactic centre.
A Measure: position on Earth.
Definition: MPosition.h:79
static std::once_flag theirPlanetaryConstantsInitOnceFlag
Definition: MeasTable.h:525
static Vector< MFrequency > linePos
Definition: MeasTable.h:553
static Polynomial< Double > calcUTtoST()
int Int
Definition: aipstype.h:50
static const Vector< Double > & velocityLSR(uInt which)
LSR (dynamical, IAU definition).
static void doInitLines()
static Statics_dUTC calc_dUTC()
static const Double * mulAberArg(uInt which)
Generate the &#39;which&#39; vector of the aberration series arguments.
static const Polynomial< Double > & planetaryArg2000(uInt which)
Get the planetary arguments (L, L&#39;, F, D, Om, Me, Ve, E, Ma, Ju Sa, Ur, Ne, pre)
static const Polynomial< Double > & posArgDeriv(uInt which)
Precomputed derivative of PosArg.
static std::vector< Polynomial< Double > > calcPosArgDeriv()
static const Polynomial< Double > & aber1950ArgDeriv(uInt which)
static const Polynomial< Double > & aberArgDeriv(uInt which)
static Vector< String > antResponsesPath
Definition: MeasTable.h:547
TableExprNode time(const TableExprNode &node)
Definition: ExprNode.h:1580
static MeasTableMulPosSunXY theirMulPosSunXY
Definition: MeasTable.h:536
static std::vector< Vector< Double > > calcVelocityCMB()
static const Vector< Double > & mulEarthAber(uInt which)
static const Double * mulPlanArg2000A(uInt which)
static MeasTableMulAber theirMulAber
Definition: MeasTable.h:534
static Polynomial< Double > calcERA00()
static Vector< String > srcNams
Definition: MeasTable.h:558
static std::vector< Polynomial< Double > > calcPlanArg00(const Double coeff[8][2])
static const Double * mulAberSunArg(uInt which)
static std::vector< Vector< Double > > calcAberETerm()
static void doInitIGRF()
static const RotMatrix & galToSupergal()
Get the rotation matrix from galactic to supergalactic.
static Double UTtoST(Double ut1)
Ratio UT1/MST at MJD ut1 UT1.
static const Polynomial< Double > & fundArg2000(uInt which)
Class calculating the B1950 aberration multipliers.
Definition: MeasTableMul.h:222
static Double WGS84(uInt which)
Position related routines.
static std::vector< Polynomial< Double > > calcAber1950ArgDeriv()
static std::vector< Vector< Double > > calcVelocityLSRK()
Calculate velocity data.
static std::once_flag theirObsInitOnceFlag
Observatories table data.
Definition: MeasTable.h:544
Class calculating the B1950 nutation multipliers.
Definition: MeasTableMul.h:145
static std::vector< Polynomial< Double > > calcFundArg(const Double coeff[6][4])
Calculate fundArg.
static CountedPtr< Matrix< Double > > mulAber1950(Double time, Double epsilon)
Class calculating the J2000B nutation multipliers.
Definition: MeasTableMul.h:191
Calculate time related conversion data.
Definition: MeasTable.h:508
static Double diurnalAber(Double radius, Double T)
Diurnal aberration factor.
static CountedPtr< Matrix< Double > > mulSC2000B(Double time, Double epsilon)
static void initObservatories()
Observatory positions.
static std::once_flag theirLinesInitOnceFlag
Spectral line table data.
Definition: MeasTable.h:551
static MeasTableMulSC2000B theirMulSC2000B
Definition: MeasTable.h:533
static const Polynomial< Double > & aber1950Arg(uInt which)
static const Polynomial< Double > & aberArg(uInt which)
Aberration related data.
static Bool AntennaResponsesPath(String &antRespPath, const String &nam)
Get absolute path to AntennaResponses table of observatory nam.
Light velocity used in AU/d.
Definition: MeasTable.h:138
static void precessionCoef2000(Polynomial< Double > result[3])
Generate the precession polynomials for IAU2000 system.
static const Double * mulPosSunZArg(uInt which)
static void calcPrecesCoef2000(Polynomial< Double > result[3], const Double coeff[3][6])
static const Vector< String > & Observatories()
Get list of all observatories.
A 3x3 rotation matrix.
Definition: RotMatrix.h:85
static MeasTableMulSC theirMulSC
Multipliers for nutation, etc.
Definition: MeasTable.h:530
static Double ERA00(Double ut1)
Earth Rotation Angle (IAU2000) in rad.
static std::vector< Polynomial< Double > > calcAberArgDeriv()
static Euler polarMotion(Double ut)
Polar motion related routines.
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 * mulArgEqEqCT2000(uInt which)
Generate the which&#39; vector of the equation of equinoxes (IAU2000) complementary terms series argument...
static Double GMST00(Double ut1, Double tt)
GMST (IAU2000) including the ERA (IAU2000 Earth Rotation Angle) in rad.
Class calculating the XY earth position multipliers.
Definition: MeasTableMul.h:269
Class calculating the Z solar position multipliers.
Definition: MeasTableMul.h:255
static Double dtimeIGRF
Definition: MeasTable.h:564
static void calcPlanetary(MeasJPL::Files *fil)
Calculate planetary data.
A Measure: wave characteristics.
Definition: MFrequency.h:161
Types
Types to be used in different calls.
Definition: MeasTable.h:110
static std::once_flag theirSrcInitOnceFlag
Sources table data.
Definition: MeasTable.h:557
Class calculating the J2000A nutation multipliers.
Definition: MeasTableMul.h:177
static MeasTableMulAber1950 theirMulAber1950
Definition: MeasTable.h:535
static RotMatrix frameBias00()
Get the frame bias matrix for IAU2000 model.
Class calculating the XY solar position multipliers.
Definition: MeasTableMul.h:242
static Bool useIAU2000()
Selection related data.
static CountedPtr< Matrix< Double > > mulPosEarthXY(Double time, Double epsilon)
Generate the which&#39; vector of the position series multipliers at T, measured in Julian centuries sinc...
static const Double * mulArg2000A(uInt which)
static const RotMatrix & ICRSToJ2000()
Get the rotation matrix from ICRS to J2000/FK5.
Referenced counted pointer for constant data.
Definition: CountedPtr.h:80
Solar mass (GM0)/c2 in AU.
Definition: MeasTable.h:140
static MeasTableMulPosEarthXY theirMulPosEarthXY
Definition: MeasTable.h:538
static std::vector< Polynomial< Double > > calcAber1950Arg()
static const RotMatrix & rectToPos()
Get the rotation matrix to change position from rectangular to ecliptic for Soma et al...
static void doInitObservatories()
static Double dUTC(Double utc)
Time related routines Note: WARNING given if correction not obtainable
static Vector< String > lineNams
Definition: MeasTable.h:552
static void initLines()
Rest frequencies.
Class calculating the Z earth position multipliers.
Definition: MeasTableMul.h:282
double Double
Definition: aipstype.h:55
static Double precRate00(const uInt which)
Precession related data.
static std::vector< Vector< Double > > calcMulEarthAber()
Files
Types of files.
Definition: MeasJPL.h:159
static Double dPsiEps(uInt which, Double T)
Get nutation angles corrections for UTC T in rad.
static Bool Source(MDirection &obs, const String &nam)
Get position of source nam (False if not present)
static Double sprime00(Double tt)
s&#39; (IAU2000) in rad (approximate value)
Number of types.
Definition: MeasTable.h:132
bool Bool
Define the standard types used by Casacore.
Definition: aipstype.h:42
static CountedPtr< Matrix< Double > > mulPosEarthZ(Double time, Double epsilon)
static const Double * mulPosEarthZArg(uInt which)
static const Double * mulArg(uInt which)
Generate the which&#39; vector of the nutation series arguments.
static std::once_flag theirPlanetaryInitOnceFlag
Planetary table data.
Definition: MeasTable.h:524
static const Double * mulPlanSC2000A(uInt which)
static Bool Observatory(MPosition &obs, const String &nam)
Get position of observatory nam (False if not present)
JPLconst
Codes for JPL constants: order should be same as in MeasJPL, length less than or equal.
Definition: MeasTable.h:136
static Double timeIGRF
Definition: MeasTable.h:568
static Vector< MDirection > srcPos
Definition: MeasTable.h:559
static CountedPtr< Matrix< Double > > mulSC1950(Double time, Double epsilon)
static Double dTDB(Double tai)
TCB-TDB (in s) for MJD tai TAI.
static void calcPlanetaryConstants(Double cn[MeasTable::N_JPLconst])
static const Vector< String > & Lines()
Get list of all frequencies.
static std::vector< Vector< Double > > coefIGRF
Definition: MeasTable.h:569
static std::vector< Polynomial< Double > > calcFundArg00(const Double coeff[6][5])
static RotMatrix calcRectToPos()
Calculate some of the rotation matrices for coordinate conversion.
MeasTable provides Measure computing database data.
Definition: MeasTable.h:104
static const Double * mulArg1950(uInt which)
static Double dTAI(Double tai=0.0)
TDT-TAI (in s) for MJD tai TAI.
static void initIGRF()
Initialise list of IGRF data Called using theirIGRFInitOnce.
static const RotMatrix & posToRect()
Get the rotation matrix to change position from ecliptic to rectangular for Soma et al...
static std::once_flag theirIGRFInitOnceFlag
IGRF data.
Definition: MeasTable.h:563
static CountedPtr< Matrix< Double > > mulAber(Double time, Double epsilon)
Generate the &#39;which&#39; vector of the aberration series multipliers at T, measured in Julian centuries s...
static std::vector< Vector< Double > > calcVelocityLGROUP()
Class calculating the standard aberration multipliers.
Definition: MeasTableMul.h:206
static CountedPtr< Matrix< Double > > mulSC2000A(Double time, Double epsilon)
Solar radius in AU.
Definition: MeasTable.h:144
static Double time0IGRF
Definition: MeasTable.h:567
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 Vector< String > obsNams
Definition: MeasTable.h:545
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 MeasTableMulSC1950 theirMulSC1950
Definition: MeasTable.h:531
static CountedPtr< Matrix< Double > > mulPosSunXY(Double time, Double epsilon)
static const Double * mulSCEqEqCT2000(uInt which)
Generate the which&#39; vector of the equation of equinoxes (IAU2000) complementary terms series multipli...
static const Vector< Double > & velocityLSRK(uInt which)
LSR (kinematical) velocity conversion: 0 gives J2000; 1 gives B1950.
static Double lastIGRF
Definition: MeasTable.h:566
static const Polynomial< Double > & fundArg(uInt which)
Nutation related data.
static const Polynomial< Double > & posArg(uInt which)
Earth and Sun position related data.
static const Vector< Double > & AberETerm(uInt which)
Get the E-terms of Aberration correction (0 for position, 1 for velocity)
static const Double * mulAberEarthArg(uInt which)
static Double firstIGRF
Definition: MeasTable.h:565
static std::vector< Vector< Double > > dIGRF
Definition: MeasTable.h:570
static MeasTableMulPosEarthZ theirMulPosEarthZ
Definition: MeasTable.h:539
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 Double GMST0(Double ut1)
GMST1 at MJD ut1 UT1.
String: the storage and methods of handling collections of characters.
Definition: String.h:225
static const Double * mulPosEarthXYArg(uInt which)
Generate the which&#39; vector of the position series arguments.
static MeasTableMulSC2000A theirMulSC2000A
Definition: MeasTable.h:532
MeasTable & operator=(const MeasTable &other)
Copy assign, NOT defined.
static Vector< Double > Planetary(MeasTable::Types which, Double T)
Planetary (JPL DE) related data.
static const Vector< Double > & velocityCMB(uInt which)
Velocity of Local Group wrt bary center (F.Ghigo): 308km/s towards l,b = 105,-7.
static Polynomial< Double > calcGMST00()
static std::vector< Polynomial< Double > > calcPosArg()
Calculate Earth and Sun position data.
static const Double * mulArg2000B(uInt which)
static Double GMUT0(Double gmst1)
UT1 at GMSD gmst1 GMST1.
static Polynomial< Double > calcGMUT0()
static CountedPtr< Matrix< Double > > mulPosSunZ(Double time, Double epsilon)
static const Vector< String > & Sources()
Get list of all sources.
static Polynomial< Double > calcGMST0()
static Vector< MPosition > obsPos
Definition: MeasTable.h:546
static std::vector< Vector< Double > > calcVelocityLSR()
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 std::vector< Polynomial< Double > > calcAberArg()
Calculate aberration data.
static void initSources()
Source list positions.
static Bool Line(MFrequency &obs, const String &nam)
Get frequency of line name (False if not present)
Class calculating the standard nutation multipliers.
Definition: MeasTableMul.h:130
Earth-Moon system barycentre.
Definition: MeasTable.h:126
static RotMatrix calcICRSToJ2000()
static CountedPtr< Matrix< Double > > mulSC(Double time, Double epsilon)
Generate the which&#39; vector of the nutation series multipliers at T, measured in Julian centuries sinc...
Solar system barycentre.
Definition: MeasTable.h:124
static std::vector< Vector< Double > > calcVelocityLSRGal()
static const Vector< Double > & mulSunAber(uInt which)
static void doInitSources()
Planetary information.
Definition: MeasTable.h:112
static Double dUT1(Double utc)
UT1-UTC (in s) for MJD tai TAI.
unsigned int uInt
Definition: aipstype.h:51
static Vector< Double > IGRF(Double t)
Earth magnetic field (IGRF) data Get the harmonic terms for specified time (mjd)
static Double dTCG(Double tai)
TCG-TT (in s) for MJD tai TAI.
static const Double * mulPosSunXYArg(uInt which)
Vector of Euler rotation angles.
Definition: Euler.h:116