LSST Applications g02d81e74bb+86cf3d8bc9,g180d380827+7a4e862ed4,g2079a07aa2+86d27d4dc4,g2305ad1205+e1ca1c66fa,g29320951ab+012e1474a1,g295015adf3+341ea1ce94,g2bbee38e9b+0e5473021a,g337abbeb29+0e5473021a,g33d1c0ed96+0e5473021a,g3a166c0a6a+0e5473021a,g3ddfee87b4+c429d67c83,g48712c4677+f88676dd22,g487adcacf7+27e1e21933,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+b41db86c35,g5a732f18d5+53520f316c,g64a986408d+86cf3d8bc9,g858d7b2824+86cf3d8bc9,g8a8a8dda67+585e252eca,g99cad8db69+84912a7fdc,g9ddcbc5298+9a081db1e4,ga1e77700b3+15fc3df1f7,ga8c6da7877+a2b54eae19,gb0e22166c9+60f28cb32d,gba4ed39666+c2a2e4ac27,gbb8dafda3b+6681f309db,gc120e1dc64+f0fcc2f6d8,gc28159a63d+0e5473021a,gcf0d15dbbd+c429d67c83,gdaeeff99f8+f9a426f77a,ge6526c86ff+0433e6603d,ge79ae78c31+0e5473021a,gee10cc3b42+585e252eca,gff1a9f87cc+86cf3d8bc9,w.2024.17
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.