12template<
typename ImageType>
26template<
typename ImageType>
30 model_eval.
i0 =
m_i0->getValue();
31 model_eval.
k =
m_k->getValue();
32 model_eval.
n =
m_n->getValue();
40template<
typename ImageType>
44 if (size_x % 2 == 0 || size_y % 2 == 0) {
46 <<
"but got (" << size_x <<
',' << size_y <<
")";
50 ImageType image = Traits::factory(size_x+8, size_y+8);
56 model_eval.
i0 =
m_i0->getValue();
57 model_eval.
k =
m_k->getValue();
58 model_eval.
n =
m_n->getValue();
63 for (
int y = 0; y < (int)size_y; ++y) {
64 int dy = y - size_y / 2;
65 for (
int x = 0; x < (int)size_x; ++x) {
66 int dx = x - size_x / 2;
68 Traits::at(image, x+4, y+4) =
adaptiveSamplePixel(model_eval, dx, dy, 7, 0.01) * area_correction;
70 Traits::at(image, x+4, y+4) = model_eval.
evaluateModel(dx, dy) * area_correction;
CompactModelBase(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::tuple< double, double, double, double > transform)
void renormalize(ImageType &image, double flux) const
double getMaxRadiusSqr(std::size_t size_x, std::size_t size_y, const Mat22 &transform) const
Mat22 getCombinedTransform(double pixel_scale) const
float adaptiveSamplePixel(const ModelEvaluator &model_eval, int x, int y, unsigned int max_subsampling, float threshold=1.1) const
std::shared_ptr< BasicParameter > m_n
ImageType getRasterizedImage(double pixel_scale, std::size_t size_x, std::size_t size_y) const override
std::shared_ptr< BasicParameter > m_k
CompactSersicModel(double sharp_radius, std::shared_ptr< BasicParameter > i0, std::shared_ptr< BasicParameter > k, std::shared_ptr< BasicParameter > n, 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)
double getValue(double x, double y) const override
std::shared_ptr< BasicParameter > m_flux
std::shared_ptr< BasicParameter > m_i0
float m_sharp_radius_squared
float evaluateModel(float x, float y) const