lsst.meas.base g226e1bc8dd+619ec6e88a
|
detectorId = exposure.getInfo().getDetector().getId() if externalPhotoCalibCatalog is not None: row = externalPhotoCalibCatalog.find(detectorId) if row is None: self.log.warning("Detector id %s not found in externalPhotoCalibCatalog; " "Using original photoCalib.", detectorId) else: photoCalib = row.getPhotoCalib() if photoCalib is None: self.log.warning("Detector id %s has None for photoCalib in externalPhotoCalibCatalog; " "Using original photoCalib.", detectorId) else: exposure.setPhotoCalib(photoCalib) if externalSkyWcsCatalog is not None: row = externalSkyWcsCatalog.find(detectorId) if row is None: self.log.warning("Detector id %s not found in externalSkyWcsCatalog; " "Using original skyWcs.", detectorId) else: skyWcs = row.getWcs() if skyWcs is None: self.log.warning("Detector id %s has None for skyWcs in externalSkyWcsCatalog; " "Using original skyWcs.", detectorId) else: exposure.setWcs(skyWcs) if finalizedPsfApCorrCatalog is not None: row = finalizedPsfApCorrCatalog.find(detectorId) if row is None: self.log.warning("Detector id %s not found in finalizedPsfApCorrCatalog; " "Using original psf.", detectorId) else: psf = row.getPsf() apCorrMap = row.getApCorrMap() if psf is None or apCorrMap is None: self.log.warning("Detector id %s has None for psf/apCorrMap in " "finalizedPsfApCorrCatalog; Using original psf.", detectorId) else: exposure.setPsf(psf) exposure.setApCorrMap(apCorrMap) if skyCorr is not None: exposure.maskedImage -= skyCorr.getImage() return exposure def mergeAndFilterReferences(self, exposure, refCats, refWcs):
# Step 1: Determine bounds of the exposure photometry will # be performed on. expWcs = exposure.getWcs() 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. mergedRefCat = None 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, exposureDataId, exposure, refCat, refWcs, idPackerName):
exposureIdInfo = ExposureIdInfo.fromDataId(exposureDataId, idPackerName) idFactory = exposureIdInfo.makeSourceIdFactory() measCat = self.measurement.generateMeasCat(exposure, refCat, refWcs, idFactory=idFactory) return measCat, exposureIdInfo.expId def runDataRef(self, dataRef, psfCache=None):
Definition at line 663 of file forcedPhotCcd.py.