Commit 816c8ce0 authored by Alexander Lapshin's avatar Alexander Lapshin

.

parent a40e96d3
#ifndef MAGDATA_H
#define MAGDATA_H
#pragma once
#include "XMLFunctions.h"
#include "json_functions.h"
......@@ -18,6 +17,9 @@ public:
bool HasGeomData() const { return m_hasGeomData; }
void CalcMag(double phase, double range);
void CalcGeomMag(double phase, double range);
double get_std_mag() const { return m_stdmag; }
double get_std_phase() const { return m_stdphase; }
double get_std_range() const { return m_stdrange; }
private:
static double CalcA0g(double stdmag, double stdphase, double stdrange, double sunMag);
static double CalcRealMag(double A0g, double sunMag, double phase, double range);
......@@ -33,5 +35,3 @@ private:
bool m_hasData;
bool m_hasGeomData;
};
#endif
......@@ -48,9 +48,14 @@ OrbBlock::~OrbBlock()
delete m_ip;
}
void OrbBlock::interpolate(const TimeJD& beg, const TimeJD& end)
void OrbBlock::init_by_orbit()
{
m_ip = new XInterpolator(m_orbit, beg, end);
m_ip = new XInterpolator(m_orbit, get_beg(), get_end());
}
void OrbBlock::init_by_data()
{
m_ip = new XInterpolator(m_data.get_vecs());
}
void OrbBlock::load(const jsonval& parent)
......
......@@ -18,7 +18,8 @@ public:
const SInitOrbit& get_orbit() const { return m_orbit; }
double get_min_distance() const { return get_data().get_min_distance(); }
std::string get_next_orbitid() const { return get_data().get_next_orbitid(); }
void interpolate(const TimeJD& beg, const TimeJD& end);
void init_by_orbit();
void init_by_data();
const XInterpolator* get_interpolator() const { return m_ip; }
void load(const jsonval& parent);
const orb_block_data& get_data() const { return m_data; }
......
......@@ -33,8 +33,9 @@ void OrbBlocksStore::init(
if (interpolate) {
for (auto& m_block : m_blocks) {
m_block.interpolate(m_block.get_beg(), m_block.get_end());
m_block.init_by_orbit();
}
m_initiated = true;
}
}
......@@ -49,6 +50,15 @@ void OrbBlocksStore::init(
init(orbits, &beg, &end, filter_orbits, min_dist_forced, interpolate);
}
void OrbBlocksStore::init()
{
for (auto& m_block : m_blocks) {
m_block.init_by_data();
}
m_initiated = true;
}
SInitOrbits OrbBlocksStore::filter(const SInitOrbits& orbits) const
{
SInitOrbits result;
......@@ -244,11 +254,11 @@ void OrbBlocksStore::calc_min_dist(const SInitOrbit& orb1, const SInitOrbit& orb
result_dist = eval.calc(shift);
}
Vect6 OrbBlocksStore::get_pos(const TimeJD& date) const
Vect6 OrbBlocksStore::get_pos(const TimeJD& date, const bool tks) const
{
for (const auto& block : m_blocks) {
if (date >= block.get_beg() && date <= block.get_end()) {
return block.get_interpolator()->get_pos(date);
return block.get_interpolator()->get_pos(date, tks);
}
}
......@@ -269,7 +279,7 @@ const SInitOrbit& OrbBlocksStore::get_orbit(const TimeJD& date) const
std::vector<orb_block_data> OrbBlocksStore::get_orb_data() const
{
std::vector<orb_block_data> result;
for(const auto& el: m_blocks) {
for (const auto& el : m_blocks) {
result.emplace_back(el.get_data());
}
return result;
......
......@@ -8,14 +8,14 @@
typedef std::vector<OrbBlock> OrbBlocks;
class OrbBlocksStore
{
class OrbBlocksStore {
public:
OrbBlocksStore();
void init(const SInitOrbits& orbits, const TimeJD* beg, const TimeJD* end, bool filter_orbits, bool min_dist_forced, bool interpolate);
void init(const SInitOrbits& orbits, const TimeJD& beg, const TimeJD& end, bool filter_orbits, bool min_dist_forced, bool interpolate);
void init();
SInitOrbits calc_orbits(std::vector<TimeJD> dates, bool variates) const;
Vect6 get_pos(const TimeJD& date) const;
Vect6 get_pos(const TimeJD& date, bool tks = false) const;
const SInitOrbit& get_orbit(const TimeJD& date) const;
const OrbBlocks& get_blocks() const { return m_blocks; }
std::vector<orb_block_data> get_orb_data() const;
......@@ -23,6 +23,7 @@ public:
const TimeJD& get_beg_before_filter() const { return m_beg_before_filter; }
const TimeJD& get_end_before_filter() const { return m_end_before_filter; }
void load(const jsonval& parent);
bool is_initiated() const { return m_initiated; }
private:
void init_min_dist(const SInitOrbits& orbits, const TimeJD& beg, const TimeJD& end, bool forced);
void calc_min_dist(const SInitOrbit& orb1, const SInitOrbit& orb2, const TimeJD& beg, const TimeJD& end, TimeJD& result_jd, double& result_dist) const;
......@@ -30,4 +31,5 @@ private:
OrbBlocks m_blocks;
TimeJD m_beg_before_filter;
TimeJD m_end_before_filter;
bool m_initiated{false};
};
......@@ -41,4 +41,38 @@ void orb_block_data::load(const jsonval& parent)
loadjson(parent, "beg", m_beg);
loadjson(parent, "end", m_end);
loadjson(parent, "mind_km", m_mind, false);
std::string vecs;
loadjson(parent, "vecs", vecs);
std::vector<std::string> parts;
splitstrf(vecs, parts, ",");
for (size_t i = 0; i < parts.size(); i += 8) {
int days;
Converter::ToNumber(parts[i], days);
double fraction;
Converter::ToNumber(parts[i + 1], fraction);
double x;
Converter::ToNumber(parts[i + 2], x);
double y;
Converter::ToNumber(parts[i + 3], y);
double z;
Converter::ToNumber(parts[i + 4], z);
double vx;
Converter::ToNumber(parts[i + 5], vx);
double vy;
Converter::ToNumber(parts[i + 6], vy);
double vz;
Converter::ToNumber(parts[i + 7], vz);
m_vecs.emplace_back(Vect6(x, y, z, vx, vy, vz), TimeJD(days, fraction), 0, "");
}
}
......@@ -2,6 +2,7 @@
#include "TM.h"
#include "json_functions.h"
#include "ires.h"
class orb_block_data {
public:
......@@ -25,6 +26,7 @@ public:
const std::string& get_orbitid() const { return m_orbitid; }
const std::string& get_next_orbitid() const { return m_next_orbitid; }
double get_min_distance() const { return m_mind; }
const std::vector<IRes>& get_vecs() const { return m_vecs; }
private:
std::string m_orbitid;
std::string m_next_orbitid;
......@@ -32,5 +34,5 @@ private:
TimeJD m_beg;
TimeJD m_end;
double m_mind;
std::vector<IRes> m_vecs;
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment