23 import lsst.pex.config 
as pexConfig
 
   25 from .calibrate 
import CalibrateTask
 
   26 from .characterizeImage 
import CharacterizeImageTask
 
   28 __all__ = [
"ProcessCcdConfig", 
"ProcessCcdTask"]
 
   32     """Config for ProcessCcd""" 
   33     isr = pexConfig.ConfigurableField(
 
   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 
   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 
   51     doCalibrate = pexConfig.Field(
 
   54         doc=
"Perform calibration?",
 
   56     calibrate = pexConfig.ConfigurableField(
 
   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 
   66         self.
isr.doWrite = 
False 
   78     r"""!Assemble raw data, fit the PSF, detect and measure, and fit WCS and zero-point 
   80     @anchor ProcessCcdTask_ 
   82     @section pipe_tasks_processCcd_Contents  Contents 
   84      - @ref pipe_tasks_processCcd_Purpose 
   85      - @ref pipe_tasks_processCcd_Initialize 
   86      - @ref pipe_tasks_processCcd_IO 
   87      - @ref pipe_tasks_processCcd_Config 
   88      - @ref pipe_tasks_processCcd_Debug 
   89      - @ref pipe_tasks_processCcd_Example 
   91     @section pipe_tasks_processCcd_Purpose  Description 
   93     Perform the following operations: 
   94     - Call isr to unpersist raw data and assemble it into a post-ISR exposure 
   95     - Call charImage subtract background, fit a PSF model, repair cosmic rays, 
   96         detect and measure bright sources, and measure aperture correction 
   97     - Call calibrate to perform deep detection, deblending and single-frame measurement, 
   98         refine the WCS and fit the photometric zero-point 
  100     @section pipe_tasks_processCcd_Initialize  Task initialisation 
  102     @copydoc \_\_init\_\_ 
  104     @section pipe_tasks_processCcd_IO  Invoking the Task 
  106     This task is primarily designed to be run from the command line. 
  108     The main method is `runDataRef`, which takes a single butler data reference for the raw input data. 
  110     @section pipe_tasks_processCcd_Config  Configuration parameters 
  112     See @ref ProcessCcdConfig 
  114     @section pipe_tasks_processCcd_Debug  Debug variables 
  116     ProcessCcdTask has no debug output, but its subtasks do. 
  118     @section pipe_tasks_processCcd_Example   A complete example of using ProcessCcdTask 
  120     The following commands will process all raw data in obs_test's data repository. 
  121     Note: be sure to specify an `--output` that does not already exist: 
  125         processCcd.py $OBS_TEST_DIR/data/input --output processCcdOut --id 
  127     The data is read from the small repository in the `obs_test` package and written `./processCcdOut` 
  128     (or whatever output you specified). Specifying `--id` with no values processes all data. 
  129     Add the option `--help` to see more options. 
  131     ConfigClass = ProcessCcdConfig
 
  132     RunnerClass = pipeBase.ButlerInitializedTaskRunner
 
  133     _DefaultName = 
"processCcd" 
  135     def __init__(self, butler=None, psfRefObjLoader=None, astromRefObjLoader=None, photoRefObjLoader=None,
 
  138         @param[in] butler  The butler is passed to the refObjLoader constructor in case it is 
  139             needed.  Ignored if the refObjLoader argument provides a loader directly. 
  140         @param[in] psfRefObjLoader  An instance of LoadReferenceObjectsTasks that supplies an 
  141             external reference catalog for image characterization.  May be None if the desired 
  142             loader can be constructed from the butler argument or all steps requiring a catalog 
  144         @param[in] astromRefObjLoader  An instance of LoadReferenceObjectsTasks that supplies an 
  145             external reference catalog for astrometric calibration.  May be None if the desired 
  146             loader can be constructed from the butler argument or all steps requiring a reference 
  147             catalog are disabled. 
  148         @param[in] photoRefObjLoader  An instance of LoadReferenceObjectsTasks that supplies an 
  149             external reference catalog for photometric calibration.  May be None if the desired 
  150             loader can be constructed from the butler argument or all steps requiring a reference 
  151             catalog are disabled. 
  152         @param[in,out] kwargs  other keyword arguments for lsst.pipe.base.CmdLineTask 
  154         pipeBase.CmdLineTask.__init__(self, **kwargs)
 
  155         self.makeSubtask(
"isr")
 
  156         self.makeSubtask(
"charImage", butler=butler, refObjLoader=psfRefObjLoader)
 
  157         self.makeSubtask(
"calibrate", butler=butler, icSourceSchema=self.charImage.schema,
 
  158                          astromRefObjLoader=astromRefObjLoader, photoRefObjLoader=photoRefObjLoader)
 
  164         The sequence of operations is: 
  165         - remove instrument signature 
  166         - characterize image to estimate PSF and background 
  167         - calibrate astrometry and photometry 
  169         @param sensorRef: butler data reference for raw data 
  171         @return pipe_base Struct containing these fields: 
  172         - charRes: object returned by image characterization task; an lsst.pipe.base.Struct 
  173             that will include "background" and "sourceCat" fields 
  174         - calibRes: object returned by calibration task: an lsst.pipe.base.Struct 
  175             that will include "background" and "sourceCat" fields 
  176         - exposure: final exposure (an lsst.afw.image.ExposureF) 
  177         - background: final background model (an lsst.afw.math.BackgroundList) 
  179         self.log.
info(
"Processing %s" % (sensorRef.dataId))
 
  181         exposure = self.isr.
runDataRef(sensorRef).exposure
 
  188         exposure = charRes.exposure
 
  190         if self.config.doCalibrate:
 
  193                 exposure=charRes.exposure,
 
  194                 background=charRes.background,
 
  196                 icSourceCat=charRes.sourceCat,
 
  199         return pipeBase.Struct(
 
  201             calibRes=calibRes 
if self.config.doCalibrate 
else None,
 
  203             background=calibRes.background 
if self.config.doCalibrate 
else charRes.background,
 
  207     def _makeArgumentParser(cls):
 
  208         """!Create and return an argument parser 
  210         @param[in] cls      the class object 
  211         @return the argument parser for this task. 
  213         This override is used to delay making the data ref list until the dataset type is known; 
  214         this is done in @ref parseAndRun. 
  217         parser.add_id_argument(name=
"--id",
 
  218                                datasetType=pipeBase.ConfigDatasetType(name=
"isr.datasetType"),
 
  219                                help=
"data IDs, e.g. --id visit=12345 ccd=1,2^0,3")