/usr/include/casacore/measures/Measures/SolarPos.h is in casacore-dev 2.2.0-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 | //# SolarPos.h: Solar position class
//# Copyright (C) 1995,1996,1997,1998
//# Associated Universities, Inc. Washington DC, USA.
//#
//# This library is free software; you can redistribute it and/or modify it
//# under the terms of the GNU Library General Public License as published by
//# the Free Software Foundation; either version 2 of the License, or (at your
//# option) any later version.
//#
//# This library is distributed in the hope that it will be useful, but WITHOUT
//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
//# License for more details.
//#
//# You should have received a copy of the GNU Library General Public License
//# along with this library; if not, write to the Free Software Foundation,
//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
//#
//# Correspondence concerning AIPS++ should be addressed as follows:
//# Internet email: aips2-request@nrao.edu.
//# Postal address: AIPS++ Project Office
//# National Radio Astronomy Observatory
//# 520 Edgemont Road
//# Charlottesville, VA 22903-2475 USA
//#
//#
//# $Id$
#ifndef MEASURES_SOLARPOS_H
#define MEASURES_SOLARPOS_H
//# Includes
#include <casacore/casa/aips.h>
#include <casacore/casa/Quanta/MVPosition.h>
namespace casacore { //# NAMESPACE CASACORE - BEGIN
// <summary> Solar position class and calculations </summary>
// <use visibility=export>
// <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="tMeasMath" demos="">
// </reviewed>
// <prerequisite>
// <li> <linkto class=Measure>Measure</linkto> class,
// especially <linkto class=MEpoch>MEpoch</linkto>
// <li> <linkto class=MeasData>MeasData</linkto> class for constants
// </prerequisite>
//
// <etymology>
// SolarPos from Solar Position
// </etymology>
//
// <synopsis>
// SolarPos forms the class for Solar Position calculations. It is a simple
// container with the selected method, and the mean epoch.<br>
// The method is selected from one of the following:
// <ul>
// <li> SolarPos::STANDARD (at 1995/09/04 the IAU1980 definition)
// <li> SolarPos::NONE
// </ul>
// Epochs can be specified as the MJD (with defined constants MeasData::MJD2000
// and MeasData::MJDB1950 or the actual MJD),
// leading to the following constructors:
// <ul>
// <li> SolarPos() default; assuming JD2000, IAU1980
// <li> SolarPos(method) assuming the correct default epoch of
// JD2000
// <li> SolarPos(method,epoch) with epoch Double(MJD)
// </ul>
// Actual SolarPos for a certain Epoch is calculated by the () operator
// as SolarPos(epoch), with epoch Double MJD, as an MVPosition vector.<br>
// It returns the geocentric position of the heliocentre in rectangular
// coordinates in AU.<br>
// The derivative (d<sup>-1</sup>) can be obtained as well by
// derivative(epoch), baryEarthDerivative() and barySunDerivative().<br>
// The Earth's and solar barycentric position can be obtained by the
// members <src>baryEarth</src> and <src>barySun</src>.
// The following details can be set with the
// <linkto class=Aipsrc>Aipsrc</linkto> mechanism:
// <ul>
// <li> measures.solarpos.d_interval: approximation interval as time
// (fraction of days is default unit) over which linear approximation
// is used
// <li> measures.solarpos.b_usejpl: use the JPL database for solar position.
// Else analytical expression, relative error about 10<sup>-9</sup>
// Note that the JPL database to be used can be set with
// measures.jpl.ephemeris (at the moment of writing DE200 (default),
// or DE405)
// </ul>
// Reference: M. Soma et al., Cel. Mech. 41 (1988), 389;
// E.M. Standish, Astron. Astroph. 114 (1982), 297.
// </synopsis>
//
// <example>
// </example>
//
// <motivation>
// To calculate the solar/Earth positions for gravitational deflection.
// An alternate route could have been
// a global function, but having a simple container allows
// caching of some calculations for speed.<br>
// Using MJD (JD-2400000.5) rather than JD is for precision reasons.
// </motivation>
//
// <todo asof="1996/02/18">
// </todo>
class SolarPos {
public:
//# Constants
// Interval to be used for linear approximation (in days)
static const Double INTV;
//# Enumerations
// Types of known SolarPos calculations (at 1995/09/04 STANDARD == IAU1980)
enum SolarPosTypes {STANDARD,NONE};
//# Constructors
// Default constructor, generates default J2000 SolarPos identification
SolarPos();
// Copy constructor
SolarPos(const SolarPos &other);
// Constructor with type
SolarPos(SolarPosTypes type);
// Copy assignment
SolarPos &operator=(const SolarPos &other);
//# Destructor
~SolarPos();
//# Operators
// Operator () calculates the geocentric Solar Position in AU
const MVPosition&operator()(Double epoch);
//# General Member Functions
// <group>
// Return derivatives of SolarPos (d<sup>-1</sup>)
const MVPosition &derivative (Double epoch);
const MVPosition &baryEarthDerivative (Double epoch);
const MVPosition &barySunDerivative (Double epoch);
// </group>
// Barycentric position of Earth
const MVPosition &baryEarth(Double epoch);
// Barycentric position of Sun
const MVPosition &barySun(Double epoch);
// Re-initialise SolarPos object
// <group>
void init();
void init(SolarPosTypes type);
// </group>
// Refresh calculations
void refresh();
private:
//# Data menbers
// Method to be used
SolarPosTypes method;
// Check epoch for linear approximation
Double checkEpoch;
Double checkSunEpoch;
// Cached calculated Earth positions
Double eval[3];
// Cached derivatives
Double deval[3];
// Cached calculated Sun positions
Double sval[3];
// Cached derivatives
Double dsval[3];
// To be able to use references in simple calculations, results are calculated
// in a circular buffer.
// Current buffer pointer
Int lres;
// Last calculation
MVPosition result[6];
// Interpolation interval
static uInt interval_reg;
// JPL use
static uInt usejpl_reg;
//# Member functions
// Copy
void copy(const SolarPos &other);
// Fill an empty copy
void fill();
// Calculate heliocentric Earth position for time t
void calcEarth(Double t);
// Calculate heliocentric barycentre position
void calcSun(Double t);
};
} //# NAMESPACE CASACORE - END
#endif
|