This commit is contained in:
2026-03-26 17:40:36 +03:00
parent 4b0569bfea
commit a8275f3786
6 changed files with 289 additions and 21 deletions

View File

@@ -0,0 +1,90 @@
#include <fstream>
#include <print>
#include <mcc/mcc_pcm_construct.h>
static constexpr mcc::MccMountType MOUNT_TYPE{mcc::MccMountType::CROSSAXIS_TYPE};
using namespace mcc::impl;
int main(int narg, char* argv[])
{
MccPCMConstructor<MOUNT_TYPE> pcm_cstr;
// MccSkyPoint sp;
MccSkyHADEC_OBS hadec;
MccGenXY xy;
MccDefaultPCM<MOUNT_TYPE>::pcm_data_t fit_pcm_data;
std::ifstream fst;
std::string fname = "z1000_pcm_measu.data";
if (narg > 1) {
fname = argv[1];
}
fst.open(fname);
if (!fst.is_open()) {
std::println("Cannot open file {}", fname);
return 1;
}
double x, y, diff_x, diff_y, tag_ha, tag_dec;
std::println("READ DATA:");
size_t i = 0;
while (!fst.eof()) {
// x - degs, y -degs, diff_x - arcsecs, diff_y - arcsecs
fst >> x >> y >> diff_x >> diff_y;
std::println("\t{}\t{} {} {} {}", i++, x, y, diff_x, diff_y);
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)};
// sp.from(hadec);
xy = MccGenXY(MccAngleX(x, mcc_degrees), MccAngleY(y, mcc_degrees));
// pcm_cstr.addPoint(sp, xy);
pcm_cstr.addPoint(hadec, xy);
}
fst.close();
auto r = pcm_cstr.computeModel(fit_pcm_data);
if (r.error) {
std::println("error: {}", r.error.message());
return 1;
}
std::println("\n\n{:*^40}\n", " FITTED RESULT ");
std::println("\tNUM OF ITERS: {}", r.final_iter);
std::println("FITTED COEFFS:");
std::println("X0 = {}, Y0 = {}", MccAngleFancyString(fit_pcm_data.geomCoefficients.zeroPointX),
MccAngleFancyString(fit_pcm_data.geomCoefficients.zeroPointY));
std::println("collimErr = {}", MccAngleFancyString(fit_pcm_data.geomCoefficients.collimationErr));
std::println("nonperpErr = {}", MccAngleFancyString(fit_pcm_data.geomCoefficients.nonperpendErr));
std::println("misalignErr1 = {}", MccAngleFancyString(fit_pcm_data.geomCoefficients.misalignErr1));
std::println("misalignErr2 = {}", MccAngleFancyString(fit_pcm_data.geomCoefficients.misalignErr2));
std::println("tubeflexErr = {}", MccAngleFancyString(fit_pcm_data.geomCoefficients.tubeFlexure));
std::println("DECaxflexErr = {}", MccAngleFancyString(fit_pcm_data.geomCoefficients.DECaxisFlexure));
std::println("\n\n{:*^40}\n", " FITTED DIFFS ");
auto tab = pcm_cstr.getTable();
for (size_t i = 0; i < pcm_cstr.numberOfPoints(); ++i) {
std::println("{}\t {} {} {:6.2f}%\t{} {} {:6.2f}%", i, MccAngleFancyString(tab.colon_res[i]),
MccAngleFancyString(r.model_colon[i]), std::abs(r.colon_res[i] / tab.colon_res[i]) * 100.0,
MccAngleFancyString(tab.colat_res[i]), MccAngleFancyString(r.model_colat[i]),
std::abs(r.colat_res[i] / tab.colat_res[i]) * 100.0);
}
return 0;
}