24#include "AlexandriaKernel/memory_tools.h"
50#include "Configuration/ConfigManager.h"
53#ifdef WITH_ONNX_MODELS
61using namespace ModelFitting;
63using namespace Euclid::Configuration;
98 [reference_coordinates, coordinates, offset](
double x,
double y) {
99 return coordinates->worldToImage(reference_coordinates->imageToWorld(
ImageCoordinate(x-1, y-1))).m_x - offset.
m_x + 0.5;
104 [reference_coordinates, coordinates, offset](
double x,
double y) {
105 return coordinates->worldToImage(reference_coordinates->imageToWorld(
ImageCoordinate(x-1, y-1))).m_y - offset.
m_y + 0.5;
116 double model_base_size,
122 [reference_coordinates, coordinates, offset](
double x,
double y) {
123 return coordinates->worldToImage(reference_coordinates->imageToWorld(
ImageCoordinate(x-1, y-1))).m_x - offset.
m_x + 0.5;
128 [reference_coordinates, coordinates, offset](
double x,
double y) {
129 return coordinates->worldToImage(reference_coordinates->imageToWorld(
ImageCoordinate(x-1, y-1))).m_y - offset.
m_y + 0.5;
135 [](
double flux,
double radius,
double aspect) {
return flux / (2 * M_PI * 0.35513 * radius * radius * aspect); },
140 [](
double eff_radius) {
return 1.678 / eff_radius; },
154 double model_base_size,
160 [reference_coordinates, coordinates, offset](
double x,
double y) {
161 return coordinates->worldToImage(reference_coordinates->imageToWorld(
ImageCoordinate(x-1, y-1))).m_x - offset.
m_x + 0.5;
166 [reference_coordinates, coordinates, offset](
double x,
double y) {
167 return coordinates->worldToImage(reference_coordinates->imageToWorld(
ImageCoordinate(x-1, y-1))).m_y - offset.
m_y + 0.5;
174 [](
double flux,
double radius,
double aspect) {
return flux / (2 * M_PI * 0.001684925 * radius * radius * aspect); },
179 [](
double eff_radius) {
return 7.669 /
pow(eff_radius, .25); },
194 return 2 * n - 1.0 / 3.0 + 4 / (405 * n)
195 + 46 / (25515 * n * n) + 131 / (1148175 * n * n * n) - 2194697 / (30690717750 * n * n * n * n);
203 double model_base_size,
208 [reference_coordinates, coordinates, offset](
double x,
double y) {
209 return coordinates->worldToImage(reference_coordinates->imageToWorld(
ImageCoordinate(x-1, y-1))).m_x - offset.
m_x + 0.5;
213 [reference_coordinates, coordinates, offset](
double x,
double y) {
214 return coordinates->worldToImage(reference_coordinates->imageToWorld(
ImageCoordinate(x-1, y-1))).m_y - offset.
m_y + 0.5;
220 [](
double flux,
double radius,
double aspect,
double n) {
return flux / (2 * M_PI *
pow(
computeBn(n), -2*n) * n *
std::tgamma(2*n) * radius * radius * aspect); },
225 [](
double eff_radius,
double n) {
return computeBn(n) /
pow(eff_radius, 1.0 / n); },
246#ifdef WITH_ONNX_MODELS
253 double model_base_size,
259 [reference_coordinates, coordinates, offset](
double x,
double y) {
260 return coordinates->worldToImage(reference_coordinates->imageToWorld(
ImageCoordinate(x-1, y-1))).m_x - offset.
m_x + 0.5;
265 [reference_coordinates, coordinates, offset](
double x,
double y) {
266 return coordinates->worldToImage(reference_coordinates->imageToWorld(ImageCoordinate(x-1, y-1))).m_y - offset.
m_y + 0.5;
270 [](
double scale,
double ratio) {
271 return scale *
ratio;
275 for (
auto it : m_params) {
276 params[it.first] = manager.
getParameter(source, it.second);
282 size, size, pixel_x, pixel_y, manager.
getParameter(source, m_flux), params, jacobian));
285FlexibleModelFittingOnnxModel::FlexibleModelFittingOnnxModel(
297 m_aspect_ratio(aspect_ratio),
303 std::sort(m_models.begin(), m_models.end(),
304 [](
const std::shared_ptr<OnnxModel>& a,
const std::shared_ptr<OnnxModel>& b) ->
bool {
305 return a->getOutputShape()[2] < b->getOutputShape()[2];
T emplace_back(T... args)
std::unique_ptr< T > make_unique(Args &&... args)
std::shared_ptr< DependentParameter< Parameters... > > createDependentParameter(typename DependentParameter< Parameters... >::ValueCalculator value_calculator, Parameters... parameters)