Skip to content

Commit 330c136

Browse files
committed
propagate config for and fix DownsampledPsf
1 parent 8885949 commit 330c136

File tree

6 files changed

+36
-15
lines changed

6 files changed

+36
-15
lines changed

SEImplementation/SEImplementation/Plugin/FlexibleModelFitting/FlexibleModelFittingIterativeTask.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@
2727
#include "SEFramework/Image/VectorImage.h"
2828
#include "SEFramework/Task/GroupTask.h"
2929

30-
//#include "SEImplementation/Configuration/SamplingConfig.h"
31-
3230
#include "SEImplementation/Plugin/FlexibleModelFitting/FlexibleModelFittingParameter.h"
3331
#include "SEImplementation/Plugin/FlexibleModelFitting/FlexibleModelFittingFrame.h"
3432
#include "SEImplementation/Plugin/FlexibleModelFitting/FlexibleModelFittingPrior.h"
3533

34+
#include "SEImplementation/Image/DownSampledImagePsf.h"
35+
3636
namespace SourceXtractor {
3737

3838
class FlexibleModelFittingIterativeTask : public GroupTask {
@@ -43,6 +43,7 @@ class FlexibleModelFittingIterativeTask : public GroupTask {
4343
std::vector<std::shared_ptr<FlexibleModelFittingParameter>> parameters,
4444
std::vector<std::shared_ptr<FlexibleModelFittingFrame>> frames,
4545
std::vector<std::shared_ptr<FlexibleModelFittingPrior>> priors,
46+
std::vector<bool> should_renormalize,
4647
double scale_factor=1.0,
4748
int meta_iterations=3,
4849
double deblend_factor=1.0,
@@ -98,6 +99,11 @@ class FlexibleModelFittingIterativeTask : public GroupTask {
9899
ModelFitting::LeastSquareSummary solution,
99100
int index, FittingState& state) const;
100101

102+
ModelFitting::FrameModel<DownSampledImagePsf, std::shared_ptr<VectorImage<SourceXtractor::SeFloat>>> createFrameModel(
103+
SourceInterface& source, double pixel_scale, FlexibleModelFittingParameterManager& manager,
104+
std::shared_ptr<FlexibleModelFittingFrame> frame, PixelRectangle stamp_rect, double down_scaling=1.0) const;
105+
106+
101107
// Task configuration
102108
std::string m_least_squares_engine;
103109
unsigned int m_max_iterations;
@@ -111,6 +117,8 @@ class FlexibleModelFittingIterativeTask : public GroupTask {
111117
std::vector<std::shared_ptr<FlexibleModelFittingParameter>> m_parameters;
112118
std::vector<std::shared_ptr<FlexibleModelFittingFrame>> m_frames;
113119
std::vector<std::shared_ptr<FlexibleModelFittingPrior>> m_priors;
120+
121+
std::vector<bool> m_should_renormalize;
114122
};
115123

116124
}

SEImplementation/SEImplementation/Plugin/FlexibleModelFitting/FlexibleModelFittingTaskFactory.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ class FlexibleModelFittingTaskFactory : public TaskFactory {
6060

6161
double m_scale_factor {1.0};
6262
double m_max_fit_size {100};
63+
64+
// should we renormalize the PSF for each frame?
65+
std::vector<bool> m_should_renormalize;
6366
};
6467

6568
}

SEImplementation/python/sourcextractor/config/measurement_images.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,6 @@ def __init__(self, fits_file, psf_file=None, weight_file=None, gain=None,
205205
self._set_checked('weight_hdu', weight_hdu)
206206

207207
self.psf_renormalize = psf_renormalize
208-
print(self.psf_renormalize)
209208

210209
def __str__(self):
211210
"""

SEImplementation/src/lib/Image/DownSampledImagePsf.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,11 @@ DownSampledImagePsf::DownSampledImagePsf(
5858
pixel /= psf_sum;
5959
}
6060
} else {
61-
double area_factor = 1.0 / (down_scaling * down_scaling);
61+
auto original_psf_sum = std::accumulate(image->getData().begin(), image->getData().end(), 0.);
62+
auto new_psf_sum = std::accumulate(new_image->getData().begin(), new_image->getData().end(), 0.);
63+
6264
for (auto& pixel : new_image->getData()) {
63-
pixel *= area_factor;
65+
pixel *= original_psf_sum / new_psf_sum;
6466
}
6567
}
6668

SEImplementation/src/lib/Plugin/FlexibleModelFitting/FlexibleModelFittingIterativeTask.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
#include "ModelFitting/Engine/LeastSquareEngineManager.h"
2222

2323
#include "SEImplementation/Image/ImagePsf.h"
24-
#include "SEImplementation/Image/DownSampledImagePsf.h"
2524
#include "SEImplementation/Image/VectorImageDataVsModelInputTraits.h"
2625

2726
#include "SEImplementation/CheckImages/CheckImages.h"
@@ -51,6 +50,7 @@ FlexibleModelFittingIterativeTask::FlexibleModelFittingIterativeTask(const std::
5150
std::vector<std::shared_ptr<FlexibleModelFittingParameter>> parameters,
5251
std::vector<std::shared_ptr<FlexibleModelFittingFrame>> frames,
5352
std::vector<std::shared_ptr<FlexibleModelFittingPrior>> priors,
53+
std::vector<bool> should_renormalize,
5454
double scale_factor,
5555
int meta_iterations,
5656
double deblend_factor,
@@ -59,8 +59,8 @@ FlexibleModelFittingIterativeTask::FlexibleModelFittingIterativeTask(const std::
5959
: m_least_squares_engine(least_squares_engine), m_max_iterations(max_iterations),
6060
m_modified_chi_squared_scale(modified_chi_squared_scale), m_scale_factor(scale_factor),
6161
m_meta_iterations(meta_iterations), m_deblend_factor(deblend_factor), m_meta_iteration_stop(meta_iteration_stop),
62-
m_max_fit_size(max_fit_size * max_fit_size), m_parameters(parameters), m_frames(frames), m_priors(priors) {
63-
}
62+
m_max_fit_size(max_fit_size * max_fit_size), m_parameters(parameters), m_frames(frames), m_priors(priors),
63+
m_should_renormalize(should_renormalize) {}
6464

6565
FlexibleModelFittingIterativeTask::~FlexibleModelFittingIterativeTask() {
6666
}
@@ -142,9 +142,12 @@ std::shared_ptr<VectorImage<SeFloat>> createWeightImage(SourceInterface& source,
142142
return weight;
143143
}
144144

145-
FrameModel<DownSampledImagePsf, std::shared_ptr<VectorImage<SourceXtractor::SeFloat>>> createFrameModel(
145+
} // anonymous namespace
146+
147+
FrameModel<DownSampledImagePsf, std::shared_ptr<VectorImage<SourceXtractor::SeFloat>>>
148+
FlexibleModelFittingIterativeTask::createFrameModel(
146149
SourceInterface& source, double pixel_scale, FlexibleModelFittingParameterManager& manager,
147-
std::shared_ptr<FlexibleModelFittingFrame> frame, PixelRectangle stamp_rect, double down_scaling=1.0) {
150+
std::shared_ptr<FlexibleModelFittingFrame> frame, PixelRectangle stamp_rect, double down_scaling) const {
148151

149152
int frame_index = frame->getFrameNb();
150153

@@ -158,7 +161,8 @@ FrameModel<DownSampledImagePsf, std::shared_ptr<VectorImage<SourceXtractor::SeFl
158161
// It will be used to compute the rastering grid size, and after convolving with the PSF the result will be
159162
// downscaled before copied into the frame image.
160163
// We can multiply here then, as the unit is pixel/pixel, rather than "/pixel or similar
161-
auto source_psf = DownSampledImagePsf(psf_property.getPixelSampling(), psf_property.getPsf(), down_scaling);
164+
auto source_psf = DownSampledImagePsf(psf_property.getPixelSampling(), psf_property.getPsf(),
165+
down_scaling, m_should_renormalize[frame_index]);
162166

163167
std::vector<ConstantModel> constant_models;
164168
std::vector<PointModel> point_models;
@@ -178,9 +182,6 @@ FrameModel<DownSampledImagePsf, std::shared_ptr<VectorImage<SourceXtractor::SeFl
178182
return frame_model;
179183
}
180184

181-
}
182-
183-
184185
void FlexibleModelFittingIterativeTask::computeProperties(SourceGroupInterface& group) const {
185186
FittingState fitting_state;
186187

SEImplementation/src/lib/Plugin/FlexibleModelFitting/FlexibleModelFittingTaskFactory.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
#include "SEImplementation/Configuration/ModelFittingConfig.h"
3131
#include "SEImplementation/Configuration/SamplingConfig.h"
32+
#include "SEImplementation/Configuration/MeasurementImageConfig.h"
3233

3334
namespace SourceXtractor {
3435

@@ -38,7 +39,7 @@ std::shared_ptr<Task> FlexibleModelFittingTaskFactory::createTask(const Property
3839
if (property_id == PropertyId::create<FlexibleModelFitting>()) {
3940
if (m_use_iterative_fitting) {
4041
return std::make_shared<FlexibleModelFittingIterativeTask>(m_least_squares_engine, m_max_iterations,
41-
m_modified_chi_squared_scale, m_parameters, m_frames, m_priors, m_scale_factor,
42+
m_modified_chi_squared_scale, m_parameters, m_frames, m_priors, m_should_renormalize, m_scale_factor,
4243
m_meta_iterations, m_deblend_factor, m_meta_iteration_stop, m_max_fit_size);
4344
} else {
4445
return std::make_shared<FlexibleModelFittingTask>(m_least_squares_engine, m_max_iterations,
@@ -51,6 +52,8 @@ std::shared_ptr<Task> FlexibleModelFittingTaskFactory::createTask(const Property
5152

5253
void FlexibleModelFittingTaskFactory::reportConfigDependencies(Euclid::Configuration::ConfigManager& manager) const {
5354
manager.registerConfiguration<ModelFittingConfig>();
55+
manager.registerConfiguration<SamplingConfig>();
56+
manager.registerConfiguration<MeasurementImageConfig>();
5457
}
5558

5659
void FlexibleModelFittingTaskFactory::configure(Euclid::Configuration::ConfigManager& manager) {
@@ -90,6 +93,11 @@ void FlexibleModelFittingTaskFactory::configure(Euclid::Configuration::ConfigMan
9093

9194
m_scale_factor = sampling_config.getScaleFactor();
9295
m_max_fit_size = sampling_config.getMaxFitSize();
96+
97+
const auto& image_infos = manager.getConfiguration<MeasurementImageConfig>().getImageInfos();
98+
for (const auto& info : image_infos) {
99+
m_should_renormalize.push_back(info.m_psf_renormalize);
100+
}
93101
}
94102

95103
void FlexibleModelFittingTaskFactory::registerPropertyInstances(OutputRegistry& registry) {

0 commit comments

Comments
 (0)