Loading [MathJax]/extensions/tex2jax.js
LSST Applications  21.0.0+04719a4bac,21.0.0-1-ga51b5d4+f5e6047307,21.0.0-11-g2b59f77+a9c1acf22d,21.0.0-11-ga42c5b2+86977b0b17,21.0.0-12-gf4ce030+76814010d2,21.0.0-13-g1721dae+760e7a6536,21.0.0-13-g3a573fe+768d78a30a,21.0.0-15-g5a7caf0+f21cbc5713,21.0.0-16-g0fb55c1+b60e2d390c,21.0.0-19-g4cded4ca+71a93a33c0,21.0.0-2-g103fe59+bb20972958,21.0.0-2-g45278ab+04719a4bac,21.0.0-2-g5242d73+3ad5d60fb1,21.0.0-2-g7f82c8f+8babb168e8,21.0.0-2-g8f08a60+06509c8b61,21.0.0-2-g8faa9b5+616205b9df,21.0.0-2-ga326454+8babb168e8,21.0.0-2-gde069b7+5e4aea9c2f,21.0.0-2-gecfae73+1d3a86e577,21.0.0-2-gfc62afb+3ad5d60fb1,21.0.0-25-g1d57be3cd+e73869a214,21.0.0-3-g357aad2+ed88757d29,21.0.0-3-g4a4ce7f+3ad5d60fb1,21.0.0-3-g4be5c26+3ad5d60fb1,21.0.0-3-g65f322c+e0b24896a3,21.0.0-3-g7d9da8d+616205b9df,21.0.0-3-ge02ed75+a9c1acf22d,21.0.0-4-g591bb35+a9c1acf22d,21.0.0-4-g65b4814+b60e2d390c,21.0.0-4-gccdca77+0de219a2bc,21.0.0-4-ge8a399c+6c55c39e83,21.0.0-5-gd00fb1e+05fce91b99,21.0.0-6-gc675373+3ad5d60fb1,21.0.0-64-g1122c245+4fb2b8f86e,21.0.0-7-g04766d7+cd19d05db2,21.0.0-7-gdf92d54+04719a4bac,21.0.0-8-g5674e7b+d1bd76f71f,master-gac4afde19b+a9c1acf22d,w.2021.13
LSST Data Management Base Package
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
estimateBackground.py
1 #!/usr/bin/env python
2 
3 #
4 # This file is part of afw.
5 #
6 # Developed for the LSST Data Management System.
7 # This product includes software developed by the LSST Project
8 # (https://www.lsst.org).
9 # See the COPYRIGHT file at the top-level directory of this distribution
10 # for details of code ownership.
11 #
12 # This program is free software: you can redistribute it and/or modify
13 # it under the terms of the GNU General Public License as published by
14 # the Free Software Foundation, either version 3 of the License, or
15 # (at your option) any later version.
16 #
17 # This program is distributed in the hope that it will be useful,
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # GNU General Public License for more details.
21 #
22 # You should have received a copy of the GNU General Public License
23 # along with this program. If not, see <https://www.gnu.org/licenses/>.
24 #
25 
26 import os
27 import lsst.utils
28 import lsst.afw.image as afwImage
29 import lsst.afw.math as afwMath
30 import lsst.afw.display as afwDisplay
31 
32 try:
33  display
34 except NameError:
35  display = not False
36 
37 afwDisplay.setDefaultMaskTransparency(75)
38 
39 
40 
41 
42 def getImage():
43  imagePath = os.path.join(lsst.utils.getPackageDir("afwdata"),
44  "DC3a-Sim", "sci", "v5-e0", "v5-e0-c011-a00.sci.fits")
45  return afwImage.MaskedImageF(imagePath)
46 
47 
48 def simpleBackground(image):
49  binsize = 128
50  nx = int(image.getWidth()/binsize) + 1
51  ny = int(image.getHeight()/binsize) + 1
52  bctrl = afwMath.BackgroundControl(nx, ny)
53 
54  bkgd = afwMath.makeBackground(image, bctrl)
55 
56  image -= bkgd.getImageF(afwMath.Interpolate.NATURAL_SPLINE)
57 
58  return bkgd
59 
60 
61 def complexBackground(image):
62  MaskPixel = afwImage.MaskPixel
63  binsize = 128
64  nx = int(image.getWidth()/binsize) + 1
65  ny = int(image.getHeight()/binsize) + 1
66 
68  sctrl.setNumSigmaClip(3)
69  sctrl.setNumIter(4)
70  sctrl.setAndMask(afwImage.Mask[MaskPixel].getPlaneBitMask(["INTRP",
71  "EDGE"]))
72  sctrl.setNoGoodPixelsMask(afwImage.Mask[MaskPixel].getPlaneBitMask("BAD"))
73  sctrl.setNanSafe(True)
74  if False:
75  sctrl.setWeighted(True)
76  sctrl.setCalcErrorFromInputVariance(True)
77 
78  bctrl = afwMath.BackgroundControl(nx, ny, sctrl, afwMath.MEANCLIP)
79 
80  bkgd = afwMath.makeBackground(image, bctrl)
81 
82  statsImage = bkgd.getStatsImage()
83  afwDisplay.Display(frame=3).mtv(statsImage.getVariance(), title="statsImage Variance")
84 
85  return bkgd
86 
87 
88 def main():
89  image = getImage()
90 
91  if display:
92  afwDisplay.Display(frame=0).mtv(image, title="Image")
93 
94  bkgd = simpleBackground(image)
95  image = getImage()
96  bkgd = complexBackground(image)
97 
98  if display:
99  afwDisplay.Display(frame=1).mtv(image, title="image")
100  afwDisplay.Display(frame=2).mtv(bkgd.getStatsImage(), title="background")
101 
102  order = 2
104  afwMath.ApproximateControl.CHEBYSHEV, order, order)
105  approx = bkgd.getApproximate(actrl)
106 
107  approx.getImage()
108  approx.getMaskedImage()
109  approx.getImage(order - 1)
110 
111 
112 
113 if __name__ == '__main__':
114  main()
Represent a 2-dimensional array of bitmask pixels.
Definition: Mask.h:77
Control how to make an approximation.
Definition: Approximate.h:48
Pass parameters to a Background object.
Definition: Background.h:56
Pass parameters to a Statistics object.
Definition: Statistics.h:93
def mtv(data, frame=None, title="", wcs=None, *args, **kwargs)
Definition: ds9.py:92
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects.
std::shared_ptr< Background > makeBackground(ImageT const &img, BackgroundControl const &bgCtrl)
A convenience function that uses function overloading to make the correct type of Background.
Definition: Background.h:526
std::string getPackageDir(std::string const &packageName)
return the root directory of a setup package
Definition: packaging.cc:33