Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1# 

2# LSST Data Management System 

3# 

4# Copyright 2008-2017 AURA/LSST. 

5# 

6# This product includes software developed by the 

7# LSST Project (http://www.lsst.org/). 

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 LSST License Statement and 

20# the GNU General Public License along with this program. If not, 

21# see <https://www.lsstcorp.org/LegalNotices/>. 

22# 

23 

24__all__ = ["BasePsfDeterminerConfig", "BasePsfDeterminerTask", "psfDeterminerRegistry"] 

25 

26import abc 

27 

28import lsst.pipe.base as pipeBase 

29import lsst.pex.config as pexConfig 

30 

31 

32class BasePsfDeterminerConfig(pexConfig.Config): 

33 """Configuration that is likely to be shared by all PSF determiners 

34 

35 This is fairly sparse; more fields can be moved here once it is clear they are universal. 

36 """ 

37 kernelSize = pexConfig.Field( 

38 doc="radius of the kernel to create, relative to the square root of the stellar quadrupole moments", 

39 dtype=float, 

40 default=10.0, 

41 ) 

42 kernelSizeMin = pexConfig.Field( 

43 doc="Minimum radius of the kernel", 

44 dtype=int, 

45 default=25, 

46 ) 

47 kernelSizeMax = pexConfig.Field( 

48 doc="Maximum radius of the kernel", 

49 dtype=int, 

50 default=45, 

51 ) 

52 

53 

54class BasePsfDeterminerTask(pipeBase.Task, metaclass=abc.ABCMeta): 

55 """!Base class for PSF determiners 

56 

57 Register all PSF determiners with the psfDeterminerRegistry using: 

58 psfDeterminerRegistry.register(name, class) 

59 """ 

60 

61 usesMatches = False # Does the PSF determiner use the "matches" argument in the "run method? Few do. 

62 ConfigClass = BasePsfDeterminerConfig 

63 _DefaultName = "psfDeterminer" 

64 

65 def __init__(self, config, schema=None, **kwds): 

66 """Construct a PSF Determiner 

67 

68 @param[in] config an instance of pexConfig.Config that configures this algorithm 

69 @param[in,out] schema an instance of afw.table.Schema used for sources; passing a 

70 schema allows the determiner to reserve a flag field to mark stars 

71 used in PSF measurement, but some PSF determiners ignore this argument 

72 """ 

73 pipeBase.Task.__init__(self, config=config, **kwds) 

74 

75 @abc.abstractmethod 

76 def determinePsf(self, exposure, psfCandidateList, metadata=None): 

77 """Determine a PSF model 

78 

79 @param[in] exposure exposure containing the psf candidates (lsst.afw.image.Exposure) 

80 @param[in] psfCandidateList: a sequence of PSF candidates (each an 

81 lsst.meas.algorithms.PsfCandidate); typically obtained by 

82 detecting sources and then running them through a star selector 

83 @param[in,out] metadata a place to save interesting items 

84 

85 @return 

86 - psf: the fit PSF; a subclass of lsst.afw.detection.Psf 

87 - cellSet: the spatial cell set used to determine the PSF (lsst.afw.math.SpatialCellSet) 

88 """ 

89 raise NotImplementedError("BasePsfDeterminerTask is abstract, subclasses must override this method") 

90 

91 

92psfDeterminerRegistry = pexConfig.makeRegistry( 

93 doc="A registry of PSF determiners (subclasses of BasePsfDeterminerTask)", 

94)