|
lsst.meas.base g33b6a96d52+2ba7947ec2
|
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.