LSST Applications g1653933729+a8ce1bb630,g1a997c3884+a8ce1bb630,g1b393d1bc7+82476ad7c1,g28da252d5a+3d3e1c4204,g2bbee38e9b+97aa061eef,g2bc492864f+97aa061eef,g2cdde0e794+3ad5f2bb52,g2f1216ac18+8615c5b65f,g3156d2b45e+07302053f8,g347aa1857d+97aa061eef,g35bb328faa+a8ce1bb630,g3a166c0a6a+97aa061eef,g3e281a1b8c+693a468c5f,g4005a62e65+17cd334064,g414038480c+56e3b84a79,g41af890bb2+e5200c8fd9,g65afce507f+0106b0cffc,g80478fca09+e9b577042c,g82479be7b0+a273c6d073,g858d7b2824+b43ab392d2,g9125e01d80+a8ce1bb630,ga5288a1d22+3199fccd69,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gbb4f38f987+b43ab392d2,gc28159a63d+97aa061eef,gcd3f1c0c93+2e89b03209,gcf0d15dbbd+a0207f3e71,gd35896b8e2+3e8344a67c,gda3e153d99+b43ab392d2,gda6a2b7d83+a0207f3e71,gdaeeff99f8+1711a396fd,ge2409df99d+e6e587e663,ge33fd446bb+b43ab392d2,ge79ae78c31+97aa061eef,gf0baf85859+5daf287408,gf5289d68f6+c4f2338d90,gfda6b12a05+3bcad770a9,w.2024.42
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 586 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 617 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 357 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.doApplySkyCorr |
Definition at line 260 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.expId : `int` |
Definition at line 371 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 257 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.exposureId : `int` |
Definition at line 393 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 192 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 369 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 361 of file forcedPhotCcd.py.
sequence lsst.meas.base.forcedPhotCcd.refCats of `lsst.daf.butler.DeferredDatasetHandle` |
Definition at line 299 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.refSchema : `lsst.afw.table.Schema`, optional |
Definition at line 188 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.refSources : `lsst.afw.table.SourceCatalog` |
Definition at line 307 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.refWcs : `lsst.afw.image.SkyWcs` |
Definition at line 302 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.result : `lsst.pipe.base.Struct` |
Definition at line 399 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 259 of file forcedPhotCcd.py.
lsst.meas.base.forcedPhotCcd.visitSummary : `lsst.afw.table.ExposureCatalog`, optional |
Definition at line 261 of file forcedPhotCcd.py.