Coverage for python/lsst/pipe/tasks/fakes.py: 81%

19 statements  

« prev     ^ index     » next       coverage.py v6.5.0, created at 2022-11-12 03:13 -0800

1# This file is part of pipe_tasks. 

2# 

3# Developed for the LSST Data Management System. 

4# This product includes software developed by the LSST Project 

5# (https://www.lsst.org). 

6# See the COPYRIGHT file at the top-level directory of this distribution 

7# for details of code ownership. 

8# 

9# This program is free software: you can redistribute it and/or modify 

10# it under the terms of the GNU General Public License as published by 

11# the Free Software Foundation, either version 3 of the License, or 

12# (at your option) any later version. 

13# 

14# This program is distributed in the hope that it will be useful, 

15# but WITHOUT ANY WARRANTY; without even the implied warranty of 

16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

17# GNU General Public License for more details. 

18# 

19# You should have received a copy of the GNU General Public License 

20# along with this program. If not, see <https://www.gnu.org/licenses/>. 

21 

22__all__ = ["BaseFakeSourcesConfig", "BaseFakeSourcesTask"] 

23 

24import abc 

25 

26from deprecated.sphinx import deprecated 

27 

28import lsst.pex.config 

29import lsst.pipe.base 

30import lsst.afw.image 

31 

32 

33class BaseFakeSourcesConfig(lsst.pex.config.Config): 

34 maskPlaneName = lsst.pex.config.Field( 

35 dtype=str, default="FAKE", 

36 doc="Mask plane to set on pixels affected by fakes. Will be added if not already present." 

37 ) 

38 

39 

40@deprecated(reason=("The fakes code has been deprecated in favor of ProcessCcdWithFakes. " 

41 "This will be removed after v24."), 

42 category=FutureWarning, 

43 version="24.0") 

44class BaseFakeSourcesTask(lsst.pipe.base.Task, metaclass=abc.ABCMeta): 

45 """An abstract base class for subtasks that inject fake sources into images to test completeness and 

46 other aspects of the processing. 

47 

48 This class simply adds a mask plane that subclasses should use to mark pixels that have been touched. 

49 

50 This is an abstract base class (abc) and is not intended to be directly used. To create a fake sources 

51 injector, create a child class and re-implement the required methods. 

52 """ 

53 

54 ConfigClass = BaseFakeSourcesConfig 

55 _DefaultName = "baseFakeSources" 

56 

57 def __init__(self, **kwargs): 

58 """Initialize the Task. 

59 

60 Subclasses that define their own __init__ should simply forward all arguments to the base 

61 class constructor. They can then assume self.config is an instance of their ConfigClass. 

62 

63 If an external catalog is used to add sources consistently to multiple overlapping images, 

64 that catalog should generally be loaded and attached to self here, so it can be used 

65 multiple times by the run() method. 

66 """ 

67 lsst.pipe.base.Task.__init__(self, **kwargs) 

68 lsst.afw.image.Mask[lsst.afw.image.MaskPixel].addMaskPlane(self.config.maskPlaneName) 

69 self.bitmask = lsst.afw.image.Mask[lsst.afw.image.MaskPixel]\ 

70 .getPlaneBitMask(self.config.maskPlaneName) 

71 

72 @abc.abstractmethod 

73 def run(self, exposure, background): 

74 """Add fake sources to the given Exposure, making use of the given BackgroundList if desired. 

75 

76 If pixels in the Exposure are replaced, not added to, extra care should be taken with the background, 

77 mask, and variance planes. The Exposure as given is background-subtracted (using the supplied 

78 background model) and should be returned in the same state. 

79 """ 

80 raise NotImplementedError("FakeSourcesTask is abstract, create a child class to use this method")