SourceXtractorPlusPlus  0.12
Please provide a description of the project.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AperturePhotometryTask.cpp
Go to the documentation of this file.
1 
17 /*
18  * AperturePhotometryTask.cpp
19  *
20  * Created on: Sep 22, 2016
21  * Author: mschefer
22  */
23 
28 
30 
38 
41 
43 
44 namespace SourceXtractor {
45 
47 
49  const auto& measurement_frame_info = source.getProperty<MeasurementFrameInfo>(m_instance);
50  const auto& measurement_frame_images = source.getProperty<MeasurementFrameImages>(m_instance);
51 
52  auto variance_threshold = measurement_frame_info.getVarianceThreshold();
53  auto gain = measurement_frame_info.getGain();
54 
55  const auto measurement_image = measurement_frame_images.getLockedImage(LayerSubtractedImage);
56  const auto variance_map = measurement_frame_images.getLockedImage(LayerVarianceMap);
57 
58  auto pixel_centroid = source.getProperty<MeasurementFramePixelCentroid>(m_instance);
59 
60  // get the object center
61  const auto& centroid_x = source.getProperty<MeasurementFramePixelCentroid>(m_instance).getCentroidX();
62  const auto& centroid_y = source.getProperty<MeasurementFramePixelCentroid>(m_instance).getCentroidY();
63 
64  // m_apertures is the aperture on the detection frame, so we have to wrap it
65  // to transform it to the measurement frame
66  auto jacobian = source.getProperty<JacobianSource>(m_instance);
67 
68  std::vector<SeFloat> fluxes, fluxes_error;
69  std::vector<SeFloat> mags, mags_error;
70  std::vector<Flags> flags;
71 
72  for (auto aperture_diameter : m_apertures) {
73  auto aperture = std::make_shared<TransformedAperture>(
74  std::make_shared<CircularAperture>(aperture_diameter / 2.),
75  jacobian.asTuple()
76  );
77 
78  auto measurement = measureFlux(aperture, centroid_x, centroid_y, measurement_image, variance_map,
79  variance_threshold, m_use_symmetry);
80  // compute the derived quantities
81  auto flux_error = sqrt(measurement.m_variance + measurement.m_flux / gain);
82  auto mag = measurement.m_flux > 0.0 ? -2.5 * log10(measurement.m_flux) + m_magnitude_zero_point : std::numeric_limits<SeFloat>::quiet_NaN();
83  auto mag_error = 1.0857 * flux_error / measurement.m_flux;
84 
85  fluxes.push_back(measurement.m_flux);
86  fluxes_error.push_back(flux_error);
87  mags.push_back(mag);
88  mags_error.push_back(mag_error);
89  flags.push_back(measurement.m_flags);
90  }
91 
92  // Merge flags with those set on the detection frame and from the saturate and blended plugins
93  Flags additional_flags(Flags::NONE);
94  additional_flags |= Flags::SATURATED * source.getProperty<SaturateFlag>(m_instance).getSaturateFlag();
95  additional_flags |= Flags::BLENDED * source.getProperty<BlendedFlag>().getBlendedFlag();
96 
97  auto aperture_flags = source.getProperty<ApertureFlag>().getFlags();
98  for (size_t i = 0; i < m_apertures.size(); ++i) {
99  auto det_flag = aperture_flags.at(m_apertures[i]);
100  flags[i] |= additional_flags | det_flag;
101  }
102 
103  // set the source properties
104  source.setIndexedProperty<AperturePhotometry>(m_instance, fluxes, fluxes_error, mags, mags_error, flags);
105 
106  // Draw the last aperture
107  auto aperture = std::make_shared<TransformedAperture>(std::make_shared<CircularAperture>(m_apertures[0] / 2.),
108  jacobian.asTuple());
109 
110  auto aperture_check_img = CheckImages::getInstance().getApertureImage(m_instance);
111  if (aperture_check_img) {
112  auto src_id = source.getProperty<SourceID>().getId();
113  fillAperture(aperture, centroid_x, centroid_y, aperture_check_img, static_cast<unsigned>(src_id));
114  }
115 }
116 
117 }
118 
const PropertyType & getProperty(unsigned int index=0) const
Convenience template method to call getProperty() with a more user-friendly syntax.
Aperture photometry fluxes and magnitudes.
void setIndexedProperty(std::size_t index, Args...args)
Convenience template method to call setProperty() with a more user-friendly syntax.
T log10(T...args)
T push_back(T...args)
virtual void computeProperties(SourceInterface &source) const override
Computes one or more properties for the Source.
static CheckImages & getInstance()
Definition: CheckImages.h:136
std::shared_ptr< WriteableImage< unsigned int > > getApertureImage() const
Definition: CheckImages.h:86
At least one pixel of the object is saturated.
Flags
Flagging of bad sources.
Definition: SourceFlags.h:34
Aperture photometry flag.
Definition: ApertureFlag.h:38
The object was originally blended with another one.
T quiet_NaN(T...args)
T sqrt(T...args)
The SourceInterface is an abstract &quot;source&quot; that has properties attached to it.
void fillAperture(const std::shared_ptr< Aperture > &aperture, SeFloat centroid_x, SeFloat centroid_y, const std::shared_ptr< WriteableImage< T >> &img, T value)
FluxMeasurement measureFlux(const std::shared_ptr< Aperture > &aperture, SeFloat centroid_x, SeFloat centroid_y, const std::shared_ptr< Image< SeFloat >> &img, const std::shared_ptr< Image< SeFloat >> &variance_map, SeFloat variance_threshold, bool use_symmetry)