52 return entries.
front();
58 [
x,
y](
const AssocModeConfig::CatalogEntry &a,
const AssocModeConfig::CatalogEntry &b) ->
bool {
59 auto dx_a = a.coord.m_x - x;
60 auto dy_a = a.coord.m_y - y;
61 auto dx_b = b.coord.m_x - x;
62 auto dy_b = b.coord.m_y - y;
63 return dx_a*dx_a + dy_a*dy_a < dx_b*dx_b + dy_b*dy_b;
69 [](
const AssocModeConfig::CatalogEntry &a,
const AssocModeConfig::CatalogEntry &b) ->
bool {
70 return a.weight < b.weight;
76 [](
const AssocModeConfig::CatalogEntry &a,
const AssocModeConfig::CatalogEntry &b) ->
bool {
77 return a.weight < b.weight;
82 AssocModeConfig::CatalogEntry result;
83 result.assoc_columns.resize(entries.
front().assoc_columns.size());
84 double total_weight = 0.0;
85 for (
auto& entry : entries) {
86 total_weight += entry.weight;
87 for (
size_t i=0; i < result.assoc_columns.size(); i++) {
88 result.assoc_columns[i] += entry.assoc_columns[i] * entry.weight;
92 for (
size_t i=0; i < result.assoc_columns.size(); i++) {
93 result.assoc_columns[i] /= total_weight;
100 AssocModeConfig::CatalogEntry result;
101 result.assoc_columns.resize(entries.
front().assoc_columns.size());
102 for (
auto& entry : entries) {
103 for (
size_t i=0; i < result.assoc_columns.size(); i++) {
104 result.assoc_columns[i] += entry.assoc_columns[i];
111 AssocModeConfig::CatalogEntry result;
112 result.assoc_columns.resize(entries.
front().assoc_columns.size());
113 double total_weight = 0.0;
114 for (
auto& entry : entries) {
115 double linear_weight =
pow(10.0, -0.4 * entry.weight);
116 total_weight += linear_weight;
117 for (
size_t i=0; i < result.assoc_columns.size(); i++) {
118 result.assoc_columns[i] += entry.assoc_columns[i] * linear_weight;
122 for (
size_t i=0; i < result.assoc_columns.size(); i++) {
123 result.assoc_columns[i] /= total_weight;
130 AssocModeConfig::CatalogEntry result;
131 result.assoc_columns.resize(entries.
front().assoc_columns.size());
132 for (
auto& entry : entries) {
133 for (
size_t i=0; i < result.assoc_columns.size(); i++) {
134 result.assoc_columns[i] +=
pow(10.0, -0.4 * entry.assoc_columns[i]);
138 for (
size_t i=0; i < result.assoc_columns.size(); i++) {
139 result.assoc_columns[i] = -2.5 *
log10(result.assoc_columns[i]);
149 m_catalog(catalog), m_assoc_mode(assoc_mode), m_radius(radius) {}
159 auto nearby_catalog_entries =
m_catalog.findPointsWithinRadius(Tree::Coord {
x,
y },
m_radius);
161 if (nearby_catalog_entries.size() == 0) {
177 auto assoc_data = assoc_mode_implementation_table.at(
m_assoc_mode)(nearby_catalog_entries);
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y