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
singleFrameDriver.py
Go to the documentation of this file.
1 from lsst.pipe.base import ArgumentParser, ButlerInitializedTaskRunner, ConfigDatasetType
2 from lsst.pipe.tasks.processCcd import ProcessCcdTask
3 from lsst.pipe.tasks.postprocess import WriteSourceTableTask, TransformSourceTableTask
4 from lsst.pex.config import Config, Field, ConfigurableField, ListField
5 from lsst.ctrl.pool.parallel import BatchParallelTask, BatchTaskRunner
6 
7 
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")
24 
25 
26 class SingleFrameTaskRunner(BatchTaskRunner, ButlerInitializedTaskRunner):
27  """Run batches, and initialize Task using a butler"""
28  pass
29 
30 
31 class SingleFrameDriverTask(BatchParallelTask):
32  """Process CCDs in parallel
33  """
34  ConfigClass = SingleFrameDriverConfig
35  _DefaultName = "singleFrameDriver"
36  RunnerClass = SingleFrameTaskRunner
37 
38  def __init__(self, butler=None, psfRefObjLoader=None, astromRefObjLoader=None, photoRefObjLoader=None,
39  *args, **kwargs):
40  """!
41  Constructor
42 
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.
47 
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
54  """
55  BatchParallelTask.__init__(self, *args, **kwargs)
56  self.ignoreCcdsignoreCcds = set(self.config.ignoreCcdList)
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")
62 
63  @classmethod
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"),
70  level="sensor",
71  help="data ID, e.g. --id visit=12345 ccd=67")
72  return parser
73 
74  def runDataRef(self, sensorRef):
75  """Process a single CCD, with scatter-gather-scatter using MPI.
76  """
77  if sensorRef.dataId[self.config.ccdKey] in self.ignoreCcdsignoreCcds:
78  self.log.warn("Ignoring %s: CCD in ignoreCcdList" %
79  (sensorRef.dataId))
80  return None
81 
82  with self.logOperationlogOperation("processing %s" % (sensorRef.dataId,)):
83  result = self.processCcd.runDataRef(sensorRef)
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')
89 
90  df = self.transformSourceTable.run(parquet.table,
91  funcs=self.transformSourceTable.getFunctors(),
92  dataId=sensorRef.dataId)
93  self.transformSourceTable.write(df, sensorRef)
94 
95  return result
def logOperation(self, operation, catch=False, trace=True)
Provide a context manager for logging an operation.
Definition: parallel.py:502
def __init__(self, butler=None, psfRefObjLoader=None, astromRefObjLoader=None, photoRefObjLoader=None, *args, **kwargs)
Constructor.
daf::base::PropertySet * set
Definition: fits.cc:912
void write(OutputArchiveHandle &handle) const override
def run(self, coaddExposures, bbox, wcs)
Definition: getTemplate.py:603