LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
drpDiaCalculationPipe.py
Go to the documentation of this file.
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 
30 import pandas as pd
31 
32 from lsst.meas.base import DiaObjectCalculationTask
33 import lsst.pex.config as pexConfig
34 import lsst.pipe.base as pipeBase
35 
36 
37 class 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 
64 class 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 
96 class 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)
def run(self, coaddExposures, bbox, wcs)
Definition: getTemplate.py:603