This commit is contained in:
2026-04-16 18:42:11 +03:00
parent a8a1d9a763
commit 3373bedb39
4 changed files with 268 additions and 84 deletions

View File

@@ -2,6 +2,7 @@
#include <print>
#include <mcc/mcc_pcm_construct.h>
#include <mcc/mcc_pcm_fit.h>
static constexpr mcc::MccMountType MOUNT_TYPE{mcc::MccMountType::CROSSAXIS_TYPE};
@@ -10,6 +11,8 @@ using namespace mcc::impl;
int main(int narg, char* argv[])
{
MccPCMConstructor<MOUNT_TYPE> pcm_cstr;
mcc::impl::MccPCMFitter<MOUNT_TYPE> pcm_fitter;
// MccSkyPoint sp;
MccSkyHADEC_OBS hadec;
MccGenXY xy;
@@ -52,6 +55,8 @@ int main(int narg, char* argv[])
std::println("READ DATA:");
MccCelestialCoordEpoch ep = MccCelestialCoordEpoch::now();
size_t i = 0;
while (!fst.eof()) {
// x - degs, y -degs, diff_x - arcsecs, diff_y - arcsecs
@@ -63,29 +68,38 @@ int main(int narg, char* argv[])
tag_ha = x + diff_x / 3600.0;
tag_dec = y + diff_y / 3600.0;
hadec = MccSkyHADEC_OBS{MccAngleHA_OBS(tag_ha, mcc_degrees), MccAngleDEC_OBS(tag_dec, mcc_degrees)};
hadec = MccSkyHADEC_OBS{MccAngleHA_OBS(tag_ha, mcc_degrees), MccAngleDEC_OBS(tag_dec, mcc_degrees), ep};
// sp.from(hadec);
xy = MccGenXY(MccAngleX(x, mcc_degrees), MccAngleY(y, mcc_degrees));
xy = MccGenXY(MccAngleX(x, mcc_degrees), MccAngleY(y, mcc_degrees), ep);
std::println("\t[encX = {:10.6f} encY = {:10.6f} HA = {} DEC = {}]", xy.x().degrees(), xy.y().degrees(),
hadec.x().sexagesimal(true), hadec.y().sexagesimal());
// pcm_cstr.addPoint(sp, xy);
pcm_cstr.addPoint(hadec, xy);
pcm_fitter.addPoint(hadec, xy);
}
fst.close();
auto r = pcm_cstr.computeModel(fit_pcm_data);
auto fr = pcm_fitter.computeModel(fit_pcm_data);
if (r.error) {
std::println("error: {}", r.error.message());
// if (r.error) {
// std::println("error: {}", r.error.message());
// return 1;
// }
if (fr.error) {
std::println("error: {}", fr.error.message());
return 1;
}
std::println("\n\n{:*^40}\n", " FITTED RESULT (TYPE = GEOMETRY) ");
std::println("\tNUM OF ITERS: {}", r.final_iter);
// std::println("\tNUM OF ITERS: {}", r.final_iter);
std::println("\tNUM OF ITERS: {}", fr.final_iter);
std::println("FITTED COEFFS:");
std::println("X0 = {}, Y0 = {}", MccAngleFancyString(fit_pcm_data.geomCoefficients.zeroPointX),
@@ -100,39 +114,61 @@ int main(int narg, char* argv[])
std::println("\n\n{:*^40}\n", " FITTED DIFFS ");
auto tab = pcm_cstr.getTable();
for (size_t i = 0; i < pcm_cstr.numberOfPoints(); ++i) {
// for (size_t i = 0; i < pcm_cstr.numberOfPoints(); ++i) {
// std::println("{} {} {} {:6.2f}% ({:5.3f}) {} {} {:6.2f}% ({:5.3f}) (HA = {} DEC = {})", i,
// MccAngleFancyString(tab.colon_res[i]), MccAngleFancyString(r.model_colon[i]),
// std::abs((tab.colon_res[i] - r.model_colon[i]) / tab.colon_res[i]) * 100.0, r.colon_weight[i],
// MccAngleFancyString(tab.colat_res[i]), MccAngleFancyString(r.model_colat[i]),
// std::abs((tab.colat_res[i] - r.model_colat[i]) / tab.colat_res[i]) * 100.0, r.colat_weight[i],
// MccAngle(tab.hw_colon[i]).sexagesimal(true), MccAngle(tab.hw_colat[i]).sexagesimal());
// }
auto pcm_tab = pcm_fitter.getPCMTable();
for (size_t i = 0; i < pcm_fitter.numberOfPoints(); ++i) {
std::println("{} {} {} {:6.2f}% ({:5.3f}) {} {} {:6.2f}% ({:5.3f}) (HA = {} DEC = {})", i,
MccAngleFancyString(tab.colon_res[i]), MccAngleFancyString(r.model_colon[i]),
std::abs((tab.colon_res[i] - r.model_colon[i]) / tab.colon_res[i]) * 100.0, r.colon_weight[i],
MccAngleFancyString(tab.colat_res[i]), MccAngleFancyString(r.model_colat[i]),
std::abs((tab.colat_res[i] - r.model_colat[i]) / tab.colat_res[i]) * 100.0, r.colat_weight[i],
MccAngle(tab.hw_colon[i]).sexagesimal(true), MccAngle(tab.hw_colat[i]).sexagesimal());
MccAngleFancyString(pcm_tab[i].res.x()), MccAngleFancyString(fr.model_colonRES[i]),
std::abs(fr.colon_err[i]) / pcm_tab[i].res.x() * 100.0, fr.colon_weight[i],
MccAngleFancyString(pcm_tab[i].res.y()), MccAngleFancyString(fr.model_colatRES[i]),
std::abs(fr.colat_err[i]) / pcm_tab[i].res.y() * 100.0, fr.colat_weight[i],
pcm_tab[i].hw.x().sexagesimal(true), pcm_tab[i].hw.y().sexagesimal());
}
std::println("\n\n{:*^40}\n", " FITTED RESULT (TYPE = BSPLINE) ");
fit_pcm_data.type = MccDefaultPCMType::PCM_TYPE_BSPLINE;
r = pcm_cstr.computeModel(fit_pcm_data);
fr = pcm_fitter.computeModel(fit_pcm_data);
if (r.error) {
std::println("error: {}", r.error.message());
std::println("b-spline error: {}", r.bspline_fit_err);
// if (r.error) {
// std::println("error: {}", r.error.message());
// std::println("b-spline error: {}", r.bspline_fit_err);
// return 1;
// }
if (fr.error) {
std::println("error: {}", fr.error.message());
std::println("b-spline error: {}", fr.bspline_fit_err);
return 1;
}
std::println("\n\n{:*^40}\n", " FITTED DIFFS ");
for (size_t i = 0; i < pcm_cstr.numberOfPoints(); ++i) {
std::println("{} {} {} {:6.2f}% {} {} {:6.2f}% (HA = {} DEC = {})", i,
MccAngleFancyString(tab.colon_res[i]), MccAngleFancyString(r.model_colon[i]),
std::abs((tab.colon_res[i] - r.model_colon[i]) / tab.colon_res[i]) * 100.0,
MccAngleFancyString(tab.colat_res[i]), MccAngleFancyString(r.model_colat[i]),
std::abs((tab.colat_res[i] - r.model_colat[i]) / tab.colat_res[i]) * 100.0,
MccAngle(tab.hw_colon[i]).sexagesimal(true), MccAngle(tab.hw_colat[i]).sexagesimal());
}
// for (size_t i = 0; i < pcm_cstr.numberOfPoints(); ++i) {
// std::println("{} {} {} {:6.2f}% {} {} {:6.2f}% (HA = {} DEC = {})", i,
// MccAngleFancyString(tab.colon_res[i]), MccAngleFancyString(r.model_colon[i]),
// std::abs((tab.colon_res[i] - r.model_colon[i]) / tab.colon_res[i]) * 100.0,
// MccAngleFancyString(tab.colat_res[i]), MccAngleFancyString(r.model_colat[i]),
// std::abs((tab.colat_res[i] - r.model_colat[i]) / tab.colat_res[i]) * 100.0,
// MccAngle(tab.hw_colon[i]).sexagesimal(true), MccAngle(tab.hw_colat[i]).sexagesimal());
// }
for (size_t i = 0; i < pcm_fitter.numberOfPoints(); ++i) {
std::println("{} {} {} {:6.2f}% ({:5.3f}) {} {} {:6.2f}% ({:5.3f}) (HA = {} DEC = {})", i,
MccAngleFancyString(pcm_tab[i].res.x()), MccAngleFancyString(fr.model_colonRES[i]),
std::abs(fr.colon_err[i]) / pcm_tab[i].res.x() * 100.0, fr.colon_weight[i],
MccAngleFancyString(pcm_tab[i].res.y()), MccAngleFancyString(fr.model_colatRES[i]),
std::abs(fr.colat_err[i]) / pcm_tab[i].res.y() * 100.0, fr.colat_weight[i],
pcm_tab[i].hw.x().sexagesimal(true), pcm_tab[i].hw.y().sexagesimal());
}
return 0;