25template <
typename PsfType>
28template <
typename PsfType>
31template <
typename PsfType>
33 : PsfType(), m_psf_contexts(n_extended_models) {}
35template <
typename PsfType>
37: PsfType(
std::
move(psf)), m_psf_contexts(n_extended_models) {}
39template <
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()} {
52template <
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()} {
64template <
typename PsfType,
typename ImageType>
69template <
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) {
80template <
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());
90template <
typename ImageType,
typename PsfType>
94 auto scale_factor = psf.getPixelScale() /
pixel_scale;
96 for (
size_t i = 0; i < model_list.size(); ++i) {
97 auto& model = model_list[i];
103 if (height % 2 == 0) {
107 auto extended_image = model->getRasterizedImage(psf.getPixelScale(), width, height);
108 psf.convolve(i, extended_image);
109 Traits::addImageToImage(image, extended_image, scale_factor, model->getX(), model->getY());
115template <
typename PsfType,
typename ImageType>
118 m_model_image.reset(
new ImageType(Traits::factory(m_width, m_height)));
119 rasterToImage(*m_model_image);
122template <
typename PsfType,
typename ImageType>
125 return *m_model_image;
128template <
typename PsfType,
typename ImageType>
135template <
typename PsfType,
typename ImageType>
141template <
typename PsfType,
typename ImageType>
146template <
typename PsfType,
typename ImageType>
148 return m_width * m_height;
FrameModelPsfContainer(std::size_t n_extended_models)
FrameModelPsfContextContainer(std::size_t n_extended_models)
typename ImageTraits< ImageType >::iterator const_iterator
void rasterToImage(ImageType &)
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< std::shared_ptr< ExtendedModel< ImageType > > > extended_model_list, PsfType psf)
const ImageType & getImage()
void addExtendedModels(ImageType &image, const std::vector< std::shared_ptr< ExtendedModel< ImageType > > > &model_list, PsfType &psf, double pixel_scale)
void addConstantModels(ImageType &image, const std::vector< ConstantModel > &model_list)
void addPointModels(ImageType &image, const std::vector< PointModel > &model_list, const PsfType &psf, double pixel_scale)
static iterator begin(ImageType &image)
static iterator end(ImageType &image)