diff --git a/cxx/mcc_mount_astro_erfa.h b/cxx/mcc_mount_astro_erfa.h index f920d27..16702fa 100644 --- a/cxx/mcc_mount_astro_erfa.h +++ b/cxx/mcc_mount_astro_erfa.h @@ -61,9 +61,9 @@ public: double wavelength = 0.55; // observed wavelength in mkm - MccAngleLAT lat = "00:00:00"_dms; // site latitude - MccAngleLON lon = "00:00:00"_dms; // site longitude - double elev = 0.0; // site elevation (in meters) + MccAngle lat = "00:00:00"_dms; // site latitude + MccAngle lon = "00:00:00"_dms; // site longitude + double elev = 0.0; // site elevation (in meters) mcc::astrom::iers::MccLeapSeconds _leapSeconds{}; mcc::astrom::iers::MccIersBulletinA _bulletinA{}; @@ -104,7 +104,7 @@ public: engine_state_t getState() const { - std::scoped_lock lock{_stateMutex}; + std::lock_guard lock{_stateMutex}; return _currentState; } @@ -164,7 +164,7 @@ public: using real_days_t = std::chrono::duration>; - double ut1, tt = juldate.mjd; + double ut1 = juldate.mjd, tt = juldate.mjd; auto dut1 = _currentState._bulletinA.DUT1(juldate.mjd); @@ -234,6 +234,9 @@ public: if (!pol_pos.has_value()) { return ERROR_BULLETINA_OUT_OF_RANGE; } + const auto arcsec2rad = std::numbers::pi / 180 / 3600; + pol_pos->x *= arcsec2rad; + pol_pos->y *= arcsec2rad; double oaz, ozd, oha, odec, ora; @@ -298,7 +301,7 @@ public: protected: engine_state_t _currentState{}; - std::mutex _stateMutex; + mutable std::mutex _stateMutex; }; } // namespace mcc::astrom::erfa diff --git a/cxx/mcc_mount_telemetry.h b/cxx/mcc_mount_telemetry.h index bff6e9b..038f625 100644 --- a/cxx/mcc_mount_telemetry.h +++ b/cxx/mcc_mount_telemetry.h @@ -84,7 +84,7 @@ public: // computing ... - std::scoped_lock lock{_updateMutex}; + std::lock_guard lock{_updateMutex}; _data = current_data; }; @@ -102,7 +102,7 @@ public: { using self_t = decltype(self); - std::scoped_lock lock{std::forward(self)._updateMutex}; + std::lock_guard lock{std::forward(self)._updateMutex}; return std::move(std::forward(self)._data); } diff --git a/cxx/tests/astrom_test.cpp b/cxx/tests/astrom_test.cpp index d5d8899..c1f8339 100644 --- a/cxx/tests/astrom_test.cpp +++ b/cxx/tests/astrom_test.cpp @@ -2,30 +2,10 @@ #include // #include "../mcc_coord.h" +#include "../mcc_mount_astro_erfa.h" #include "../mcc_traits.h" #include "../mount_astrom.h" -template -concept ncr_c = - std::is_lvalue_reference_v && !std::is_const_v && std::constructible_from, U>; - - -template -concept ae_c = requires(T t) { - requires mcc::traits::mcc_systime_c>; - requires mcc::traits::mcc_output_arg_c>; - // requires ncr_c, double>; - // requires std::constructible_from, double>; -}; - - -struct AE { - // int greg2jul(mcc::traits::mcc_systime_c auto t, double f) {} - int greg2jul(std::chrono::sys_time t, double& f) - { - return 0; - } -}; // BTA coords from maps.yandex.ru: 43.646711, 41.440732 @@ -136,8 +116,10 @@ int main(int argc, char* argv[]) now = std::chrono::system_clock::now(); for (auto& el : mjds) { - st = erfa::eraAtco13(1.343523, 0.32352345, 0.0, 0.0, 0.0, 0.0, ERFA_DJM0, el, 0.041, elong, phi, 2100.0, 0.0, - 0.0, 700.0, 10.0, 0.8, 0.5, &aob, &zob, &hob, &dob, &rob, &eo); + st = mcc::astrom::erfa::eraAtco13(1.343523, 0.32352345, 0.0, 0.0, 0.0, 0.0, ERFA_DJM0, el, 0.041, elong, phi, + 2100.0, 0.0, 0.0, 700.0, 10.0, 0.8, 0.5, &aob, &zob, &hob, &dob, &rob, &eo); + // st = erfa::eraAtco13(1.343523, 0.32352345, 0.0, 0.0, 0.0, 0.0, ERFA_DJM0, el, 0.041, elong, phi, 2100.0, 0.0, + // 0.0, 700.0, 10.0, 0.8, 0.5, &aob, &zob, &hob, &dob, &rob, &eo); } std::cout << std::format( "comp time for {} coordinate transf = {}\n", N, @@ -161,8 +143,32 @@ int main(int argc, char* argv[]) std::cout << ra.sexagesimal(false, 4) << "\n"; - std::cout << "\n\n\n"; - std::cout << "ae_c = " << std::boolalpha << ae_c << "\n"; + + std::cout << "\n\n\n\n"; + + mcc::astrom::erfa::MccMountAstromEngineERFA::engine_state_t state; + state.lon = 41.440732_degs; + state.lat = 43.646711_degs; + state.elev = 2100.0; + + state.meteo = {10.0, 0.5, 1010.0}; + + + mcc::astrom::erfa::MccMountAstromEngineERFA erfa(state); + mcc::astrom::erfa::MccMountAstromEngineERFA::juldate_t jd{60861.72}; + + now = std::chrono::system_clock::now(); + erfa.greg2jul(now, jd); + std::cout << "MJD(" << now << ") = " << jd.mjd << "\n"; + + + mcc::MccAngle ra1{"10:00:00", mcc::mcc_hms}, dec1{"68:25:10.43"}, ra_o, dec_o, ha1, az1, alt1; + + std::cout << "RA = " << ra1.sexagesimal(true) << ", DEC = " << dec1.sexagesimal() << "\n"; + auto res = erfa.icrs2obs(ra1, dec1, 0, 0, 0, jd, ra_o, dec_o, ha1, az1, alt1, eo); + std::cout << "ret code (icrs2obs) = " << erfa.errorString(res) << "\n"; + std::cout << "alt = " << alt1.sexagesimal() << "\n"; + std::cout << "az = " << az1.sexagesimal() << "\n"; return ecode; }