SourceXtractorPlusPlus 1.0.3
SourceXtractor++, the next generation SExtractor
Loading...
Searching...
No Matches
CompactSersicModel.h
Go to the documentation of this file.
1/*
2 * CompactSersicModel.h
3 *
4 * Created on: Jul 25, 2019
5 * Author: mschefer
6 */
7
8#ifndef _MODELFITTING_MODELS_COMPACTSERSICMODEL_H_
9#define _MODELFITTING_MODELS_COMPACTSERSICMODEL_H_
10
12
13namespace ModelFitting {
14
15template <typename ImageType>
16class CompactSersicModel : public CompactModelBase<ImageType> {
17
18public:
19
20 CompactSersicModel(double sharp_radius,
23 std::shared_ptr<BasicParameter> rotation, double width, double height,
27 );
28
29 virtual ~CompactSersicModel() = default;
30
31 double getValue(double x, double y) const override;
32
33 ImageType getRasterizedImage(double pixel_scale, std::size_t size_x, std::size_t size_y) const override;
34
35
38 double i0, k, n;
39 double max_r_sqr;
40
41 inline float evaluateModel(float x, float y) const {
42 float x2 = x * transform[0] + y * transform[1];
43 float y2 = x * transform[2] + y * transform[3];
44 float r_sqr = x2*x2 + y2*y2;
45 if (r_sqr < max_r_sqr) {
46 float r = std::sqrt(r_sqr);
47 return i0 * std::exp(float(-k * powf(r, 1. / n)));
48 } else {
49 return 0.f;
50 }
51 }
52 };
53
54private:
55 using CompactModelBase<ImageType>::getMaxRadiusSqr;
57 using CompactModelBase<ImageType>::samplePixel;
60 using CompactModelBase<ImageType>::renormalize;
61
62 using CompactModelBase<ImageType>::m_jacobian;
63
65
66 // Sersic parameters
71};
72
73}
74
76
77#endif /* _MODELFITTING_MODELS_COMPACTSERSICMODEL_H_ */
const double pixel_scale
Definition TestImage.cpp:74
float samplePixel(const ModelEvaluator &model_eval, int x, int y, unsigned int subsampling) const
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
float sampleStochastic(const ModelEvaluator &model_eval, int x, int y, unsigned int samples=100) const
std::shared_ptr< BasicParameter > m_n
ImageType getRasterizedImage(double pixel_scale, std::size_t size_x, std::size_t size_y) const override
virtual ~CompactSersicModel()=default
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
T exp(T... args)
T sqrt(T... args)
T transform(T... args)