23 namespace ModelFitting {
25 template <
typename PsfType>
28 template <
typename PsfType>
31 template <
typename PsfType>
33 : PsfType(), m_psf_contexts(n_extended_models) {}
35 template <
typename PsfType>
37 : PsfType(std::
move(psf)), m_psf_contexts(n_extended_models) {}
39 template <
typename PsfType,
typename ImageType>
45 : m_pixel_scale{pixel_scale}, m_width{width}, m_height{height},
46 m_constant_model_list{
std::move(constant_model_list)},
47 m_point_model_list{
std::move(point_model_list)},
48 m_extended_model_list{
std::move(extended_model_list)},
49 m_psf{
std::move(psf), m_extended_model_list.size()} {
52 template <
typename PsfType,
typename ImageType>
57 : m_pixel_scale{pixel_scale}, m_width{width}, m_height{height},
58 m_constant_model_list{
std::move(constant_model_list)},
59 m_point_model_list{
std::move(point_model_list)},
60 m_extended_model_list{
std::move(extended_model_list)},
61 m_psf{m_extended_model_list.size()} {
64 template <
typename PsfType,
typename ImageType>
69 template <
typename ImageType>
72 for (
auto& model : model_list) {
73 double value = model.getValue();
74 for(
auto it=Traits::begin(image); it!=Traits::end(image); ++it) {
80 template <
typename ImageType,
typename PsfType>
84 auto scale_factor = psf.getPixelScale() /
pixel_scale;
85 for (
auto& model : model_list) {
86 Traits::addImageToImage(image, psf.getScaledKernel(model.getValue()), scale_factor, model.getX(), model.getY());
90 template <
typename ImageType,
typename PsfType>
94 auto scale_factor = psf.getPixelScale() /
pixel_scale;
95 for (
size_t i = 0; i < model_list.
size(); ++i) {
96 auto& model = model_list[i];
105 auto extended_image = model.getRasterizedImage<ImageType>(psf.getPixelScale(), width, height);
106 psf.convolve(i, extended_image);
107 Traits::addImageToImage(image, extended_image, scale_factor, model.getX(), model.getY());
113 template <
typename PsfType,
typename ImageType>
116 m_model_image.reset(
new ImageType(Traits::factory(m_width, m_height)));
117 rasterToImage(*m_model_image);
120 template <
typename PsfType,
typename ImageType>
123 return *m_model_image;
126 template <
typename PsfType,
typename ImageType>
133 template <
typename PsfType,
typename ImageType>
139 template <
typename PsfType,
typename ImageType>
144 template <
typename PsfType,
typename ImageType>
146 return m_width * m_height;
static iterator end(ImageType &image)
void addExtendedModels(ImageType &image, const std::vector< TransformedModel > &model_list, PsfType &psf, double pixel_scale)
typename ImageTraits< ImageType >::iterator const_iterator
FrameModelPsfContainer(std::size_t n_extended_models)
static iterator begin(ImageType &image)
const ImageType & getImage()
void addConstantModels(ImageType &image, const std::vector< ConstantModel > &model_list)
FrameModelPsfContextContainer(std::size_t n_extended_models)
void addPointModels(ImageType &image, const std::vector< PointModel > &model_list, const PsfType &psf, double pixel_scale)
FrameModel(double pixel_scale, std::size_t width, std::size_t height, std::vector< ConstantModel > constant_model_list, std::vector< PointModel > point_model_list, std::vector< TransformedModel > extended_model_list, PsfType psf)
void rasterToImage(ImageType &)