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