177 lines
5.8 KiB
C++
177 lines
5.8 KiB
C++
#include <iostream>
|
|
|
|
// #include <mcc_ccte_erfa.h>
|
|
#include <mcc_coordinate.h>
|
|
#include <mcc_deserializer.h>
|
|
#include <mcc_serializer.h>
|
|
|
|
using namespace mcc::impl;
|
|
|
|
typedef MccGenericSkyPoint<mcc::ccte::erfa::MccCCTE_ERFA> skypt_t;
|
|
|
|
|
|
static skypt_t::ccte_t::engine_state_t saoras{.meteo{.temperature = 0.0, .humidity = 0.5, .pressure = 1010.0},
|
|
.wavelength = 0.5,
|
|
.lat = 43.646711_degs,
|
|
.lon = 41.440732_degs,
|
|
.elev = 2100.0};
|
|
|
|
// skypt_t::cctEngine.setStateERFA(saoras);
|
|
|
|
static_assert(mcc::mcc_angle_c<double>, "!!!!!!!!!!!!");
|
|
|
|
|
|
template <typename VT>
|
|
void serialize(VT const& value)
|
|
{
|
|
MccSerializer<VT> ser;
|
|
std::string s;
|
|
|
|
auto err = ser(s, value);
|
|
if (err) {
|
|
std::cout << "SERIALIZING ERR: " << err << "\n";
|
|
} else {
|
|
std::cout << "SERIALIZED: " << s << "\n";
|
|
}
|
|
}
|
|
|
|
template <typename VT>
|
|
void deserialize(mcc::traits::mcc_input_char_range auto const& s, VT& value)
|
|
{
|
|
MccDeserializer<VT> deser;
|
|
|
|
auto err = deser(s, value);
|
|
if (err) {
|
|
std::cout << "DESERIALIZING ERR: " << err << "\n";
|
|
} else {
|
|
std::cout << "DESERIALIZION IS OK\n";
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
skypt_t::cctEngine.setStateERFA(saoras);
|
|
|
|
skypt_t pt;
|
|
MccSkyRADEC_ICRS icrs(0.0, 70.0_degs);
|
|
|
|
pt = icrs;
|
|
|
|
MccSkyRADEC_OBS radec_obs{0.0, 0.0};
|
|
MccSkyRADEC_APP radec_app;
|
|
MccSkyAZALT azalt{0, 0};
|
|
MccSkyAZZD azzd{0, 0};
|
|
MccSkyHADEC_OBS hadec_obs;
|
|
MccAngle eo, lst;
|
|
|
|
skypt_t::cctEngine.equationOrigins(radec_obs.epoch(), &eo);
|
|
skypt_t::cctEngine.apparentSideralTime(radec_obs.epoch(), &lst, true);
|
|
std::cout << "EO = " << eo.sexagesimal(true) << "\n";
|
|
std::cout << "LST = " << lst.sexagesimal(true) << "\n\n";
|
|
|
|
pt.to(radec_obs, azalt, azzd, radec_app);
|
|
|
|
std::cout << "FROM ICRS TO OBSERVED:\n";
|
|
std::cout << "RA_ICRS = " << icrs.x().sexagesimal(true) << "\n";
|
|
std::cout << "DEC_ICRS = " << icrs.y().sexagesimal() << "\n";
|
|
std::cout << "OBS COORD EPOCH: " << radec_obs.epoch().UTC() << "\n";
|
|
std::cout << "RA_OBS = " << radec_obs.x().sexagesimal(true) << "\n";
|
|
std::cout << "DEC_OBS = " << radec_obs.y().sexagesimal() << "\n";
|
|
std::cout << "AZ = " << azalt.x().sexagesimal() << "\n";
|
|
std::cout << "ALT = " << azalt.y().sexagesimal() << "\n";
|
|
std::cout << "ZD = " << azzd.y().sexagesimal() << "\n";
|
|
std::cout << "RA_APP = " << radec_app.x().sexagesimal(true) << "\n";
|
|
std::cout << "DEC_APP = " << radec_app.y().sexagesimal() << "\n";
|
|
|
|
|
|
// radec_obs = {10.2387983_degs, "43:21:34.5465"_dms};
|
|
icrs.setX(111.0_degs), icrs.setY(111.0_degs);
|
|
azzd.setX(111.0_degs), azzd.setY(111.0_degs);
|
|
azalt.setX(111.0_degs), azalt.setY(111.0_degs);
|
|
hadec_obs.setX(111.0_degs), hadec_obs.setY(111.0_degs);
|
|
radec_app.setX(111.0_degs), radec_app.setY(111.0_degs);
|
|
|
|
pt = radec_obs;
|
|
// pt.to(icrs, azzd, hadec_obs, radec_app);
|
|
pt.to(icrs, radec_app);
|
|
pt.to(radec_obs, hadec_obs, azzd);
|
|
|
|
std::cout << "\n\nFROM OBSERVED TO ICRS:\n";
|
|
std::cout << "OBS COORD EPOCH: " << radec_obs.epoch().UTC() << "\n";
|
|
std::cout << "RA_OBS = " << radec_obs.x().sexagesimal(true) << "\n";
|
|
std::cout << "DEC_OBS = " << radec_obs.y().sexagesimal() << "\n";
|
|
std::cout << "RA_ICRS = " << icrs.x().sexagesimal(true) << "\n";
|
|
std::cout << "DEC_ICRS = " << icrs.y().sexagesimal() << "\n";
|
|
|
|
std::cout << "\n\nFROM OBSERVED TO OBSERVED:\n";
|
|
std::cout << "OBS COORD EPOCH: " << radec_obs.epoch().UTC() << "\n";
|
|
std::cout << "RA_OBS = " << radec_obs.x().sexagesimal(true) << "\n";
|
|
std::cout << "DEC_OBS = " << radec_obs.y().sexagesimal() << "\n";
|
|
std::cout << "HA_OBS = " << hadec_obs.x().sexagesimal(true) << "\n";
|
|
std::cout << "AZ = " << azzd.x().sexagesimal() << "\n";
|
|
std::cout << "ZD = " << azzd.y().sexagesimal() << "\n";
|
|
std::cout << "RA_APP = " << radec_app.x().sexagesimal(true) << "\n";
|
|
std::cout << "DEC_APP = " << radec_app.y().sexagesimal() << "\n";
|
|
|
|
azalt = pt;
|
|
std::cout << "ALT = " << azalt.y().sexagesimal() << "\n";
|
|
|
|
std::cout << "\nIN DEGREES:\n";
|
|
std::cout << "RA_ICRS = " << icrs.x().degrees() << "\n";
|
|
std::cout << "DEC_ICRS = " << icrs.y().degrees() << "\n";
|
|
std::cout << "RA_OBS = " << radec_obs.x().degrees() << "\n";
|
|
std::cout << "DEC_OBS = " << radec_obs.y().degrees() << "\n";
|
|
std::cout << "HA_OBS = " << hadec_obs.x().degrees() << "\n";
|
|
std::cout << "AZ = " << azzd.x().degrees() << "\n";
|
|
std::cout << "ZD = " << azzd.y().degrees() << "\n";
|
|
std::cout << "RA_APP = " << radec_app.x().degrees() << "\n";
|
|
std::cout << "DEC_APP = " << radec_app.y().degrees() << "\n";
|
|
|
|
|
|
std::cout << "\n\nSERIALIZATION TEST:\n";
|
|
|
|
|
|
double v = 7.7;
|
|
|
|
std::cout << "\tfor 'double' type: ";
|
|
serialize(v);
|
|
|
|
std::cout << "\tfor 'coord pair' type: ";
|
|
serialize(radec_obs);
|
|
|
|
radec_app = pt;
|
|
// pt.to(radec_app);
|
|
std::cout << "\tfor 'coord pair' type: ";
|
|
serialize(radec_app);
|
|
|
|
azzd = pt;
|
|
// pt.to(azzd);
|
|
std::cout << "\tfor 'coord pair' type: ";
|
|
serialize(azzd);
|
|
|
|
// pt.from(icrs);
|
|
pt = radec_obs;
|
|
|
|
std::cout << "\tfor 'sky point' type: ";
|
|
serialize(pt);
|
|
|
|
|
|
std::cout << "\n\nDESERIALIZATION TEST:\n";
|
|
v = 0.0;
|
|
|
|
std::string s = "123.7687";
|
|
|
|
deserialize(s, v);
|
|
std::cout << "\tfor 'double' type: v = " << v << "\n";
|
|
|
|
s = " 11:22:33.453, -32.19820931,65632.87987987,RADEC-OBS ";
|
|
deserialize(s, pt);
|
|
pt.toAtSameEpoch(radec_obs);
|
|
std::cout << "\tfor 'sky point' type: x = " << radec_obs.x().sexagesimal(true)
|
|
<< ", y = " << radec_obs.y().degrees() << ", epoch = " << pt.epoch().MJD()
|
|
<< ", kind = " << MccCoordPairKindToStr(pt.pairKind()) << "\n";
|
|
|
|
|
|
return 0;
|
|
}
|