| LSSTApplications
    20.0.0
    LSSTDataManagementBasePackage | 
 
 
 
Go to the documentation of this file.
   39 namespace ex = pex::exceptions;
 
   63     bool const haveDefault = !
std::isnan(defaultValue);
 
   70         } 
else if (haveDefault) {
 
   80 template <
typename ImageT>
 
   82         : 
Background(img, bgCtrl), _statsImage(
image::MaskedImage<InternalPixelT>()) {
 
   93     for (
int iX = 0; iX < nxSample; ++iX) {
 
   94         for (
int iY = 0; iY < nySample; ++iY) {
 
   95             ImageT subimg = ImageT(img,
 
  103             im(iX, iY) = res.first;
 
  104             var(iX, iY) = res.second;
 
  110         : 
Background(imageBBox, statsImage.getWidth(), statsImage.getHeight()), _statsImage(statsImage) {}
 
  118     _gridColumns[iX].
resize(height);
 
  128     cullNan(
_ycen, _grid, ycenTmp, gridTmp);
 
  134         switch (undersampleStyle) {
 
  139                 if (gridTmp.
empty()) {
 
  152                         e, 
"The BackgroundControl UndersampleStyle INCREASE_NXNYSAMPLE is not supported.");
 
  156                                                      "UndersampleStyle %d is not defined.") %
 
  165     for (
int iY = 0; iY < height; ++iY) {
 
  166         _gridColumns[iX][iY] = intobj->interpolate(ypix[iY]);
 
  171     _statsImage += delta;
 
  176     _statsImage -= delta;
 
  181     (void)getImage<InternalPixelT>(interpStyle);  
 
  184     int const nxSample = _statsImage.
getWidth();
 
  186     for (
int iX = 0; iX < nxSample; iX++) {
 
  187         bg_x[iX] = _gridColumns[iX][
y];
 
  190     cullNan(
_xcen, bg_x, xcenTmp, bgTmp);
 
  194         return static_cast<double>(intobj->interpolate(
x));
 
  200 template <
typename PixelT>
 
  209                 str(
boost::format(
"BBox (%d:%d,%d:%d) out of range (%d:%d,%d:%d)") % 
bbox.getMinX() %
 
  213     int const nxSample = _statsImage.
getWidth();
 
  214     int const nySample = _statsImage.
getHeight();
 
  233     switch (undersampleStyle) {
 
  235             if (isXundersampled && isYundersampled) {
 
  238                         "nxSample and nySample have too few points for requested interpolation style.");
 
  239             } 
else if (isXundersampled) {
 
  241                                   "nxSample has too few points for requested interpolation style.");
 
  242             } 
else if (isYundersampled) {
 
  244                                   "nySample has too few points for requested interpolation style.");
 
  248             if (isXundersampled || isYundersampled) {
 
  251                 interpStyle = (nxSample < nySample) ? xStyle : yStyle;
 
  256             if (isXundersampled || isYundersampled) {
 
  259                         "The BackgroundControl UndersampleStyle INCREASE_NXNYSAMPLE is not supported.");
 
  265                                                 "UndersampleStyle %d is not defined.") %
 
  283     for (
int iY = 0; iY < height; ++iY) {
 
  287     _gridColumns.
resize(width);
 
  288     for (
int iX = 0; iX < nxSample; ++iX) {
 
  289         _setGridColumns(interpStyle, undersampleStyle, iX, ypix);
 
  308     for (
int y = 0, iY = bboxOff.getY(); 
y < 
bbox.getHeight(); ++
y, ++iY) {
 
  311         for (
int iX = 0; iX < nxSample; iX++) {
 
  312             bg_x[iX] = 
static_cast<double>(_gridColumns[iX][iY]);
 
  314         cullNan(
_xcen, bg_x, xcenTmp, bgTmp, defaultValue);
 
  319         } 
catch (pex::exceptions::OutOfRangeError& e) {
 
  320             switch (undersampleStyle) {
 
  326                         xcenTmp.push_back(0);
 
  327                         bgTmp.push_back(defaultValue);
 
  338                             "The BackgroundControl UndersampleStyle INCREASE_NXNYSAMPLE is not supported.");
 
  342                                                          "UndersampleStyle %d is not defined.") %
 
  352         for (
int iX = bboxOff.getX(), 
x = 0; 
x < 
bbox.getWidth(); ++iX, ++
x) {
 
  353             (*bg)(
x, 
y) = 
static_cast<PixelT>(intobj->interpolate(iX));
 
  356     bg->setXY0(
bbox.getMin());
 
  361 template <
typename PixelT>
 
  363         ApproximateControl 
const& actrl,        
 
  375 #define CREATE_BACKGROUND(m, v, TYPE)                                                                    \ 
  376     template BackgroundMI::BackgroundMI(image::Image<TYPE> const& img, BackgroundControl const& bgCtrl); \ 
  377     template BackgroundMI::BackgroundMI(image::MaskedImage<TYPE> const& img,                             \ 
  378                                         BackgroundControl const& bgCtrl);                                \ 
  379     std::shared_ptr<image::Image<TYPE>> BackgroundMI::_getImage(                                         \ 
  380             lsst::geom::Box2I const& bbox,                                                               \ 
  381             Interpolate::Style const interpStyle,                        \ 
  382             UndersampleStyle const undersampleStyle,          \ 
  385         return BackgroundMI::doGetImage<TYPE>(bbox, interpStyle, undersampleStyle);                      \ 
  388 #define CREATE_getApproximate(m, v, TYPE)                                                        \ 
  389     std::shared_ptr<Approximate<TYPE>> BackgroundMI::_getApproximate(                            \ 
  390             ApproximateControl const& actrl,                            \ 
  391             UndersampleStyle const undersampleStyle,  \ 
  394         return BackgroundMI::doGetApproximate<TYPE>(actrl, undersampleStyle);                    \ 
  
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects.
y_iterator col_begin(int x) const
Return an y_iterator to the start of the y'th row.
std::shared_ptr< Interpolate > makeInterpolate(std::vector< double > const &x, std::vector< double > const &y, Interpolate::Style const style=Interpolate::AKIMA_SPLINE)
A factory function to make Interpolate objects.
BackgroundMI(ImageT const &img, BackgroundControl const &bgCtrl)
Constructor for BackgroundMI.
std::vector< int > _ysize
y size ...
int getHeight() const noexcept
std::shared_ptr< Approximate< PixelT > > makeApproximate(std::vector< double > const &x, std::vector< double > const &y, image::MaskedImage< PixelT > const &im, lsst::geom::Box2I const &bbox, ApproximateControl const &ctrl)
Construct a new Approximate object, inferring the type from the type of the given MaskedImage.
Extent2I const getDimensions() const noexcept
#define LSST_EXCEPT_ADD(e, m)
Add the current location and a message to an existing exception before rethrowing it.
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Point2I const getMin() const noexcept
A class to evaluate image background levels.
int getWidth() const
Return the number of columns in the image.
std::shared_ptr< StatisticsControl > getStatisticsControl()
int getHeight() const
Return the number of rows in the image.
#define LSST_makeBackground_getImage_types
std::vector< int > _yorig
y origin ...
Statistics makeStatistics(lsst::afw::image::Image< Pixel > const &img, lsst::afw::image::Mask< image::MaskPixel > const &msk, int const flags, StatisticsControl const &sctrl=StatisticsControl())
Handle a watered-down front-end to the constructor (no variance)
Value getResult(Property const prop=NOTHING) const
Return the value and error in the specified statistic (e.g.
int getWidth() const noexcept
A virtual base class to evaluate image background levels.
std::vector< double > _xcen
x center pix coords of sub images
std::shared_ptr< BackgroundControl > _bctrl
control info set by user.
UndersampleStyle _asUsedUndersampleStyle
the undersampleStyle we actually used
Reports attempts to exceed implementation-defined length limits for some classes.
bool contains(Point2I const &point) const noexcept
Return true if the box contains the point.
double getPixel(Interpolate::Style const style, int const x, int const y) const
Method to retrieve the background level at a pixel coord.
Pass parameters to a Background object.
std::vector< int > _xsize
x size of sub images
int lookupMinInterpPoints(Interpolate::Style const style)
Get the minimum number of points needed to use the requested interpolation style.
@ ERRORS
Include errors of requested quantities.
BOOST_PP_SEQ_FOR_EACH(INSTANTIATE_COLUMNVIEW_SCALAR, _, BOOST_PP_TUPLE_TO_SEQ(AFW_TABLE_SCALAR_FIELD_TYPE_N, AFW_TABLE_SCALAR_FIELD_TYPE_TUPLE)) BOOST_PP_SEQ_FOR_EACH(INSTANTIATE_COLUMNVIEW_ARRAY
A base class for image defects.
VariancePtr getVariance() const
Return a (shared_ptr to) the MaskedImage's variance.
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
BackgroundMI & operator+=(float const delta) override
Add a scalar to the Background (equivalent to adding a constant to the original image)
std::vector< int > _xorig
x origin pix coords of sub images
Interpolate::Style lookupMaxInterpStyle(int const n)
Get the highest order Interpolation::Style available for 'n' points.
#define LSST_makeBackground_getApproximate_types
Reports invalid arguments.
int getMaxY() const noexcept
int getMaxX() const noexcept
Interpolate::Style _asUsedInterpStyle
the style we actually used
Reports attempts to access elements outside a valid range of indices.
An integer coordinate rectangle.
lsst::geom::Box2I _imgBBox
size and origin of input image
int getMinX() const noexcept
ImagePtr getImage() const
Return a (shared_ptr to) the MaskedImage's image.
Provides consistent interface for LSST exceptions.
BackgroundMI & operator-=(float const delta) override
Subtract a scalar from the Background (equivalent to subtracting a constant from the original image)
y_iterator col_end(int x) const
Return an y_iterator to the start of the y'th row.
std::vector< double > _ycen
y center ...
int getMinY() const noexcept
Property getStatisticsProperty() const