[363] | 1 | // tsid.cc
|
---|
| 2 | // Eric Aubourg CEA/DAPNIA/SPP aout 1999
|
---|
| 3 | // adapted from TSid.java, E. Aubourg 1998.
|
---|
| 4 |
|
---|
| 5 | #include "tsid.h"
|
---|
| 6 |
|
---|
| 7 | const double TSid::SIDRATE = 0.9972695677;
|
---|
| 8 | const double TSid::MJDRef = 1545; // 1/1/2000, 12h UT1
|
---|
| 9 |
|
---|
| 10 | TSid::TSid(double lg)
|
---|
| 11 | : longitude(lg)
|
---|
| 12 | {
|
---|
| 13 | InitDUT();
|
---|
| 14 | }
|
---|
| 15 |
|
---|
| 16 | void TSid::InitDUT() {
|
---|
| 17 | dut1[1270.5] = 0.60846; // 1999,3,2 (april, 2 1999)
|
---|
| 18 | dut1[1299.5] = 0.57975; // 1999,4,1
|
---|
| 19 | dut1[1330.5] = 0.55305; // 1999,5,1
|
---|
| 20 | dut1[1360.5] = 0.54229; // 1999,6,1
|
---|
| 21 | dut1[1391.5] = 0.53916; // 1999,7,1
|
---|
| 22 | dut1[1422.5] = 0.52822; // 1999,8,1
|
---|
| 23 | dut1[1452.5] = 0.50279; // 1999,9,1
|
---|
| 24 | dut1[1483.5] = 0.46517; // 1999,10,1
|
---|
| 25 | dut1[1513.5] = 0.42700; // 1999,11,1
|
---|
| 26 | dut1[1544.5] = 0.39116; // 2000,0,1
|
---|
| 27 | dut1[1575.5] = 0.35876; // 2000,1,1
|
---|
| 28 | dut1[1604.5] = 0.30979; // 2000,2,1
|
---|
| 29 | dut1[1635.5] = 0.25614; // 2000,3,1
|
---|
| 30 | }
|
---|
| 31 |
|
---|
| 32 | double TSid::getDUT1(double mjd) {
|
---|
| 33 | map<double, double>::iterator i = dut1.upper_bound(mjd);
|
---|
| 34 | if (i==dut1.end() || i==dut1.begin()) return -1;
|
---|
| 35 | map<double, double>::iterator j = i; j--;
|
---|
| 36 | double x = (mjd - (*j).first) / ((*i).first - (*j).first);
|
---|
| 37 | return (1-x)*(*j).second + x * (*i).second;
|
---|
| 38 | }
|
---|
| 39 |
|
---|
| 40 | void TSid::setLongitude(double lg) {
|
---|
| 41 | longitude = lg;
|
---|
| 42 | }
|
---|
| 43 |
|
---|
| 44 | double TSid::getLST(double mjd) {
|
---|
| 45 | double dut1 = getDUT1(mjd);
|
---|
| 46 | double T = ((mjd-MJDRef) + dut1/86400.)/36525.;
|
---|
| 47 | // T = siecles julien depuis 1/1/2000, 12h UT1
|
---|
| 48 | double GMST = 24110.54841 + 8640184.812866 * T +
|
---|
| 49 | 0.093104 * T * T - 0.0000062 * T * T * T; // a 0h UT1
|
---|
| 50 | GMST += ((mjd-.5 - (int)(mjd-.5))*86400. + dut1);
|
---|
| 51 | double LST = GMST + (longitude/15. * 3600.);
|
---|
| 52 | LST -= 86400 * int(LST/86400);
|
---|
| 53 | if (LST<0) LST += 86400.;
|
---|
| 54 | return LST;
|
---|
| 55 | } |
---|