LSST Applications g0f08755f38+9c285cab97,g1635faa6d4+13f3999e92,g1653933729+a8ce1bb630,g1a0ca8cf93+bf6eb00ceb,g28da252d5a+0829b12dee,g29321ee8c0+5700dc9eac,g2bbee38e9b+9634bc57db,g2bc492864f+9634bc57db,g2cdde0e794+c2c89b37c4,g3156d2b45e+41e33cbcdc,g347aa1857d+9634bc57db,g35bb328faa+a8ce1bb630,g3a166c0a6a+9634bc57db,g3e281a1b8c+9f2c4e2fc3,g414038480c+077ccc18e7,g41af890bb2+fde0dd39b6,g5fbc88fb19+17cd334064,g781aacb6e4+a8ce1bb630,g80478fca09+55a9465950,g82479be7b0+d730eedb7d,g858d7b2824+9c285cab97,g9125e01d80+a8ce1bb630,g9726552aa6+10f999ec6a,ga5288a1d22+2a84bb7594,gacf8899fa4+c69c5206e8,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+9634bc57db,gcf0d15dbbd+4b7d09cae4,gda3e153d99+9c285cab97,gda6a2b7d83+4b7d09cae4,gdaeeff99f8+1711a396fd,ge2409df99d+5e831397f4,ge79ae78c31+9634bc57db,gf0baf85859+147a0692ba,gf3967379c6+41c94011de,gf3fb38a9a8+8f07a9901b,gfb92a5be7c+9c285cab97,w.2024.46
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 599 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 630 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.runQuantum | ( | self, | |
butlerQC, | |||
inputRefs, | |||
outputRefs ) |
Definition at line 563 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 368 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.doApplySkyCorr |
Definition at line 271 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.expId : `int` |
Definition at line 382 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", None), ) 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 268 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.exposureId : `int` |
Definition at line 404 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.footprintSource |
Definition at line 168 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.initInputs : `dict` |
Definition at line 203 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 380 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.outputSchema |
Definition at line 561 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.refCat : `lsst.afw.table.SourceCatalog` |
Definition at line 372 of file forcedPhotCcd.py.
sequence lsst.meas.base.forcedPhotCcd.refCats of `lsst.daf.butler.DeferredDatasetHandle` |
Definition at line 310 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.refSchema : `lsst.afw.table.Schema`, optional |
Definition at line 199 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.refSources : `lsst.afw.table.SourceCatalog` |
Definition at line 318 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.refWcs : `lsst.afw.image.SkyWcs` |
Definition at line 313 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.result : `lsst.pipe.base.Struct` |
Definition at line 410 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.schema |
Definition at line 560 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.skyCorr : `lsst.afw.math.backgroundList`, optional |
Definition at line 270 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.visitSummary : `lsst.afw.table.ExposureCatalog`, optional |
Definition at line 272 of file forcedPhotCcd.py.