Coverage for python/lsst/afw/image/_coaddInputsContinued.py: 35%

19 statements  

« prev     ^ index     » next       coverage.py v7.14.1, created at 2026-05-29 01:20 -0700

1# This file is part of afw. 

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 

19from lsst.utils import continueClass 

20 

21from ._imageLib import CoaddInputs 

22 

23import numpy as np 

24 

25__all__ = [] # import this module only for its side effects 

26 

27 

28@continueClass 

29class CoaddInputs: # noqa: F811 

30 

31 def subset_containing_ccds(self, point, wcs, includeValidPolygon=False): 

32 """Return a view (shallow copy) of ExposureCatalog containing only the 

33 subset of detectors that contain the given point. 

34 

35 Parameters 

36 ---------- 

37 point : `~lsst.geom.Point2D` 

38 Point in the coadd coordinate system. 

39 wcs : `lsst.geom.SkyWcs` 

40 WCS for the coadd coordinate system. This is ignored if the 

41 CoaddInputs are made by stitching cell_coadds. 

42 includeValidPolygon : `bool`, optional 

43 If True, check that the point is within the validPolygon of those records which have one. 

44 

45 Returns 

46 ------- 

47 subset : `~lsst.afw.table.ExposureCatalog` 

48 ExposureCatalog containing only the relevant detector records. 

49 """ 

50 

51 ccds = self.ccds 

52 # If the records have a WCS attached, we interpret that to mean that 

53 # they come from a genuine afw exposure. If not, we interpret that to 

54 # mean they come from cell_coadds. For the latter, the validPolygons 

55 # are already in coadd coordinates and WCS lookup is not needed. 

56 if len(ccds) == 0 or ccds[0].wcs is not None: 

57 return ccds.subsetContaining(point, wcs, includeValidPolygon) 

58 else: 

59 cuts = np.array([record.validPolygon.contains(point) for record in ccds]) 

60 return ccds[cuts] 

61 

62 def subset_containing_visits(self, point, wcs, includeValidPolygon=False): 

63 """Return a view (shallow copy) of ExposureCatalog containing only the 

64 subset of visits that contain the given point. 

65 

66 Parameters 

67 ---------- 

68 point : `~lsst.geom.Point2D` 

69 Point in the coadd coordinate system. 

70 wcs : `lsst.geom.SkyWcs` 

71 WCS for the coadd coordinate system. This is ignored if the 

72 CoaddInputs are made by stitching cell_coadds. 

73 includeValidPolygon : `bool`, optional 

74 If True, check that the point is within the validPolygon of those records which have one. 

75 

76 Returns 

77 ------- 

78 subset : `~lsst.afw.table.ExposureCatalog` 

79 ExposureCatalog containing only the relevant visit records. 

80 """ 

81 

82 visits = self.visits 

83 if len(visits) == 0 or visits[0].wcs is not None: 

84 return visits.subsetContaining(point, wcs, includeValidPolygon) 

85 else: 

86 ccd_cuts = np.array([record.validPolygon.contains(point) for record in self.ccds]) 

87 visit_cuts = np.isin(visits["visit"], self.ccds["visit"][ccd_cuts]) 

88 return visits[visit_cuts]