Coverage for python/lsst/pipe/tasks/drpDiaCalculationPipe.py: 68%

26 statements  

« prev     ^ index     » next       coverage.py v7.3.1, created at 2023-09-23 10:45 +0000

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"""Pipeline for computing DiaObject summary/light curve values. 

23""" 

24 

25__all__ = ["DrpDiaCalculationPipeTask", 

26 "DrpDiaCalculationPipeConfig", 

27 "DrpDiaCalculationPipeConnections"] 

28 

29import pandas as pd 

30 

31from lsst.meas.base import DiaObjectCalculationTask 

32import lsst.pex.config as pexConfig 

33import lsst.pipe.base as pipeBase 

34 

35 

36class DrpDiaCalculationPipeConnections(pipeBase.PipelineTaskConnections, 

37 dimensions=("tract", "patch", "skymap"), 

38 defaultTemplates={"coaddName": "deep", 

39 "fakesType": ""}): 

40 assocDiaSourceTable = pipeBase.connectionTypes.Input( 

41 doc="Catalog of DiaSources covering the patch and associated with a " 

42 "DiaObject.", 

43 name="{fakesType}{coaddName}Diff_assocDiaSrcTable", 

44 storageClass="DataFrame", 

45 dimensions=("tract", "patch"), 

46 ) 

47 diaObjectTable = pipeBase.connectionTypes.Input( 

48 doc="Catalog of DiaObjects created from spatially associating " 

49 "DiaSources.", 

50 name="{fakesType}{coaddName}Diff_diaObjTable", 

51 storageClass="DataFrame", 

52 dimensions=("tract", "patch"), 

53 ) 

54 fullDiaObjectTable = pipeBase.connectionTypes.Output( 

55 doc="Catalog of DiaObjects created from spatially associating " 

56 "DiaSources.", 

57 name="{fakesType}{coaddName}Diff_fullDiaObjTable", 

58 storageClass="DataFrame", 

59 dimensions=("tract", "patch"), 

60 ) 

61 

62 

63class DrpDiaCalculationPipeConfig( 

64 pipeBase.PipelineTaskConfig, 

65 pipelineConnections=DrpDiaCalculationPipeConnections): 

66 filterNames = pexConfig.ListField( 

67 dtype=str, 

68 default=['u', 'g', 'r', 'i', 'z', 'y'], 

69 doc="List of filters to attempt to calculate DiaObject summary " 

70 "values." 

71 ) 

72 diaCalculation = pexConfig.ConfigurableField( 

73 target=DiaObjectCalculationTask, 

74 doc="Task to compute summary statistics for DiaObjects.", 

75 ) 

76 

77 def setDefaults(self): 

78 self.diaCalculation.plugins = ["ap_meanPosition", 

79 "ap_diaObjectFlag", 

80 "ap_meanFlux", 

81 "ap_percentileFlux", 

82 "ap_sigmaFlux", 

83 "ap_chi2Flux", 

84 "ap_madFlux", 

85 "ap_skewFlux", 

86 "ap_minMaxFlux", 

87 "ap_maxSlopeFlux", 

88 "ap_meanErrFlux", 

89 "ap_linearFit", 

90 "ap_stetsonJ", 

91 "ap_meanTotFlux", 

92 "ap_sigmaTotFlux"] 

93 

94 

95class DrpDiaCalculationPipeTask(pipeBase.PipelineTask): 

96 """Driver pipeline for loading DiaSource catalogs in a patch/tract 

97 region and associating them. 

98 """ 

99 ConfigClass = DrpDiaCalculationPipeConfig 

100 _DefaultName = "drpDiaCalculation" 

101 

102 def __init__(self, **kwargs): 

103 super().__init__(**kwargs) 

104 self.makeSubtask("diaCalculation") 

105 

106 def run(self, assocDiaSourceTable, diaObjectTable): 

107 """Compute summary statistics over the input set of DiaSources and 

108 store summary statistics into the associated DiaObjects. 

109 

110 Parameters 

111 ---------- 

112 assocDiaSourceTable : `pandas.DataFrame` 

113 Set of DiaSources spatially associated into the DiaObjects in 

114 ``diaObjectTable``. 

115 diaObjectTable : `pandas.DataFrame` 

116 DiaObjects created from associating the sources in 

117 ``assocDiaSourceTable``. All ids in the catalog must have a 

118 corresponding DiaSource in the input catalog. 

119 

120 Returns 

121 ------- 

122 results : `lsst.pipe.base.Struct` 

123 Struct containing 

124 

125 ``fullDiaObjectTable`` 

126 DiaObjects with computed summary statistics based on their 

127 associated DiaSource light curves. (`pandas.DataFrame`). 

128 """ 

129 # Return empty dataFrame if no DiaObjects in this patch. 

130 if len(diaObjectTable) <= 0 or len(assocDiaSourceTable) <= 0: 

131 return pipeBase.Struct(fullDiaObjectTable=pd.DataFrame()) 

132 result = self.diaCalculation.run( 

133 diaObjectTable, 

134 assocDiaSourceTable, 

135 diaObjectTable.index.to_numpy(), 

136 self.config.filterNames) 

137 return pipeBase.Struct(fullDiaObjectTable=result.updatedDiaObjects)