@@ -23,7 +23,7 @@ void CheckImages::reportConfigDependencies(Euclid::Configuration::ConfigManager
2323 manager.registerConfiguration <CheckImagesConfig>();
2424}
2525
26- std::shared_ptr<WriteableImage<SeFloat>> CheckImages::getWriteableCheckImage (std::string id, int width, int height) {
26+ /* std::shared_ptr<WriteableImage<SeFloat>> CheckImages::getWriteableCheckImage(std::string id, int width, int height) {
2727 if (m_custom_images.count(id) != 0) {
2828 auto image = std::dynamic_pointer_cast<WriteableImage<SeFloat>>(std::get<0>(m_custom_images[id]));
2929 if (image != nullptr) {
@@ -41,7 +41,7 @@ std::shared_ptr<WriteableImage<SeFloat>> CheckImages::getWriteableCheckImage(std
4141
4242void CheckImages::setCustomCheckImage(std::string id, std::shared_ptr<Image<SeFloat>> image) {
4343 m_custom_images[id] = std::make_tuple(image, true);
44- }
44+ }*/
4545
4646void CheckImages::configure (Euclid::Configuration::ConfigManager& manager) {
4747 m_detection_image = manager.getConfiguration <DetectionImageConfig>().getDetectionImage ();
@@ -62,91 +62,115 @@ void CheckImages::configure(Euclid::Configuration::ConfigManager& manager) {
6262
6363 m_coordinate_system = manager.getConfiguration <DetectionImageConfig>().getCoordinateSystem ();
6464
65- if (m_model_fitting_image_filename != " " ) {
66- m_check_image_model_fitting = FitsWriter::newImage<DetectionImage::PixelType>(m_model_fitting_image_filename,
67- m_detection_image->getWidth (), m_detection_image->getHeight (), m_coordinate_system);
68- }
69- else if (m_residual_filename != " " ) {
70- m_check_image_model_fitting = FitsWriter::newTemporaryImage<DetectionImage::PixelType>(
71- " sextractor_check_model_%%%%%%.fits" , m_detection_image->getWidth (), m_detection_image->getHeight ());
72- }
73-
7465 if (m_segmentation_filename != " " ) {
75- m_segmentation_image = FitsWriter::newImage<unsigned int >(m_segmentation_filename,
66+ m_segmentation_image = FitsWriter::newImage<unsigned int >(m_segmentation_filename. native () ,
7667 m_detection_image->getWidth (), m_detection_image->getHeight (), m_coordinate_system);
7768 }
7869
7970 if (m_partition_filename != " " ) {
80- m_partition_image = FitsWriter::newImage<unsigned int >(m_partition_filename,
71+ m_partition_image = FitsWriter::newImage<unsigned int >(m_partition_filename. native () ,
8172 m_detection_image->getWidth (), m_detection_image->getHeight (), m_coordinate_system);
8273 }
8374
8475 if (m_group_filename != " " ) {
85- m_group_image = FitsWriter::newImage<unsigned int >(m_group_filename,
76+ m_group_image = FitsWriter::newImage<unsigned int >(m_group_filename. native () ,
8677 m_detection_image->getWidth (), m_detection_image->getHeight (), m_coordinate_system);
8778 }
8879
8980 if (m_auto_aperture_filename != " " ) {
90- m_auto_aperture_image = FitsWriter::newImage<unsigned int >(m_auto_aperture_filename,
81+ m_auto_aperture_image = FitsWriter::newImage<unsigned int >(m_auto_aperture_filename. native () ,
9182 m_detection_image->getWidth (), m_detection_image->getHeight (), m_coordinate_system);
9283 }
9384
9485 if (m_aperture_filename != " " ) {
95- m_aperture_image = FitsWriter::newImage<unsigned int >(m_aperture_filename,
86+ m_aperture_image = FitsWriter::newImage<unsigned int >(m_aperture_filename. native () ,
9687 m_detection_image->getWidth (), m_detection_image->getHeight (), m_coordinate_system
9788 );
9889 }
9990
10091 if (m_moffat_filename != " " ) {
101- m_moffat_image = FitsWriter::newImage<SeFloat>(m_moffat_filename,
92+ m_moffat_image = FitsWriter::newImage<SeFloat>(m_moffat_filename. native () ,
10293 m_detection_image->getWidth (), m_detection_image->getHeight (), m_coordinate_system
10394 );
10495 }
10596}
10697
10798std::shared_ptr<WriteableImage<unsigned int >>
108- CheckImages::getAutoApertureImage (unsigned instance, int width, int height, const std::shared_ptr<CoordinateSystem> &cs ) {
99+ CheckImages::getAutoApertureImage (std::shared_ptr<const MeasurementImageFrame> frame ) {
109100 if (m_auto_aperture_filename.empty ()) {
110101 return nullptr ;
111102 }
112103
113104 std::lock_guard<std::mutex> lock{m_access_mutex};
114105
115- auto i = m_measurement_auto_aperture_images.find (instance );
106+ auto i = m_measurement_auto_aperture_images.find (frame );
116107 if (i == m_measurement_auto_aperture_images.end ()) {
117- auto frame_filename = m_auto_aperture_filename + " ." + std::to_string (instance);
108+ auto filename = m_auto_aperture_filename.stem ();
109+ filename += " _" + frame->getLabel ();
110+ filename.replace_extension (m_auto_aperture_filename.extension ());
111+ auto frame_filename = m_auto_aperture_filename.parent_path () / filename;
118112 i = m_measurement_auto_aperture_images.emplace (
119113 std::make_pair (
120- instance ,
114+ frame ,
121115 FitsWriter::newImage<unsigned int >(
122- frame_filename,
123- width ,
124- height ,
125- cs
116+ frame_filename. native () ,
117+ frame-> getOriginalImage ()-> getWidth () ,
118+ frame-> getOriginalImage ()-> getHeight () ,
119+ frame-> getCoordinateSystem ()
126120 ))).first ;
127121 }
128122 return i->second ;
129123}
130124
131125std::shared_ptr<WriteableImage<unsigned int >>
132- CheckImages::getApertureImage (unsigned instance, int width, int height, const std::shared_ptr<CoordinateSystem> &cs ) {
126+ CheckImages::getApertureImage (std::shared_ptr<const MeasurementImageFrame> frame ) {
133127 if (m_aperture_filename.empty ()) {
134128 return nullptr ;
135129 }
136130
137131 std::lock_guard<std::mutex> lock{m_access_mutex};
138132
139- auto i = m_measurement_aperture_images.find (instance );
133+ auto i = m_measurement_aperture_images.find (frame );
140134 if (i == m_measurement_aperture_images.end ()) {
141- auto frame_filename = m_aperture_filename + " ." + std::to_string (instance);
135+ auto filename = m_aperture_filename.stem ();
136+ filename += " _" + frame->getLabel ();
137+ filename.replace_extension (m_aperture_filename.extension ());
138+ auto frame_filename = m_aperture_filename.parent_path () / filename;
142139 i = m_measurement_aperture_images.emplace (
143140 std::make_pair (
144- instance ,
141+ frame ,
145142 FitsWriter::newImage<unsigned int >(
146- frame_filename,
147- width,
148- height,
149- cs
143+ frame_filename.native (),
144+ frame->getOriginalImage ()->getWidth (),
145+ frame->getOriginalImage ()->getHeight (),
146+ frame->getCoordinateSystem ()
147+ ))).first ;
148+ }
149+ return i->second ;
150+ }
151+
152+ std::shared_ptr<WriteableImage<MeasurementImage::PixelType>>
153+ CheckImages::getModelFittingImage (std::shared_ptr<const SExtractor::MeasurementImageFrame> frame) {
154+ if (m_model_fitting_image_filename.empty ()) {
155+ return nullptr ;
156+ }
157+
158+ std::lock_guard<std::mutex> lock{m_access_mutex};
159+
160+ auto i = m_check_image_model_fitting.find (frame);
161+ if (i == m_check_image_model_fitting.end ()) {
162+ auto filename = m_model_fitting_image_filename.stem ();
163+ filename += " _" + frame->getLabel ();
164+ filename.replace_extension (m_model_fitting_image_filename.extension ());
165+ auto frame_filename = m_model_fitting_image_filename.parent_path () / filename;
166+ i = m_check_image_model_fitting.emplace (
167+ std::make_pair (
168+ frame,
169+ FitsWriter::newImage<MeasurementImage::PixelType>(
170+ frame_filename.native (),
171+ frame->getOriginalImage ()->getWidth (),
172+ frame->getOriginalImage ()->getHeight (),
173+ frame->getCoordinateSystem ()
150174 ))).first ;
151175 }
152176 return i->second ;
@@ -157,33 +181,42 @@ void CheckImages::saveImages() {
157181
158182 // if possible, save the background image
159183 if (m_background_image != nullptr && m_model_background_filename != " " ) {
160- FitsWriter::writeFile (*m_background_image, m_model_background_filename, m_coordinate_system);
184+ FitsWriter::writeFile (*m_background_image, m_model_background_filename. native () , m_coordinate_system);
161185 }
162186
163187 // if possible, save the variance image
164188 if (m_variance_image != nullptr && m_model_variance_filename != " " ) {
165- FitsWriter::writeFile (*m_variance_image, m_model_variance_filename, m_coordinate_system);
189+ FitsWriter::writeFile (*m_variance_image, m_model_variance_filename. native () , m_coordinate_system);
166190 }
167191
168192 // if possible, save the filtered image
169193 if (m_filtered_image != nullptr && m_filtered_filename != " " ) {
170- FitsWriter::writeFile (*m_filtered_image, m_filtered_filename, m_coordinate_system);
194+ FitsWriter::writeFile (*m_filtered_image, m_filtered_filename. native () , m_coordinate_system);
171195 }
172196
173197 // if possible, save the thresholded image
174198 if (m_thresholded_image != nullptr && m_thresholded_filename != " " ) {
175- FitsWriter::writeFile (*m_thresholded_image, m_thresholded_filename, m_coordinate_system);
199+ FitsWriter::writeFile (*m_thresholded_image, m_thresholded_filename. native () , m_coordinate_system);
176200 }
177201
178202 // if possible, create and save the residual image
179- if (m_check_image_model_fitting != nullptr && m_residual_filename != " " ) {
180- auto residual_image = SubtractImage<SeFloat>::create (m_detection_image, m_check_image_model_fitting);
181- FitsWriter::writeFile (*residual_image, m_residual_filename, m_coordinate_system);
203+ if (m_residual_filename != " " ) {
204+ for (auto &ci : m_check_image_model_fitting) {
205+ auto residual_image = SubtractImage<SeFloat>::create (ci.first ->getSubtractedImage (), ci.second );
206+ auto filename = m_residual_filename.stem ();
207+ filename += " _" + ci.first ->getLabel ();
208+ filename.replace_extension (m_residual_filename.extension ());
209+ auto frame_filename = m_residual_filename.parent_path () / filename;
210+ FitsWriter::writeFile (*residual_image, filename.native (), ci.first ->getCoordinateSystem ());
211+ }
182212 }
183213
184214 for (auto const & entry : m_custom_images) {
185215 if (std::get<1 >(entry.second )) {
186- FitsWriter::writeFile (*std::get<0 >(entry.second ), entry.first + " .fits" );
216+ auto filename = entry.first ;
217+ if (!filename.has_extension ())
218+ filename.replace_extension (" .fits" );
219+ FitsWriter::writeFile (*std::get<0 >(entry.second ), filename.native ());
187220 }
188221 }
189222
0 commit comments