LSST Applications g0b6bd0c080+a72a5dd7e6,g1182afd7b4+2a019aa3bb,g17e5ecfddb+2b8207f7de,g1d67935e3f+06cf436103,g38293774b4+ac198e9f13,g396055baef+6a2097e274,g3b44f30a73+6611e0205b,g480783c3b1+98f8679e14,g48ccf36440+89c08d0516,g4b93dc025c+98f8679e14,g5c4744a4d9+a302e8c7f0,g613e996a0d+e1c447f2e0,g6c8d09e9e7+25247a063c,g7271f0639c+98f8679e14,g7a9cd813b8+124095ede6,g9d27549199+a302e8c7f0,ga1cf026fa3+ac198e9f13,ga32aa97882+7403ac30ac,ga786bb30fb+7a139211af,gaa63f70f4e+9994eb9896,gabf319e997+ade567573c,gba47b54d5d+94dc90c3ea,gbec6a3398f+06cf436103,gc6308e37c7+07dd123edb,gc655b1545f+ade567573c,gcc9029db3c+ab229f5caf,gd01420fc67+06cf436103,gd877ba84e5+06cf436103,gdb4cecd868+6f279b5b48,ge2d134c3d5+cc4dbb2e3f,ge448b5faa6+86d1ceac1d,gecc7e12556+98f8679e14,gf3ee170dca+25247a063c,gf4ac96e456+ade567573c,gf9f5ea5b4d+ac198e9f13,gff490e6085+8c2580be5c,w.2022.27
LSST Data Management Base Package
singleFrameDriver.py
Go to the documentation of this file.
1from lsst.pipe.base import ArgumentParser, ButlerInitializedTaskRunner, ConfigDatasetType
2from lsst.pipe.tasks.processCcd import ProcessCcdTask
3from lsst.pipe.tasks.postprocess import WriteSourceTableTask, TransformSourceTableTask
4from lsst.pex.config import Config, Field, ConfigurableField, ListField
5from 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
26class SingleFrameTaskRunner(BatchTaskRunner, ButlerInitializedTaskRunner):
27 """Run batches, and initialize Task using a butler"""
28 pass
29
30
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
def run(self, coaddExposures, bbox, wcs, dataIds, **kwargs)
Definition: getTemplate.py:596
def write(self, patchRef, catalog)
Write the output.