80 lines
2.3 KiB
C++
80 lines
2.3 KiB
C++
#include <fstream>
|
|
#include <iostream>
|
|
|
|
#include "../mount_astrom.h"
|
|
|
|
|
|
// BTA coords from maps.yandex.ru: 43.646711, 41.440732
|
|
|
|
int main(int argc, char* argv[])
|
|
{
|
|
int ecode = 0;
|
|
|
|
if (argc < 2) {
|
|
std::cerr << "Usage: " << argv[0] << " bulletinA-filename\n";
|
|
exit(1);
|
|
}
|
|
|
|
std::ifstream ist(argv[1]);
|
|
if (!ist) {
|
|
std::cerr << "Invalid filename!\n";
|
|
exit(1);
|
|
}
|
|
|
|
|
|
mcc::astrom::MccIersBulletinA bullA;
|
|
bullA.dump(std::cout);
|
|
|
|
std::cout << "\n\n";
|
|
|
|
mcc::astrom::MccLeapSeconds lps;
|
|
lps.dump(std::cout);
|
|
|
|
std::cout << "\n\n";
|
|
|
|
bool ok = bullA.load(ist);
|
|
bullA.dump(std::cerr);
|
|
|
|
ist.close();
|
|
|
|
std::cout << "\n\n\n------------------\n";
|
|
|
|
constexpr auto nnn = mcc::astrom::MccLeapSeconds::real_secs_t{std::numeric_limits<double>::quiet_NaN()};
|
|
|
|
auto now = std::chrono::system_clock::now();
|
|
// std::cout << "LEAP SECS for now: " << lps[now].value_or(std::numeric_limits<double>::quiet_NaN()) << "\n";
|
|
std::cout << "LEAP SECS for now: " << lps[now].value_or(nnn) << "\n";
|
|
|
|
// std::cout << "DUT1 for now: " << bullA.DUT1(now).value_or(std::numeric_limits<double>::quiet_NaN()) << " (" <<
|
|
// now
|
|
std::cout << "DUT1 for now: " << bullA.DUT1(now).value_or(nnn) << " (" << now << ")\n";
|
|
|
|
double mjd = 61077.4;
|
|
|
|
// std::cout << "DUT1 for MJD = " << mjd << ": " <<
|
|
// bullA.DUT1(mjd).value_or(std::numeric_limits<double>::quiet_NaN())
|
|
std::cout << "DUT1 for MJD = " << mjd << ": " << bullA.DUT1(mjd).value_or(nnn) << "\n";
|
|
|
|
|
|
auto st = mcc::astrom::mcc_julday(now, mjd);
|
|
std::cout << "MJD for now: " << std::setprecision(19) << mjd << " (" << now << ")\n";
|
|
|
|
// double pres = 786.6;
|
|
// double temp = 0.0;
|
|
// double hum = 0.8;
|
|
// double A, B;
|
|
|
|
// erfa::eraRefco(pres, temp, hum, 0.5, &A, &B);
|
|
// const double rr = 180.0 / std::numbers::pi * 60.0;
|
|
// std::cout << "A(arcmin) = " << A * rr << "; B(arcmin) = " << B * rr << "\n";
|
|
|
|
using namespace std::chrono_literals;
|
|
double stm = mcc::astrom::mcc_time_to_alt_limit(10.0, "06:30:00.0", "00:00:00.0", 43.646711, 41.440732,
|
|
std::chrono::system_clock::now(), 0.041s, 32.184s, 37.0s);
|
|
|
|
// auto stm_d = mcc::astrom::mcc_chrono_radians{stm};
|
|
std::cout << "STM: " << stm * 12.0 / std::numbers::pi * 60.0 << " minutes\n";
|
|
|
|
return ecode;
|
|
}
|