40 if (size_x % 2 == 0 || size_y % 2 == 0) {
42 <<
"but got (" << size_x <<
',' << size_y <<
")";
46 ImageType image = Traits::factory(size_x+8, size_y+8);
48 auto combined_tranform = getCombinedTransform(
pixel_scale);
52 model_eval.
i0 = m_i0->getValue();
53 model_eval.
k = m_k->getValue();
54 model_eval.
max_r_sqr = getMaxRadiusSqr(size_x, size_y, combined_tranform);
56 float area_correction = (1.0 /
fabs(m_jacobian[0] * m_jacobian[3] - m_jacobian[1] * m_jacobian[2])) *
pixel_scale *
pixel_scale;
58 for (
int y = 0;
y < (int)size_y; ++
y) {
59 int dy =
y - size_y / 2;
60 for (
int x = 0;
x < (int)size_x; ++
x) {
61 int dx =
x - size_x / 2;
62 if (
dx *
dx +
dy *
dy < m_sharp_radius_squared) {
63 Traits::at(image,
x+4,
y+4) = adaptiveSamplePixel(model_eval,
dx,
dy, 7, 0.01) * area_correction;
70 renormalize(image, m_flux->getValue());
CompactExponentialModel(double sharp_radius, std::shared_ptr< BasicParameter > i0, std::shared_ptr< BasicParameter > k, std::shared_ptr< BasicParameter > x_scale, std::shared_ptr< BasicParameter > y_scale, std::shared_ptr< BasicParameter > rotation, double width, double height, std::shared_ptr< BasicParameter > x, std::shared_ptr< BasicParameter > y, std::shared_ptr< BasicParameter > flux, std::tuple< double, double, double, double > transform)