...
This commit is contained in:
@@ -273,10 +273,8 @@ public:
|
||||
{
|
||||
double ra_obs, dec_obs, az, zd, ha;
|
||||
|
||||
MccCelestialCoordEpoch ep;
|
||||
ep.fromMJD((radec_obs->MJD()));
|
||||
|
||||
auto err = icrsToObs(radec_icrs.x(), radec_icrs.y(), ep, &ra_obs, &dec_obs, &ha, &az, &zd, obj_params);
|
||||
auto err =
|
||||
icrsToObs(radec_icrs.x(), radec_icrs.y(), radec_icrs.epoch(), &ra_obs, &dec_obs, &ha, &az, &zd, obj_params);
|
||||
|
||||
if (!err) {
|
||||
if (radec_obs) {
|
||||
@@ -285,7 +283,7 @@ public:
|
||||
}
|
||||
|
||||
if (azzd) {
|
||||
azzd->setMJD(radec_obs->MJD());
|
||||
azzd->setEpoch(radec_obs->epoch());
|
||||
azzd->setX(az);
|
||||
azzd->setY(zd);
|
||||
}
|
||||
@@ -323,10 +321,8 @@ public:
|
||||
{
|
||||
double ra_app, dec_app, az, zd, ha;
|
||||
|
||||
MccCelestialCoordEpoch ep;
|
||||
ep.fromMJD((radec_app->MJD()));
|
||||
|
||||
auto err = icrsToApp(radec_icrs.x(), radec_icrs.y(), ep, &ra_app, &dec_app, &ha, &az, &zd, obj_params);
|
||||
auto err =
|
||||
icrsToApp(radec_icrs.x(), radec_icrs.y(), radec_icrs.epoch(), &ra_app, &dec_app, &ha, &az, &zd, obj_params);
|
||||
|
||||
if (!err) {
|
||||
if (radec_app) {
|
||||
@@ -335,7 +331,7 @@ public:
|
||||
}
|
||||
|
||||
if (azzd) {
|
||||
azzd->setMJD(radec_app->MJD());
|
||||
azzd->setEpoch(radec_app->epoch());
|
||||
azzd->setX(az);
|
||||
azzd->setY(zd);
|
||||
}
|
||||
@@ -364,10 +360,7 @@ public:
|
||||
{
|
||||
double ra, dec;
|
||||
|
||||
MccCelestialCoordEpoch ep;
|
||||
ep.fromMJD((xy_obs->MJD()));
|
||||
|
||||
auto err = obsToICRS(xy_obs.pair_kind, ep, xy_obs.x(), xy_obs.y(), &ra, &dec);
|
||||
auto err = obsToICRS(xy_obs.pair_kind, xy_obs.epoch(), xy_obs.x(), xy_obs.y(), &ra, &dec);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
@@ -392,6 +385,22 @@ public:
|
||||
}
|
||||
|
||||
|
||||
error_t appToICRS(mcc_coord_pair_c auto const& xy_app, MccSkyRADEC_ICRS* radec_icrs)
|
||||
{
|
||||
double ra, dec;
|
||||
|
||||
auto err = appToICRS(xy_app.pair_kind, xy_app.epoch(), xy_app.x(), xy_app.y(), &ra, &dec);
|
||||
if (!err) {
|
||||
if (radec_icrs) {
|
||||
radec_icrs->setX(ra);
|
||||
radec_icrs->setY(dec);
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
error_t equationOrigins(const mcc_julday_c auto& mjd, mcc_angle_c auto* eo)
|
||||
{
|
||||
if (eo == nullptr) {
|
||||
@@ -437,10 +446,35 @@ public:
|
||||
}
|
||||
|
||||
// Zobs must be observed zenithal distance (Zapp = Zobs + dZ -- corrected (in vacuo) zenithal distance)
|
||||
template <typename ZAPP_T = std::nullptr_t>
|
||||
error_t refractionCorrection(mcc_angle_c auto Zobs, mcc_angle_c auto* dZ, ZAPP_T Zapp = nullptr)
|
||||
requires(std::is_null_pointer_v<ZAPP_T> ||
|
||||
(std::is_pointer_v<ZAPP_T> && mcc_angle_c<std::remove_pointer_t<ZAPP_T>>))
|
||||
{
|
||||
error_t ret = MccCCTE_ERFAErrorCode::ERROR_OK;
|
||||
|
||||
if (dZ == nullptr) {
|
||||
return MccCCTE_ERFAErrorCode::ERROR_NULLPTR;
|
||||
}
|
||||
|
||||
refract_model_t rmodel;
|
||||
ret = refractionModel(&rmodel);
|
||||
|
||||
if (!ret) {
|
||||
ret = refractionCorrection(rmodel, Zobs, dZ, Zapp);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Zobs must be observed zenithal distance (Zapp = Zobs + dZ -- corrected (in vacuo) zenithal distance)
|
||||
template <typename ZAPP_T = std::nullptr_t>
|
||||
error_t refractionCorrection(const refract_model_t& rmodel,
|
||||
mcc_angle_c auto Zobs,
|
||||
mcc_angle_c auto* dZ,
|
||||
mcc_angle_c auto* Zapp = nullptr)
|
||||
ZAPP_T Zapp = nullptr)
|
||||
requires(std::is_null_pointer_v<ZAPP_T> ||
|
||||
(std::is_pointer_v<ZAPP_T> && mcc_angle_c<std::remove_pointer_t<ZAPP_T>>))
|
||||
{
|
||||
error_t ret = MccCCTE_ERFAErrorCode::ERROR_OK;
|
||||
|
||||
@@ -456,19 +490,47 @@ public:
|
||||
*dZ = rmodel.refa * tanZ + rmodel.refb * tanZ * tanZ * tanZ;
|
||||
}
|
||||
|
||||
if (Zapp != nullptr) {
|
||||
if constexpr (!std::is_null_pointer_v<ZAPP_T>) {
|
||||
*Zapp = Zobs + *dZ;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
// Zapp must be topocentric (in vacuo) zenithal distance (Zobs = Zapp - dZ -- observed, i.e. affected by refraction,
|
||||
// zenithal distance)
|
||||
template <typename ZOBS_T = std::nullptr_t>
|
||||
error_t refractionReverseCorrection(mcc_angle_c auto Zapp, mcc_angle_c auto* dZ, ZOBS_T Zobs = nullptr)
|
||||
requires(std::is_null_pointer_v<ZOBS_T> ||
|
||||
(std::is_pointer_v<ZOBS_T> && mcc_angle_c<std::remove_pointer_t<ZOBS_T>>))
|
||||
{
|
||||
error_t ret = MccCCTE_ERFAErrorCode::ERROR_OK;
|
||||
|
||||
if (dZ == nullptr) {
|
||||
return MccCCTE_ERFAErrorCode::ERROR_NULLPTR;
|
||||
}
|
||||
|
||||
refract_model_t rmodel;
|
||||
ret = refractionModel(&rmodel);
|
||||
|
||||
if (!ret) {
|
||||
ret = refractionReverseCorrection(rmodel, Zapp, dZ, Zobs);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
// Zapp must be topocentric (in vacuo) zenithal distance (Zobs = Zapp - dZ -- observed, i.e. affected by refraction,
|
||||
// zenithal distance)
|
||||
template <typename ZOBS_T = std::nullptr_t>
|
||||
error_t refractionReverseCorrection(const refract_model_t& rmodel,
|
||||
mcc_angle_c auto Zapp,
|
||||
mcc_angle_c auto* dZ,
|
||||
mcc_angle_c auto* Zobs = nullptr)
|
||||
ZOBS_T Zobs = nullptr)
|
||||
requires(std::is_null_pointer_v<ZOBS_T> ||
|
||||
(std::is_pointer_v<ZOBS_T> && mcc_angle_c<std::remove_pointer_t<ZOBS_T>>))
|
||||
{
|
||||
error_t ret = MccCCTE_ERFAErrorCode::ERROR_OK;
|
||||
|
||||
@@ -489,7 +551,7 @@ public:
|
||||
(1.0 + rmodel.refa + tanZ2 * (rmodel.refa + b3) + b3 * tanZ2 * tanZ2);
|
||||
}
|
||||
|
||||
if (Zobs != nullptr) {
|
||||
if constexpr (!std::is_null_pointer_v<ZOBS_T>) {
|
||||
*Zobs = Zapp - *dZ;
|
||||
}
|
||||
|
||||
@@ -600,7 +662,8 @@ protected:
|
||||
// NOTE: according to definition of astronomical azimuth it is counted from the South through the West, but
|
||||
// in the ERFA the azimuth is counted from the North through the East!!!
|
||||
//
|
||||
*az = MccAngle(a + std::numbers::pi).normalize<MccAngle::NORM_KIND_0_360>();
|
||||
*az = MccAngle(a - std::numbers::pi).normalize<MccAngle::NORM_KIND_0_360>();
|
||||
// *az = MccAngle(a + std::numbers::pi).normalize<MccAngle::NORM_KIND_0_360>();
|
||||
}
|
||||
|
||||
if (zd) {
|
||||
|
||||
Reference in New Issue
Block a user