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
45namespace casacore { //# NAMESPACE CASACORE - BEGIN
46
47//# Forward Declarations
48class RotMatrix;
49class 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
105
106public:
107
108 //# Enumerations
109 // Types to be used in different calls
110 enum Types {
111 // Planetary information
113 VENUS = 2,
114 EARTH = 3,
115 MARS = 4,
120 PLUTO = 9,
121 MOON = 10,
122 SUN = 11,
123 // Solar system barycentre
125 // Earth-Moon system barycentre
127 // Nutations
129 // Librations
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
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.
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
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);
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)
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
436private:
437
438 // Copy assign, NOT defined
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]);
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).
511 };
512 // <group>
519 // </group>
520
521 //# Data
522 // Planetary table data
523 // <group>
524 static std::once_flag theirPlanetaryInitOnceFlag;
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;
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 CountedPtr< Matrix< Double > > mulAber1950(Double time, Double epsilon)
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:524
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:559
static Double WGS84(uInt which)
Position related routines.
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 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:538
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 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:558
static void calcPlanetary(MeasJPL::Files *fil)
Calculate planetary data.
static const Double * mulPosEarthZArg(uInt which)
static std::vector< Polynomial< Double > > calcAberArgDeriv()
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 Vector< String > lineNams
Definition: MeasTable.h:552
static std::vector< Vector< Double > > calcVelocityLSR()
static Bool Source(MDirection &obs, const String &nam)
Get position of source nam (False if not present)
static CountedPtr< Matrix< Double > > mulSC1950(Double time, Double epsilon)
static Double lastIGRF
Definition: MeasTable.h:566
static std::vector< Polynomial< Double > > calcAber1950ArgDeriv()
static const Vector< Double > & velocityLSRGal(uInt which)
Velocity of LSR with respect to galactic centre.
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 CountedPtr< Matrix< Double > > mulSC2000B(Double time, Double epsilon)
static CountedPtr< Matrix< Double > > mulSC2000A(Double time, Double epsilon)
static Double firstIGRF
Definition: MeasTable.h:565
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:553
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:534
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:544
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 CountedPtr< Matrix< Double > > mulPosSunZ(Double time, Double epsilon)
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 const Polynomial< Double > & fundArg1950(uInt which)
static Vector< String > obsNams
Definition: MeasTable.h:545
static const Double * mulPlanSC2000A(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.
static const RotMatrix & posToRect()
Get the rotation matrix to change position from ecliptic to rectangular for Soma et al.
static const Vector< Double > & mulEarthAber(uInt which)
static Vector< String > antResponsesPath
Definition: MeasTable.h:547
static std::vector< Vector< Double > > coefIGRF
Definition: MeasTable.h:569
static const Vector< String > & Lines()
Get list of all frequencies.
static CountedPtr< Matrix< Double > > mulPosSunXY(Double time, Double epsilon)
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 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 Polynomial< Double > calcGMST0()
static std::once_flag theirLinesInitOnceFlag
Spectral line table data.
Definition: MeasTable.h:551
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 std::vector< Polynomial< Double > > calcFundArg00(const Double coeff[6][5])
static const RotMatrix & galToSupergal()
Get the rotation matrix from galactic to supergalactic.
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: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 Bool Observatory(MPosition &obs, const String &nam)
Get position of observatory nam (False if not present)
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 Polynomial< Double > calcGMST00()
static std::once_flag theirPlanetaryConstantsInitOnceFlag
Definition: MeasTable.h:525
static MeasTableMulAber1950 theirMulAber1950
Definition: MeasTable.h:535
static Double time0IGRF
Definition: MeasTable.h:567
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: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 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:530
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::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:546
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:531
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:533
static CountedPtr< Matrix< Double > > mulPosEarthZ(Double time, Double epsilon)
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 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 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