...
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
|
||||
|
||||
#include <mcc/mcc_pcm_construct.h>
|
||||
#include <mcc/mcc_pcm_fit.h>
|
||||
|
||||
struct pcm_res_t {
|
||||
double pcmX, pcmY;
|
||||
@@ -14,9 +15,11 @@ int main()
|
||||
{
|
||||
using pcm_t = mcc::impl::MccDefaultPCM<MOUNT_TYPE>;
|
||||
using pcm_const_t = mcc::impl::MccPCMConstructor<MOUNT_TYPE>;
|
||||
using pcm_fit_t = mcc::impl::MccPCMFitter<MOUNT_TYPE>;
|
||||
|
||||
pcm_t pcm;
|
||||
pcm_const_t pcm_const;
|
||||
pcm_fit_t pcm_fitter;
|
||||
|
||||
pcm_t::pcm_data_t pcm_data{.type = mcc::impl::MccDefaultPCMType::PCM_TYPE_GEOMETRY,
|
||||
.siteLatitude = 43.6466666667_degs,
|
||||
@@ -37,9 +40,12 @@ int main()
|
||||
size_t decM = 10; // number of B-spline inner knots along DEC-axis
|
||||
|
||||
double ha_step = 360.0_degs / (haM - 1);
|
||||
pcm_data.bspline.knotsX.resize(haM); // [0, 360]
|
||||
for (size_t i = 0; i < haM; ++i) {
|
||||
pcm_data.bspline.knotsX[i] = i * ha_step;
|
||||
pcm_data.bspline.knotsX.resize(haM);
|
||||
// for (size_t i = 0; i < haM; ++i) { // [0, 360]
|
||||
// pcm_data.bspline.knotsX[i] = i * ha_step;
|
||||
// }
|
||||
for (size_t i = 0; i < haM; ++i) { // [-180, 180]
|
||||
pcm_data.bspline.knotsX[i] = i * ha_step - std::numbers::pi;
|
||||
}
|
||||
|
||||
double dec_start = -35.0_degs;
|
||||
@@ -100,7 +106,8 @@ int main()
|
||||
|
||||
|
||||
// add 'noise'
|
||||
double sigma = 24.3248792_arcsecs / 2.355;
|
||||
// double sigma = 24.3248792_arcsecs / 2.355;
|
||||
double sigma = 4.3248792_arcsecs;
|
||||
|
||||
std::random_device rd{};
|
||||
std::mt19937 gen{rd()};
|
||||
@@ -115,14 +122,18 @@ int main()
|
||||
resX[i] = ha[i] - encX[i];
|
||||
resY[i] = dec[i] - encY[i];
|
||||
|
||||
hadec.from(mcc::impl::MccSkyHADEC_OBS{(double)ha[i], (double)dec[i]});
|
||||
// hadec.from(mcc::impl::MccSkyHADEC_OBS{(double)ha[i], (double)dec[i]});
|
||||
|
||||
pcm_const.addPoint(hadec, mcc::impl::MccGenXY{(double)encX[i], (double)encY[i]});
|
||||
// pcm_const.addPoint(hadec, mcc::impl::MccGenXY{(double)encX[i], (double)encY[i]});
|
||||
|
||||
pcm_fitter.addPoint((double)ha[i], (double)dec[i], (double)encX[i], (double)encY[i],
|
||||
mcc::impl::MccCelestialCoordEpoch{});
|
||||
}
|
||||
|
||||
pcm_t::pcm_data_t fit_pcm_data{.type = pcm_data.type, .siteLatitude = pcm_data.siteLatitude};
|
||||
|
||||
auto r = pcm_const.computeModel(fit_pcm_data);
|
||||
// auto r = pcm_const.computeModel(fit_pcm_data);
|
||||
auto r = pcm_fitter.computeModel(fit_pcm_data);
|
||||
if (r.error) {
|
||||
std::println("error: {}", r.error.message());
|
||||
return 1;
|
||||
@@ -165,8 +176,10 @@ int main()
|
||||
mcc::impl::MccAngle(pcm_data.geomCoefficients.forkFlexure).arcsecs());
|
||||
|
||||
|
||||
std::println("\n\n{}", r.colon_res);
|
||||
std::println("\n\n{}", r.colat_res);
|
||||
// std::println("\n\n{}", r.colon_res);
|
||||
// std::println("\n\n{}", r.colat_res);
|
||||
std::println("\n\n{}", r.model_colonRES);
|
||||
std::println("\n\n{}", r.model_colatRES);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user