LSSTApplications  18.1.0
LSSTDataManagementBasePackage
processCcd.py
Go to the documentation of this file.
1 #
2 # LSST Data Management System
3 # Copyright 2008-2016 AURA/LSST.
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 <https://www.lsstcorp.org/LegalNotices/>.
21 #
22 from lsst.ip.isr import IsrTask
23 import lsst.pex.config as pexConfig
24 import lsst.pipe.base as pipeBase
25 from .calibrate import CalibrateTask
26 from .characterizeImage import CharacterizeImageTask
27 
28 __all__ = ["ProcessCcdConfig", "ProcessCcdTask"]
29 
30 
31 class ProcessCcdConfig(pexConfig.Config):
32  """Config for ProcessCcd"""
33  isr = pexConfig.ConfigurableField(
34  target=IsrTask,
35  doc="""Task to perform instrumental signature removal or load a post-ISR image; ISR consists of:
36  - assemble raw amplifier images into an exposure with image, variance and mask planes
37  - perform bias subtraction, flat fielding, etc.
38  - mask known bad pixels
39  - provide a preliminary WCS
40  """,
41  )
42  charImage = pexConfig.ConfigurableField(
43  target=CharacterizeImageTask,
44  doc="""Task to characterize a science exposure:
45  - detect sources, usually at high S/N
46  - estimate the background, which is subtracted from the image and returned as field "background"
47  - estimate a PSF model, which is added to the exposure
48  - interpolate over defects and cosmic rays, updating the image, variance and mask planes
49  """,
50  )
51  doCalibrate = pexConfig.Field(
52  dtype=bool,
53  default=True,
54  doc="Perform calibration?",
55  )
56  calibrate = pexConfig.ConfigurableField(
57  target=CalibrateTask,
58  doc="""Task to perform astrometric and photometric calibration:
59  - refine the WCS in the exposure
60  - refine the PhotoCalib object in the exposure
61  - detect sources, usually at low S/N
62  """,
63  )
64 
65  def setDefaults(self):
66  self.isr.doWrite = False
67  self.charImage.doWriteExposure = False
68  self.charImage.detection.doTempLocalBackground = False
69  self.calibrate.detection.doTempLocalBackground = False
70  self.calibrate.deblend.maxFootprintSize = 2000
71 
72 
78 
79 
80 class ProcessCcdTask(pipeBase.CmdLineTask):
81  r"""!Assemble raw data, fit the PSF, detect and measure, and fit WCS and zero-point
82 
83  @anchor ProcessCcdTask_
84 
85  @section pipe_tasks_processCcd_Contents Contents
86 
87  - @ref pipe_tasks_processCcd_Purpose
88  - @ref pipe_tasks_processCcd_Initialize
89  - @ref pipe_tasks_processCcd_IO
90  - @ref pipe_tasks_processCcd_Config
91  - @ref pipe_tasks_processCcd_Debug
92  - @ref pipe_tasks_processCcd_Example
93 
94  @section pipe_tasks_processCcd_Purpose Description
95 
96  Perform the following operations:
97  - Call isr to unpersist raw data and assemble it into a post-ISR exposure
98  - Call charImage subtract background, fit a PSF model, repair cosmic rays,
99  detect and measure bright sources, and measure aperture correction
100  - Call calibrate to perform deep detection, deblending and single-frame measurement,
101  refine the WCS and fit the photometric zero-point
102 
103  @section pipe_tasks_processCcd_Initialize Task initialisation
104 
105  @copydoc \_\_init\_\_
106 
107  @section pipe_tasks_processCcd_IO Invoking the Task
108 
109  This task is primarily designed to be run from the command line.
110 
111  The main method is `runDataRef`, which takes a single butler data reference for the raw input data.
112 
113  @section pipe_tasks_processCcd_Config Configuration parameters
114 
115  See @ref ProcessCcdConfig
116 
117  @section pipe_tasks_processCcd_Debug Debug variables
118 
119  ProcessCcdTask has no debug output, but its subtasks do.
120 
121  @section pipe_tasks_processCcd_Example A complete example of using ProcessCcdTask
122 
123  The following commands will process all raw data in obs_test's data repository.
124  Note: be sure to specify an `--output` that does not already exist:
125 
126  setup obs_test
127  setup pipe_tasks
128  processCcd.py $OBS_TEST_DIR/data/input --output processCcdOut --id
129 
130  The data is read from the small repository in the `obs_test` package and written `./processCcdOut`
131  (or whatever output you specified). Specifying `--id` with no values processes all data.
132  Add the option `--help` to see more options.
133  """
134  ConfigClass = ProcessCcdConfig
135  RunnerClass = pipeBase.ButlerInitializedTaskRunner
136  _DefaultName = "processCcd"
137 
138  def __init__(self, butler=None, psfRefObjLoader=None, astromRefObjLoader=None, photoRefObjLoader=None,
139  **kwargs):
140  """!
141  @param[in] butler The butler is passed to the refObjLoader constructor in case it is
142  needed. Ignored if the refObjLoader argument provides a loader directly.
143  @param[in] psfRefObjLoader An instance of LoadReferenceObjectsTasks that supplies an
144  external reference catalog for image characterization. May be None if the desired
145  loader can be constructed from the butler argument or all steps requiring a catalog
146  are disabled.
147  @param[in] astromRefObjLoader An instance of LoadReferenceObjectsTasks that supplies an
148  external reference catalog for astrometric calibration. May be None if the desired
149  loader can be constructed from the butler argument or all steps requiring a reference
150  catalog are disabled.
151  @param[in] photoRefObjLoader An instance of LoadReferenceObjectsTasks that supplies an
152  external reference catalog for photometric calibration. May be None if the desired
153  loader can be constructed from the butler argument or all steps requiring a reference
154  catalog are disabled.
155  @param[in,out] kwargs other keyword arguments for lsst.pipe.base.CmdLineTask
156  """
157  pipeBase.CmdLineTask.__init__(self, **kwargs)
158  self.makeSubtask("isr")
159  self.makeSubtask("charImage", butler=butler, refObjLoader=psfRefObjLoader)
160  self.makeSubtask("calibrate", butler=butler, icSourceSchema=self.charImage.schema,
161  astromRefObjLoader=astromRefObjLoader, photoRefObjLoader=photoRefObjLoader)
162 
163  @pipeBase.timeMethod
164  def runDataRef(self, sensorRef):
165  """Process one CCD
166 
167  The sequence of operations is:
168  - remove instrument signature
169  - characterize image to estimate PSF and background
170  - calibrate astrometry and photometry
171 
172  @param sensorRef: butler data reference for raw data
173 
174  @return pipe_base Struct containing these fields:
175  - charRes: object returned by image characterization task; an lsst.pipe.base.Struct
176  that will include "background" and "sourceCat" fields
177  - calibRes: object returned by calibration task: an lsst.pipe.base.Struct
178  that will include "background" and "sourceCat" fields
179  - exposure: final exposure (an lsst.afw.image.ExposureF)
180  - background: final background model (an lsst.afw.math.BackgroundList)
181  """
182  self.log.info("Processing %s" % (sensorRef.dataId))
183 
184  exposure = self.isr.runDataRef(sensorRef).exposure
185 
186  charRes = self.charImage.runDataRef(
187  dataRef=sensorRef,
188  exposure=exposure,
189  doUnpersist=False,
190  )
191  exposure = charRes.exposure
192 
193  if self.config.doCalibrate:
194  calibRes = self.calibrate.runDataRef(
195  dataRef=sensorRef,
196  exposure=charRes.exposure,
197  background=charRes.background,
198  doUnpersist=False,
199  icSourceCat=charRes.sourceCat,
200  )
201 
202  return pipeBase.Struct(
203  charRes=charRes,
204  calibRes=calibRes if self.config.doCalibrate else None,
205  exposure=exposure,
206  background=calibRes.background if self.config.doCalibrate else charRes.background,
207  )
208 
209  @classmethod
210  def _makeArgumentParser(cls):
211  """!Create and return an argument parser
212 
213  @param[in] cls the class object
214  @return the argument parser for this task.
215 
216  This override is used to delay making the data ref list until the dataset type is known;
217  this is done in @ref parseAndRun.
218  """
219  parser = pipeBase.ArgumentParser(name=cls._DefaultName)
220  parser.add_id_argument(name="--id",
221  datasetType=pipeBase.ConfigDatasetType(name="isr.datasetType"),
222  help="data IDs, e.g. --id visit=12345 ccd=1,2^0,3")
223  return parser
Assemble raw data, fit the PSF, detect and measure, and fit WCS and zero-point.
Definition: processCcd.py:80
def __init__(self, butler=None, psfRefObjLoader=None, astromRefObjLoader=None, photoRefObjLoader=None, kwargs)
Definition: processCcd.py:139