diff --git a/mcc/mcc_ccte_erfa_new.h b/mcc/mcc_ccte_erfa_new.h index 99ff537..c8aab44 100644 --- a/mcc/mcc_ccte_erfa_new.h +++ b/mcc/mcc_ccte_erfa_new.h @@ -282,11 +282,32 @@ public: error_t obs2icrs(mcc_coord_pair_c auto const& xy_obs, MccSkyRADEC_ICRS* radec_icrs) {} - error_t equationOrigins(const mcc_julday_c auto& MJD, mcc_angle_c auto* EO) + error_t equationOrigins(const mcc_julday_c auto& mjd, mcc_angle_c auto* eo) { - if (EO == nullptr) { + if (eo == nullptr) { return MccCCTE_ERFAErrorCode::ERROR_NULLPTR; } + + error_t ret = MccCCTE_ERFAErrorCode::ERROR_OK; + + std::lock_guard lock{*_stateMutex}; + + using real_days_t = std::chrono::duration>; + + auto tai_utc = _currentState._leapSeconds[mjd]; + if (tai_utc.has_value()) { + double tt = mjd; + tt += std::chrono::duration_cast(tai_utc.value()).count(); + + auto tt_tai = _currentState._bulletinA.TT_TAI(); + tt += +std::chrono::duration_cast(tt_tai).count(); + + *eo = eraEo06a(ERFA_DJM0, tt); + } else { + ret = MccCCTE_ERFAErrorCode::ERROR_LEAPSECONDS_OUT_OF_RANGE; + } + + return ret; } // refraction