1from lsst.pipe.base
import ArgumentParser, ButlerInitializedTaskRunner, ConfigDatasetType
2from lsst.pipe.tasks.processCcd
import ProcessCcdTask
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"""
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:
60 self.makeSubtask(
"writeSourceTable")
61 self.makeSubtask(
"transformSourceTable")
64 def _makeArgumentParser(cls, *args, **kwargs):
65 kwargs.pop(
"doBatch",
False)
66 parser = ArgumentParser(name=
"singleFrameDriver", *args, **kwargs)
67 parser.add_id_argument(
"--id",
68 datasetType=ConfigDatasetType(
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.
77 if sensorRef.dataId[self.config.ccdKey]
in self.
ignoreCcds:
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)
def logOperation(self, operation, catch=False, trace=True)
def runDataRef(self, sensorRef)
def __init__(self, butler=None, psfRefObjLoader=None, astromRefObjLoader=None, photoRefObjLoader=None, *args, **kwargs)
Constructor.