LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
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:92
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