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

26 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2022-08-18 20:09 +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 

23"""Pipeline for computing DiaObject summary/light curve values. 

24""" 

25 

26__all__ = ["DrpDiaCalculationPipeTask", 

27 "DrpDiaCalculationPipeConfig", 

28 "DrpDiaCalculationPipeConnections"] 

29 

30import pandas as pd 

31 

32from lsst.meas.base import DiaObjectCalculationTask 

33import lsst.pex.config as pexConfig 

34import lsst.pipe.base as pipeBase 

35 

36 

37class DrpDiaCalculationPipeConnections(pipeBase.PipelineTaskConnections, 

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

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

40 "fakesType": ""}): 

41 assocDiaSourceTable = pipeBase.connectionTypes.Input( 

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

43 "DiaObject.", 

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

45 storageClass="DataFrame", 

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

47 ) 

48 diaObjectTable = pipeBase.connectionTypes.Input( 

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

50 "DiaSources.", 

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

52 storageClass="DataFrame", 

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

54 ) 

55 fullDiaObjectTable = pipeBase.connectionTypes.Output( 

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

57 "DiaSources.", 

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

59 storageClass="DataFrame", 

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

61 ) 

62 

63 

64class DrpDiaCalculationPipeConfig( 

65 pipeBase.PipelineTaskConfig, 

66 pipelineConnections=DrpDiaCalculationPipeConnections): 

67 filterNames = pexConfig.ListField( 

68 dtype=str, 

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

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

71 "values." 

72 ) 

73 diaCalculation = pexConfig.ConfigurableField( 

74 target=DiaObjectCalculationTask, 

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

76 ) 

77 

78 def setDefaults(self): 

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

80 "ap_diaObjectFlag", 

81 "ap_meanFlux", 

82 "ap_percentileFlux", 

83 "ap_sigmaFlux", 

84 "ap_chi2Flux", 

85 "ap_madFlux", 

86 "ap_skewFlux", 

87 "ap_minMaxFlux", 

88 "ap_maxSlopeFlux", 

89 "ap_meanErrFlux", 

90 "ap_linearFit", 

91 "ap_stetsonJ", 

92 "ap_meanTotFlux", 

93 "ap_sigmaTotFlux"] 

94 

95 

96class DrpDiaCalculationPipeTask(pipeBase.PipelineTask): 

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

98 region and associating them. 

99 """ 

100 ConfigClass = DrpDiaCalculationPipeConfig 

101 _DefaultName = "drpDiaCalculation" 

102 

103 def __init__(self, **kwargs): 

104 super().__init__(**kwargs) 

105 self.makeSubtask("diaCalculation") 

106 

107 def run(self, assocDiaSourceTable, diaObjectTable): 

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

109 store summary statistics into the associated DiaObjects. 

110 

111 Parameters 

112 ---------- 

113 assocDiaSourceTable : `pandas.DataFrame` 

114 Set of DiaSources spatially associated into the DiaObjects in 

115 ``diaObjectTable``. 

116 diaObjectTable : `pandas.DataFrame` 

117 DiaObjects created from associating the sources in 

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

119 corresponding DiaSource in the input catalog. 

120 

121 Returns 

122 ------- 

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

124 Struct containing 

125 

126 ``fullDiaObjectTable`` 

127 DiaObjects with computed summary statistics based on their 

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

129 """ 

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

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

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

133 result = self.diaCalculation.run( 

134 diaObjectTable, 

135 assocDiaSourceTable, 

136 diaObjectTable.index.to_numpy(), 

137 self.config.filterNames) 

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