1 from lsst.pipe.base import ArgumentParser, ButlerInitializedTaskRunner, ConfigDatasetType
 
    4 from lsst.pex.config 
import Config, Field, ConfigurableField, ListField
 
    9     processCcd = ConfigurableField(
 
   10         target=ProcessCcdTask, doc=
"CCD processing task")
 
   11     doMakeSourceTable = Field(dtype=bool, default=
False,
 
   12                               doc=
"Do postprocessing tasks to write parquet Source Table?")
 
   13     doSaveWideSourceTable = Field(dtype=bool, default=
False,
 
   14                                   doc=(
"Save the parquet version of the full src catalog?",
 
   15                                        "Only respected if doMakeSourceTable"))
 
   16     writeSourceTable = ConfigurableField(
 
   17         target=WriteSourceTableTask, doc=
"Task to make parquet table for full src catalog")
 
   18     transformSourceTable = ConfigurableField(
 
   19         target=TransformSourceTableTask, doc=
"Transform Source Table to DPDD specification")
 
   20     ignoreCcdList = ListField(dtype=int, default=[],
 
   21                               doc=
"List of CCDs to ignore when processing")
 
   22     ccdKey = Field(dtype=str, default=
"ccd",
 
   23                    doc=
"DataId key corresponding to a single sensor")
 
   27     """Run batches, and initialize Task using a butler""" 
   31 class SingleFrameDriverTask(BatchParallelTask):
 
   32     """Process CCDs in parallel 
   34     ConfigClass = SingleFrameDriverConfig
 
   35     _DefaultName = 
"singleFrameDriver" 
   36     RunnerClass = SingleFrameTaskRunner
 
   38     def __init__(self, butler=None, psfRefObjLoader=None, astromRefObjLoader=None, photoRefObjLoader=None,
 
   43         The psfRefObjLoader, astromRefObjLoader, photoRefObjLoader should 
   44         be an instance of LoadReferenceObjectsTasks that supplies an external 
   45         reference catalog. They may be None if the butler argument is 
   46         provided or the particular reference catalog is not required. 
   48         @param[in] butler  The butler is passed to the refObjLoader constructor in case it is 
   49             needed.  Ignored if the refObjLoader argument provides a loader directly. 
   50         @param[in] psfRefObjLoader  Reference catalog loader for PSF determination. 
   51         @param[in] astromRefObjLoader  Reference catalog loader for astrometric calibration. 
   52         @param[in] photoRefObjLoader Reference catalog loader for photometric calibration. 
   53         @param[in,out] kwargs  other keyword arguments for lsst.ctrl.pool.BatchParallelTask 
   55         BatchParallelTask.__init__(self, *args, **kwargs)
 
   57         self.
makeSubtask(
"processCcd", butler=butler, psfRefObjLoader=psfRefObjLoader,
 
   58                          astromRefObjLoader=astromRefObjLoader, photoRefObjLoader=photoRefObjLoader)
 
   59         if self.
config.doMakeSourceTable:
 
   64     def _makeArgumentParser(cls, *args, **kwargs):
 
   65         kwargs.pop(
"doBatch", 
False)
 
   67         parser.add_id_argument(
"--id",
 
   69                                    name=
"processCcd.isr.datasetType"),
 
   71                                help=
"data ID, e.g. --id visit=12345 ccd=67")
 
   75         """Process a single CCD, with scatter-gather-scatter using MPI. 
   78             self.
log.
warn(
"Ignoring %s: CCD in ignoreCcdList" %
 
   82         with self.
logOperation(
"processing %s" % (sensorRef.dataId,)):
 
   84             if self.
config.doMakeSourceTable:
 
   85                 parquet = self.writeSourceTable.
run(result.calibRes.sourceCat,
 
   86                                                     ccdVisitId=sensorRef.get(
'ccdExposureId'))
 
   87                 if self.
config.doSaveWideSourceTable:
 
   88                     sensorRef.put(parquet.table, 
'source')
 
   90                 df = self.transformSourceTable.
run(parquet.table,
 
   91                                                    funcs=self.transformSourceTable.getFunctors(),
 
   92                                                    dataId=sensorRef.dataId)
 
   93                 self.transformSourceTable.
write(df, sensorRef)