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