Coverage for python/lsst/meas/modelfit/cmodel/cmodelContinued.py: 66%

43 statements  

« prev     ^ index     » next       coverage.py v7.5.0, created at 2024-04-26 03:37 -0700

1# 

2# LSST Data Management System 

3# Copyright 2008-2017 LSST/AURA. 

4# 

5# This product includes software developed by the 

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

7# 

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

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

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

11# (at your option) any later version. 

12# 

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

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

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

16# GNU General Public License for more details. 

17# 

18# You should have received a copy of the LSST License Statement and 

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

20# see <http://www.lsstcorp.org/LegalNotices/>. 

21# 

22 

23# The Plugin classes here are accessed via registries, not direct imports. 

24__all__ = ("CModelStageConfig", "CModelConfig") 

25 

26from .._modelfitLib import CModelStageControl, CModelControl, CModelAlgorithm 

27 

28from lsst.pex.config import makeConfigClass 

29import lsst.meas.base 

30 

31 

32CModelStageConfig = makeConfigClass(CModelStageControl) 

33CModelConfig = makeConfigClass(CModelControl) 

34 

35apCorrList = ("modelfit_CModel", "modelfit_CModel_initial", "modelfit_CModel_exp", "modelfit_CModel_dev") 

36 

37 

38class CModelSingleFrameConfig(lsst.meas.base.SingleFramePluginConfig, CModelConfig): 

39 

40 def setDefaults(self): 

41 lsst.meas.base.SingleFramePluginConfig.setDefaults(self) 

42 CModelConfig.setDefaults(self) 

43 

44 

45@lsst.meas.base.register("modelfit_CModel", apCorrList=apCorrList) 

46class CModelSingleFramePlugin(lsst.meas.base.SingleFramePlugin): 

47 """Single-frame measurement interface for CModelAlgorithm. 

48 

49 This class simply provides __init__ and measure methods that matched the SingleFramePlugin signatures 

50 and delegate to the CModelAlgorithm's methods. 

51 """ 

52 ConfigClass = CModelSingleFrameConfig 

53 

54 @staticmethod 

55 def getExecutionOrder(): 

56 return 3.0 

57 

58 def __init__(self, config, name, schema, metadata): 

59 lsst.meas.base.SingleFramePlugin.__init__(self, config, name, schema, metadata) 

60 self.algorithm = CModelAlgorithm(name, config.makeControl(), schema) 

61 

62 def measure(self, measRecord, exposure): 

63 self.algorithm.measure(measRecord, exposure) 

64 

65 def fail(self, measRecord, error=None): 

66 self.algorithm.fail(measRecord, error.cpp if error is not None else None) 

67 

68 

69class CModelForcedConfig(lsst.meas.base.ForcedPluginConfig, CModelConfig): 

70 

71 def setDefaults(self): 

72 lsst.meas.base.ForcedPluginConfig.setDefaults(self) 

73 CModelConfig.setDefaults(self) 

74 

75 

76@lsst.meas.base.register("modelfit_CModel", apCorrList=apCorrList) 

77class CModelForcedPlugin(lsst.meas.base.ForcedPlugin): 

78 """Forced measurement interface for CModelAlgorithm 

79 

80 This class simply provides __init__ and measure methods that matched the ForcedPlugin signatures 

81 and delegate to CModelAlgorithm implementations. 

82 

83 The CModel algorithm currently cannot be run in forced mode when the measurement WCS is different 

84 from the reference WCS (as is the case in CCD forced photometry). This is a temporary limitation 

85 that will be addressed on DM-5405. 

86 

87 CModel forced measurement when the measurement image is the same as the reference image should be 

88 almost -- but not quite -- identical to unforced measurement. The primary difference is that 

89 the final fit region from the reference measurement will be used for the initial fit in forced mode 

90 as well as the exp, dev, and combined exp+dev fits 

91 """ 

92 ConfigClass = CModelForcedConfig 

93 

94 @staticmethod 

95 def getExecutionOrder(): 

96 return 3.0 

97 

98 def __init__(self, config, name, schemaMapper, metadata): 

99 lsst.meas.base.ForcedPlugin.__init__(self, config, name, schemaMapper, metadata) 

100 self.algorithm = CModelAlgorithm(name, config.makeControl(), schemaMapper) 

101 

102 def measure(self, measRecord, exposure, refRecord, refWcs): 

103 if refWcs != exposure.getWcs(): 

104 raise lsst.meas.base.FatalAlgorithmError( 

105 "CModel forced measurement currently requires the measurement image to have the same" 

106 " Wcs as the reference catalog (this is a temporary limitation)." 

107 ) 

108 self.algorithm.measure(measRecord, exposure, refRecord) 

109 

110 def fail(self, measRecord, error=None): 

111 self.algorithm.fail(measRecord, error.cpp if error is not None else None)