LSST Applications 27.0.0,g0265f82a02+469cd937ee,g02d81e74bb+21ad69e7e1,g1470d8bcf6+cbe83ee85a,g2079a07aa2+e67c6346a6,g212a7c68fe+04a9158687,g2305ad1205+94392ce272,g295015adf3+81dd352a9d,g2bbee38e9b+469cd937ee,g337abbeb29+469cd937ee,g3939d97d7f+72a9f7b576,g487adcacf7+71499e7cba,g50ff169b8f+5929b3527e,g52b1c1532d+a6fc98d2e7,g591dd9f2cf+df404f777f,g5a732f18d5+be83d3ecdb,g64a986408d+21ad69e7e1,g858d7b2824+21ad69e7e1,g8a8a8dda67+a6fc98d2e7,g99cad8db69+f62e5b0af5,g9ddcbc5298+d4bad12328,ga1e77700b3+9c366c4306,ga8c6da7877+71e4819109,gb0e22166c9+25ba2f69a1,gb6a65358fc+469cd937ee,gbb8dafda3b+69d3c0e320,gc07e1c2157+a98bf949bb,gc120e1dc64+615ec43309,gc28159a63d+469cd937ee,gcf0d15dbbd+72a9f7b576,gdaeeff99f8+a38ce5ea23,ge6526c86ff+3a7c1ac5f1,ge79ae78c31+469cd937ee,gee10cc3b42+a6fc98d2e7,gf1cff7945b+21ad69e7e1,gfbcc870c63+9a11dc8c8f
LSST Data Management Base Package
|
Classes | |
class | for |
class | ForcedPhotCcdConnections |
class | may |
Functions | |
runQuantum (self, butlerQC, inputRefs, outputRefs) | |
df2RefCat (self, dfList, exposureBBox, exposureWcs) | |
df2SourceCat (self, df) | |
Variables | |
footprintSource | |
refSchema : `lsst.afw.table.Schema`, optional | |
initInputs : `dict` | |
exposure : `lsst.afw.image.exposure.Exposure` | |
skyCorr : `lsst.afw.math.backgroundList`, optional | |
doApplySkyCorr | |
visitSummary : `lsst.afw.table.ExposureCatalog`, optional | |
sequence | refCats of `lsst.daf.butler.DeferredDatasetHandle` |
refWcs : `lsst.afw.image.SkyWcs` | |
refSources : `lsst.afw.table.SourceCatalog` | |
dataId : `lsst.daf.butler.DataCoordinate` | |
refCat : `lsst.afw.table.SourceCatalog` | |
measCat : `lsst.afw.table.SourceCatalog` | |
expId : `int` | |
exposureId : `int` | |
result : `lsst.pipe.base.Struct` | |
schema | |
outputSchema | |
lsst.meas.base.forcedPhotCcd.df2RefCat | ( | self, | |
dfList, | |||
exposureBBox, | |||
exposureWcs ) |
Convert list of DataFrames to reference catalog Concatenate list of DataFrames presumably from multiple patches and downselect rows that overlap the exposureBBox using the exposureWcs. Parameters ---------- dfList : `list` of `pandas.DataFrame` Each element containst diaObjects with ra/dec position in degrees Columns 'diaObjectId', 'ra', 'dec' are expected exposureBBox : `lsst.geom.Box2I` Bounding box on which to select rows that overlap exposureWcs : `lsst.afw.geom.SkyWcs` World coordinate system to convert sky coords in ref cat to pixel coords with which to compare with exposureBBox Returns ------- refCat : `lsst.afw.table.SourceTable` Source Catalog with minimal schema that overlaps exposureBBox
Definition at line 585 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.df2SourceCat | ( | self, | |
df ) |
Create minimal schema SourceCatalog from a pandas DataFrame. The forced measurement subtask expects this as input. Parameters ---------- df : `pandas.DataFrame` DiaObjects with locations and ids. Returns ------- outputCatalog : `lsst.afw.table.SourceTable` Output catalog with minimal schema.
Definition at line 616 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.runQuantum | ( | self, | |
butlerQC, | |||
inputRefs, | |||
outputRefs ) |
Definition at line 550 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.dataId : `lsst.daf.butler.DataCoordinate` |
mergedRefCat = None # Step 1: Determine bounds of the exposure photometry will # be performed on. expWcs = exposure.getWcs() if expWcs is None: self.log.info("Exposure has no WCS. Returning None for mergedRefCat.") else: expRegion = exposure.getBBox(lsst.afw.image.PARENT) expBBox = lsst.geom.Box2D(expRegion) expBoxCorners = expBBox.getCorners() expSkyCorners = [expWcs.pixelToSky(corner).getVector() for corner in expBoxCorners] expPolygon = lsst.sphgeom.ConvexPolygon(expSkyCorners) # Step 2: Filter out reference catalog sources that are # not contained within the exposure boundaries, or whose # parents are not within the exposure boundaries. Note # that within a single input refCat, the parents always # appear before the children. for refCat in refCats: refCat = refCat.get() if mergedRefCat is None: mergedRefCat = lsst.afw.table.SourceCatalog(refCat.table) containedIds = {0} # zero as a parent ID means "this is a parent" for record in refCat: if (expPolygon.contains(record.getCoord().getVector()) and record.getParent() in containedIds): record.setFootprint(record.getFootprint()) mergedRefCat.append(record) containedIds.add(record.getId()) if mergedRefCat is None: raise RuntimeError("No reference objects for forced photometry.") mergedRefCat.sort(lsst.afw.table.SourceTable.getParentKey()) return mergedRefCat def generateMeasCat(self, dataId, exposure, refCat, refWcs):
Definition at line 360 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.doApplySkyCorr |
Definition at line 263 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.expId : `int` |
Definition at line 374 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.exposure : `lsst.afw.image.exposure.Exposure` |
ConfigClass = ForcedPhotCcdConfig _DefaultName = "forcedPhotCcd" dataPrefix = "" def __init__(self, refSchema=None, initInputs=None, **kwargs): super().__init__(**kwargs) if initInputs is not None: refSchema = initInputs['inputSchema'].schema if refSchema is None: raise ValueError("No reference schema provided.") self.makeSubtask("measurement", refSchema=refSchema) # It is necessary to get the schema internal to the forced measurement # task until such a time that the schema is not owned by the # measurement task, but is passed in by an external caller. if self.config.doApCorr: self.makeSubtask("applyApCorr", schema=self.measurement.schema) self.makeSubtask('catalogCalculation', schema=self.measurement.schema) self.outputSchema = lsst.afw.table.SourceCatalog(self.measurement.schema) def runQuantum(self, butlerQC, inputRefs, outputRefs): inputs = butlerQC.get(inputRefs) tract = butlerQC.quantum.dataId['tract'] skyMap = inputs.pop('skyMap') inputs['refWcs'] = skyMap[tract].getWcs() # Connections only exist if they are configured to be used. skyCorr = inputs.pop('skyCorr', None) inputs['exposure'] = self.prepareCalibratedExposure( inputs['exposure'], skyCorr=skyCorr, visitSummary=inputs.pop("visitSummary"), ) inputs['refCat'] = self.mergeAndFilterReferences(inputs['exposure'], inputs['refCat'], inputs['refWcs']) if inputs['refCat'] is None: self.log.info("No WCS for exposure %s. No %s catalog will be written.", butlerQC.quantum.dataId, outputRefs.measCat.datasetType.name) else: inputs['measCat'], inputs['exposureId'] = self.generateMeasCat(inputRefs.exposure.dataId, inputs['exposure'], inputs['refCat'], inputs['refWcs']) self.attachFootprints(inputs['measCat'], inputs['refCat'], inputs['exposure'], inputs['refWcs']) outputs = self.run(**inputs) butlerQC.put(outputs, outputRefs) def prepareCalibratedExposure(self, exposure, skyCorr=None, visitSummary=None):
detectorId = exposure.getInfo().getDetector().getId() if visitSummary is not None: row = visitSummary.find(detectorId) if row is None: raise RuntimeError(f"Detector id {detectorId} not found in visitSummary.") if (photoCalib := row.getPhotoCalib()) is not None: exposure.setPhotoCalib(photoCalib) if (skyWcs := row.getWcs()) is not None: exposure.setWcs(skyWcs) if (psf := row.getPsf()) is not None: exposure.setPsf(psf) if (apCorrMap := row.getApCorrMap()) is not None: exposure.info.setApCorrMap(apCorrMap) if skyCorr is not None: exposure.maskedImage -= skyCorr.getImage() return exposure def mergeAndFilterReferences(self, exposure, refCats, refWcs):
Definition at line 260 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.exposureId : `int` |
Definition at line 396 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.footprintSource |
Definition at line 157 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.initInputs : `dict` |
Definition at line 195 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.measCat : `lsst.afw.table.SourceCatalog` |
id_generator = self.config.idGenerator.apply(dataId) measCat = self.measurement.generateMeasCat(exposure, refCat, refWcs, idFactory=id_generator.make_table_id_factory()) return measCat, id_generator.catalog_id def run(self, measCat, exposure, refCat, refWcs, exposureId=None):
Definition at line 372 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.outputSchema |
Definition at line 548 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.refCat : `lsst.afw.table.SourceCatalog` |
Definition at line 364 of file forcedPhotCcd.py.
sequence lsst.meas.base.forcedPhotCcd.refCats of `lsst.daf.butler.DeferredDatasetHandle` |
Definition at line 302 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.refSchema : `lsst.afw.table.Schema`, optional |
Definition at line 191 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.refSources : `lsst.afw.table.SourceCatalog` |
Definition at line 310 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.refWcs : `lsst.afw.image.SkyWcs` |
Definition at line 305 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.result : `lsst.pipe.base.Struct` |
Definition at line 402 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.schema |
Definition at line 547 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.skyCorr : `lsst.afw.math.backgroundList`, optional |
Definition at line 262 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.visitSummary : `lsst.afw.table.ExposureCatalog`, optional |
Definition at line 264 of file forcedPhotCcd.py.