SourceXtractorPlusPlus 1.0.3
SourceXtractor++, the next generation SExtractor
Loading...
Searching...
No Matches
SourcePsfTask.cpp
Go to the documentation of this file.
1
17
18#include <numeric>
24
25namespace SourceXtractor {
26
27static double getCoordX(SourceXtractor::SourceInterface& source, unsigned instance) {
28 auto& pixel_centroid = source.getProperty<MeasurementFramePixelCentroid>(instance);
29 return pixel_centroid.getCentroidX();
30}
31
32static double getCoordY(SourceXtractor::SourceInterface& source, unsigned instance) {
33 auto& pixel_centroid = source.getProperty<MeasurementFramePixelCentroid>(instance);
34 return pixel_centroid.getCentroidY();
35}
36
38 {"X_IMAGE", getCoordX},
39 {"Y_IMAGE", getCoordY},
40 {"XWIN_IMAGE", getCoordX},
41 {"YWIN_IMAGE", getCoordY},
42 {"XPEAK_IMAGE", getCoordX},
43 {"YPEAK_IMAGE", getCoordY},
44 {"XMODEL_IMAGE", getCoordX},
45 {"YMODEL_IMAGE", getCoordY}
46};
47
49 if (m_vpsf != nullptr) {
50 std::vector<double> component_values;
51
52 for (auto component : m_vpsf->getComponents()) {
53 component_values.push_back(component_value_getters[component](source, m_instance));
54 }
55
56 std::shared_ptr<VectorImage<SeFloat>> psf = m_vpsf->getPsf(component_values);
57
58 if (m_normalize_psf) {
59 // The result may not be normalized!
60 auto psf_sum = std::accumulate(psf->getData().begin(), psf->getData().end(), 0.);
62 }
63 source.setIndexedProperty<SourcePsfProperty>(m_instance, m_vpsf->getPixelSampling(), psf);
64
65 // Check image
67 if (check_image) {
68 auto x = component_value_getters["X_IMAGE"](source, m_instance);
69 auto y = component_value_getters["Y_IMAGE"](source, m_instance);
70
72 check_image, psf, m_vpsf->getPixelSampling(), x, y);
73 }
74 } else {
75 source.setIndexedProperty<SourcePsfProperty>(m_instance, 1.0, nullptr);
76 }
77}
78
79}
T accumulate(T... args)
static CheckImages & getInstance()
std::shared_ptr< WriteableImage< MeasurementImage::PixelType > > getPsfImage(unsigned int frame_number)
SeFloat getCentroidY() const
Y coordinate of centroid.
SeFloat getCentroidX() const
X coordinate of centroid.
static std::shared_ptr< ProcessedImage< T, MultiplyOperation< T > > > create(std::shared_ptr< const Image< T > > image_a, std::shared_ptr< const Image< T > > image_b)
The SourceInterface is an abstract "source" that has properties attached to it.
void setIndexedProperty(std::size_t index, Args... args)
Convenience template method to call setProperty() with a more user-friendly syntax.
const PropertyType & getProperty(unsigned int index=0) const
Convenience template method to call getProperty() with a more user-friendly syntax.
static std::map< std::string, ValueGetter > component_value_getters
void computeProperties(SourceInterface &source) const override
Computes one or more properties for the Source.
std::shared_ptr< Psf > m_vpsf
static std::shared_ptr< VectorImage< T > > create(Args &&... args)
static double getCoordX(SourceXtractor::SourceGroupInterface &group, unsigned instance)
Definition PsfTask.cpp:33
static double getCoordY(SourceXtractor::SourceGroupInterface &group, unsigned instance)
Definition PsfTask.cpp:39
T push_back(T... args)
static void addImageToImage(ImageType &image1, const ImageType &image2, double scale, double x, double y)