SourceXtractorPlusPlus 0.18
SourceXtractor++, the next generation SExtractor
CheckImages.cpp
Go to the documentation of this file.
1
17/*
18 * CheckImages.cpp
19 *
20 * Created on: May 30, 2017
21 * Author: mschefer
22 */
23
30
32
33namespace SourceXtractor {
34
35namespace {
36
37std::string addNumberToFilename(boost::filesystem::path original_filename, size_t number, bool add_number) {
38 if (add_number) {
39 auto filename = original_filename.stem();
40 filename += "_" + std::to_string(number);
41 filename += original_filename.extension();
42
43 filename = original_filename.parent_path() / filename;
44
45 return filename.native();
46 } else {
47 return original_filename.native();
48 }
49}
50
51}
52
54
56}
57
63}
64
66 if (m_custom_images.count(id) != 0) {
67 auto image = std::dynamic_pointer_cast<WriteableImage<SeFloat>>(std::get<0>(m_custom_images[id]));
68 if (image != nullptr) {
69 return image;
70 }
71 }
72
73 auto image = FitsWriter::newImage<SeFloat>(id + ".fits",
74 width, height);
75 m_custom_images[id] = std::make_tuple(image, false);
76
77 return image;
78}
79
81 m_custom_images[id] = std::make_tuple(image, true);
82}
83
85 auto& config = manager.getConfiguration<CheckImagesConfig>();
86
87 m_model_fitting_image_filename = config.getModelFittingImageFilename();
88 m_residual_filename = config.getModelFittingResidualFilename();
89 m_model_background_filename = config.getModelBackgroundFilename();
90 m_model_variance_filename = config.getModelVarianceFilename();
91 m_segmentation_filename = config.getSegmentationFilename();
92 m_partition_filename = config.getPartitionFilename();
93 m_group_filename = config.getGroupFilename();
94 m_filtered_filename = config.getFilteredFilename();
95 m_thresholded_filename = config.getThresholdedFilename();
96 m_snr_filename = config.getSnrFilename();
97 m_auto_aperture_filename = config.getAutoApertureFilename();
98 m_aperture_filename = config.getApertureFilename();
99 m_moffat_filename = config.getMoffatFilename();
100 m_psf_filename = config.getPsfFilename();
101 m_ml_detection_filename = config.getMLDetectionFilename();
102
103 size_t detection_images_nb = manager.getConfiguration<DetectionImageConfig>().getExtensionsNb();
104
105 m_check_image_ml_detection.resize(detection_images_nb);
106
107 for (size_t i = 0; i < detection_images_nb; i++) {
108 auto detection_image = manager.getConfiguration<DetectionImageConfig>().getDetectionImage();
109 auto coordinate_system = manager.getConfiguration<DetectionImageConfig>().getCoordinateSystem();
110
111 m_detection_images.emplace_back(detection_image);
112 m_coordinate_systems.emplace_back(coordinate_system);
113
114 if (m_segmentation_filename != "") {
115 m_segmentation_images.emplace_back(FitsWriter::newImage<int>(
116 addNumberToFilename(m_segmentation_filename, i, detection_images_nb>1),
117 detection_image->getWidth(), detection_image->getHeight(), coordinate_system));
118 }
119
120 if (m_partition_filename != "") {
121 m_partition_images.emplace_back(FitsWriter::newImage<int>(
122 addNumberToFilename(m_partition_filename, i, detection_images_nb>1),
123 detection_image->getWidth(), detection_image->getHeight(), coordinate_system));
124 }
125
126 if (m_group_filename != "") {
127 m_group_images.emplace_back(FitsWriter::newImage<int>(
128 addNumberToFilename(m_group_filename, i, detection_images_nb>1),
129 detection_image->getWidth(), detection_image->getHeight(), coordinate_system));
130 }
131
132 if (m_auto_aperture_filename != "") {
133 m_auto_aperture_images.emplace_back(FitsWriter::newImage<int>(
134 addNumberToFilename(m_auto_aperture_filename, i, detection_images_nb>1),
135 detection_image->getWidth(), detection_image->getHeight(), coordinate_system));
136 }
137
138 if (m_aperture_filename != "") {
139 m_aperture_images.emplace_back(FitsWriter::newImage<int>(
140 addNumberToFilename(m_aperture_filename, i, detection_images_nb>1),
141 detection_image->getWidth(), detection_image->getHeight(), coordinate_system));
142 }
143
144 if (m_moffat_filename != "") {
145 m_moffat_images.emplace_back(FitsWriter::newImage<SeFloat>(
146 addNumberToFilename(m_moffat_filename, i, detection_images_nb>1),
147 detection_image->getWidth(), detection_image->getHeight(), coordinate_system));
148 }
149 }
150
151 // Measurement images
152 const auto& measurement_images_info = manager.getConfiguration<MeasurementImageConfig>().getImageInfos();
153 const auto& frames = manager.getConfiguration<MeasurementFrameConfig>().getFrames();
154 for (auto& info : measurement_images_info) {
155 std::stringstream label;
156 label << boost::filesystem::basename(info.m_path) << "_" << info.m_image_hdu;
157
158 m_measurement_frames[info.m_id] = FrameInfo {
159 label.str(),
160 info.m_measurement_image->getWidth(),
161 info.m_measurement_image->getHeight(),
162 info.m_coordinate_system,
163 frames.at(info.m_id)->getImage(LayerSubtractedImage)
164 };
165 }
166}
167
169 if (m_auto_aperture_filename.empty()) {
170 return nullptr;
171 }
172
174
175 auto i = m_measurement_auto_aperture_images.find(frame_number);
176 if (i == m_measurement_auto_aperture_images.end()) {
177 auto& frame_info = m_measurement_frames.at(frame_number);
179 filename += "_" + frame_info.m_label;
180 filename += m_auto_aperture_filename.extension();
181 auto frame_filename = m_auto_aperture_filename.parent_path() / filename;
184 frame_number,
185 FitsWriter::newImage<int>(
186 frame_filename.native(),
187 frame_info.m_width,
188 frame_info.m_height,
189 frame_info.m_coordinate_system
190 ))).first;
191 }
192 return LockedWriteableImage<int>::create(i->second);
193}
194
196 if (m_aperture_filename.empty()) {
197 return nullptr;
198 }
199
201
202 auto i = m_measurement_aperture_images.find(frame_number);
203 if (i == m_measurement_aperture_images.end()) {
204 auto& frame_info = m_measurement_frames.at(frame_number);
205 auto filename = m_aperture_filename.stem();
206 filename += "_" + frame_info.m_label;
207 filename += m_aperture_filename.extension();
208 auto frame_filename = m_aperture_filename.parent_path() / filename;
211 frame_number,
212 FitsWriter::newImage<int>(
213 frame_filename.native(),
214 frame_info.m_width,
215 frame_info.m_height,
216 frame_info.m_coordinate_system
217 ))).first;
218 }
219 return LockedWriteableImage<int>::create(i->second);
220}
221
223CheckImages::getModelFittingImage(unsigned int frame_number) {
225 return nullptr;
226 }
227
229
230 auto i = m_check_image_model_fitting.find(frame_number);
231 if (i == m_check_image_model_fitting.end()) {
232 auto& frame_info = m_measurement_frames.at(frame_number);
234
235 if (m_model_fitting_image_filename.empty()) {
236 writeable_image = FitsWriter::newTemporaryImage<DetectionImage::PixelType>(
237 "sourcextractor_check_model_%%%%%%.fits",
238 frame_info.m_width, frame_info.m_height
239 );
240 } else {
242 filename += "_" + frame_info.m_label;
244 auto frame_filename = m_model_fitting_image_filename.parent_path() / filename;
245 writeable_image = FitsWriter::newImage<MeasurementImage::PixelType>(
246 frame_filename.native(),
247 frame_info.m_width,
248 frame_info.m_height,
249 frame_info.m_coordinate_system
250 );
251 }
252 i = m_check_image_model_fitting.emplace(std::make_pair(frame_number, writeable_image)).first;
253 }
255}
256
258 if (m_psf_filename.empty()) {
259 return nullptr;
260 }
261
263
264 auto i = m_check_image_psf.find(frame_number);
265 if (i == m_check_image_psf.end()) {
266 auto& frame_info = m_measurement_frames.at(frame_number);
267 auto filename = m_psf_filename.stem();
268 filename += "_" + frame_info.m_label;
269 filename += m_psf_filename.extension();
270 auto frame_filename = m_psf_filename.parent_path() / filename;
271 i = m_check_image_psf.emplace(
273 frame_number,
274 FitsWriter::newImage<MeasurementImage::PixelType>(
275 frame_filename.native(),
276 frame_info.m_width,
277 frame_info.m_height,
278 frame_info.m_coordinate_system
279 ))).first;
280 }
282}
283
285 CheckImages::getMLDetectionImage(unsigned int plane_number, size_t index) {
286
287 if (m_ml_detection_filename.empty()) {
288 return nullptr;
289 }
290
292
293 auto i = m_check_image_ml_detection.at(index).find(plane_number);
294 if (i == m_check_image_ml_detection.at(index).end()) {
295 auto filename = m_ml_detection_filename.stem();
296 filename += "_" + std::to_string(plane_number);
297 filename += m_ml_detection_filename.extension();
298 auto frame_filename = m_ml_detection_filename.parent_path() / filename;
299 i = m_check_image_ml_detection.at(index).emplace(
301 plane_number,
302 FitsWriter::newImage<MeasurementImage::PixelType>(
303 frame_filename.native(),
304 m_detection_images.at(index)->getWidth(),
305 m_detection_images.at(index)->getHeight(),
306 m_coordinate_systems.at(index)
307 ))).first;
308 }
310}
311
314
315 auto detection_images_nb = m_coordinate_systems.size();
316 for (size_t i = 0; i < detection_images_nb; i++) {
317 // if possible, save the background image
318 if (i < m_background_images.size() && m_background_images.at(i) != nullptr && m_model_background_filename != "") {
319 FitsWriter::writeFile(*m_background_images.at(i),
320 addNumberToFilename(m_model_background_filename, i, detection_images_nb>1), m_coordinate_systems.at(i));
321 }
322
323 // if possible, save the variance image
324 if (i < m_variance_images.size() && m_variance_images.at(i) != nullptr && m_model_variance_filename != "") {
325 FitsWriter::writeFile(*m_variance_images.at(i),
326 addNumberToFilename(m_model_variance_filename, i, detection_images_nb>1), m_coordinate_systems.at(i));
327 }
328
329 // if possible, save the filtered image
330 if (i < m_filtered_images.size() && m_filtered_images.at(i) != nullptr && m_filtered_filename != "") {
331 FitsWriter::writeFile(*m_filtered_images.at(i),
332 addNumberToFilename(m_filtered_filename, i, detection_images_nb>1), m_coordinate_systems.at(i));
333 }
334
335 // if possible, save the thresholded image
336 if (i < m_thresholded_images.size() && m_thresholded_images.at(i) != nullptr && m_thresholded_filename != "") {
337 FitsWriter::writeFile(*m_thresholded_images.at(i),
338 addNumberToFilename(m_thresholded_filename, i, detection_images_nb>1), m_coordinate_systems.at(i));
339 }
340
341 // if possible, save the SNR image
342 if (i < m_snr_images.size() && m_snr_images.at(i) != nullptr && m_snr_filename != "") {
343 FitsWriter::writeFile(*m_snr_images.at(i),
344 addNumberToFilename(m_snr_filename, i, detection_images_nb>1), m_coordinate_systems.at(i));
345 }
346 }
347
348 // if possible, create and save the residual image
349 if (m_residual_filename != "") {
350 for (auto &ci : m_check_image_model_fitting) {
351 auto& frame_info = m_measurement_frames.at(ci.first);
352
353 auto residual_image = SubtractImage<SeFloat>::create(frame_info.m_subtracted_image, ci.second);
354 auto filename = m_residual_filename.stem();
355 filename += "_" + frame_info.m_label;
356 filename += m_residual_filename.extension();
357 auto frame_filename = m_residual_filename.parent_path() / filename;
358 FitsWriter::writeFile(*residual_image, frame_filename.native(), frame_info.m_coordinate_system);
359 }
360 }
361
362 for (auto const& entry : m_custom_images) {
363 if (std::get<1>(entry.second)) {
364 auto filename = entry.first;
365 if (!filename.has_extension()) {
366 filename += ".fits";
367 }
368 FitsWriter::writeFile(*std::get<0>(entry.second), filename.native());
369 }
370 }
371}
372
373}
T at(T... args)
boost::filesystem::path m_partition_filename
Definition: CheckImages.h:198
std::vector< std::shared_ptr< WeightImage > > m_variance_images
Definition: CheckImages.h:188
std::vector< std::shared_ptr< DetectionImage > > m_detection_images
Definition: CheckImages.h:183
std::map< unsigned int, std::shared_ptr< WriteableImage< int > > > m_measurement_aperture_images
Definition: CheckImages.h:178
std::shared_ptr< WriteableImage< int > > getMeasurementAutoApertureImage(unsigned int frame_number)
boost::filesystem::path m_group_filename
Definition: CheckImages.h:199
std::map< unsigned int, std::shared_ptr< WriteableImage< MeasurementImage::PixelType > > > m_check_image_psf
Definition: CheckImages.h:180
boost::filesystem::path m_ml_detection_filename
Definition: CheckImages.h:207
void setCustomCheckImage(std::string id, std::shared_ptr< Image< SeFloat > > image)
Definition: CheckImages.cpp:80
boost::filesystem::path m_residual_filename
Definition: CheckImages.h:194
std::map< unsigned int, std::shared_ptr< WriteableImage< int > > > m_measurement_auto_aperture_images
Definition: CheckImages.h:179
boost::filesystem::path m_filtered_filename
Definition: CheckImages.h:200
std::shared_ptr< WriteableImage< int > > getMeasurementApertureImage(unsigned int frame_number)
std::vector< std::shared_ptr< WriteableImage< int > > > m_group_images
Definition: CheckImages.h:173
std::shared_ptr< WriteableImage< float > > getMLDetectionImage(unsigned int plane_number, size_t index)
boost::filesystem::path m_model_background_filename
Definition: CheckImages.h:195
static std::unique_ptr< CheckImages > m_instance
Definition: CheckImages.h:161
boost::filesystem::path m_model_variance_filename
Definition: CheckImages.h:196
void configure(Euclid::Configuration::ConfigManager &manager) override
Method which should initialize the object.
Definition: CheckImages.cpp:84
std::shared_ptr< WriteableImage< SeFloat > > getWriteableCheckImage(std::string id, int width, int height)
Definition: CheckImages.cpp:65
boost::filesystem::path m_auto_aperture_filename
Definition: CheckImages.h:203
std::map< unsigned int, std::shared_ptr< WriteableImage< MeasurementImage::PixelType > > > m_check_image_model_fitting
Definition: CheckImages.h:180
boost::filesystem::path m_moffat_filename
Definition: CheckImages.h:205
std::vector< std::shared_ptr< Image< SeFloat > > > m_filtered_images
Definition: CheckImages.h:185
boost::filesystem::path m_snr_filename
Definition: CheckImages.h:202
std::vector< std::shared_ptr< Image< SeFloat > > > m_thresholded_images
Definition: CheckImages.h:186
boost::filesystem::path m_psf_filename
Definition: CheckImages.h:206
std::shared_ptr< WriteableImage< MeasurementImage::PixelType > > getPsfImage(unsigned int frame_number)
std::vector< std::shared_ptr< CoordinateSystem > > m_coordinate_systems
Definition: CheckImages.h:191
std::vector< std::shared_ptr< WriteableImage< int > > > m_partition_images
Definition: CheckImages.h:172
std::vector< std::shared_ptr< WriteableImage< int > > > m_aperture_images
Definition: CheckImages.h:175
boost::filesystem::path m_segmentation_filename
Definition: CheckImages.h:197
void reportConfigDependencies(Euclid::Configuration::ConfigManager &manager) const override
Registers all the Configuration dependencies.
Definition: CheckImages.cpp:58
std::vector< std::shared_ptr< WriteableImage< int > > > m_segmentation_images
Definition: CheckImages.h:171
std::vector< std::map< unsigned int, std::shared_ptr< WriteableImage< float > > > > m_check_image_ml_detection
Definition: CheckImages.h:181
boost::filesystem::path m_thresholded_filename
Definition: CheckImages.h:201
boost::filesystem::path m_aperture_filename
Definition: CheckImages.h:204
std::vector< std::shared_ptr< Image< SeFloat > > > m_snr_images
Definition: CheckImages.h:187
std::vector< std::shared_ptr< WriteableImage< int > > > m_auto_aperture_images
Definition: CheckImages.h:174
std::shared_ptr< WriteableImage< MeasurementImage::PixelType > > getModelFittingImage(unsigned int frame_number)
std::vector< std::shared_ptr< WriteableImage< SeFloat > > > m_moffat_images
Definition: CheckImages.h:176
boost::filesystem::path m_model_fitting_image_filename
Definition: CheckImages.h:193
std::map< int, FrameInfo > m_measurement_frames
Definition: CheckImages.h:211
std::vector< std::shared_ptr< Image< SeFloat > > > m_background_images
Definition: CheckImages.h:184
std::map< boost::filesystem::path, std::tuple< std::shared_ptr< Image< SeFloat > >, bool > > m_custom_images
Definition: CheckImages.h:209
Provides the detection image.
static std::shared_ptr< LockedWriteableImage< T > > create(Args &&... args)
static std::shared_ptr< ProcessedImage< T, P > > create(std::shared_ptr< const Image< T > > image_a, std::shared_ptr< const Image< T > > image_b)
T lock(T... args)
T make_pair(T... args)
T make_tuple(T... args)
@ LayerSubtractedImage
Definition: Frame.h:39
string filename
Definition: conf.py:65
T size(T... args)
T str(T... args)
T to_string(T... args)