Loading [MathJax]/extensions/tex2jax.js
LSST Applications g0000d66e7c+4a51730b0a,g0485b4d2cb+be65c9c1d7,g0fba68d861+f95c35e0c3,g1ec0fe41b4+3ea9d11450,g1fd858c14a+41d169aaf2,g2440f9efcc+8c5ae1fdc5,g35bb328faa+8c5ae1fdc5,g4d2262a081+30937b6477,g53246c7159+8c5ae1fdc5,g55585698de+c657de43f9,g56a49b3a55+7eddd92ad8,g60b5630c4e+c657de43f9,g67b6fd64d1+97cc007aa2,g78460c75b0+7e33a9eb6d,g786e29fd12+668abc6043,g7ac00fbb6c+9304e3655a,g8352419a5c+8c5ae1fdc5,g8852436030+3f3bba821f,g89139ef638+97cc007aa2,g94187f82dc+c657de43f9,g989de1cb63+97cc007aa2,g9d31334357+c657de43f9,g9f33ca652e+06d39d8afb,ga815be3f0b+8e7c4d07ad,gabe3b4be73+8856018cbb,gabf8522325+977d9fabaf,gb1101e3267+12c96a40b1,gb89ab40317+97cc007aa2,gc91f06edcd+2ffb87f22b,gcf25f946ba+3f3bba821f,gd6cbbdb0b4+1cc2750d2e,gde0f65d7ad+bbe98f05bf,ge278dab8ac+6b863515ed,ge410e46f29+97cc007aa2,gf35d7ec915+97dd712d81,gf5e32f922b+8c5ae1fdc5,gf67bdafdda+97cc007aa2,gf6800124b1+bb7d8e732a,w.2025.19
LSST Data Management Base Package
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
lsst.pipe.tasks.selectImages Namespace Reference

Classes

class  BaseExposureInfo
 
class  BaseSelectImagesTask
 
class  BestSeeingSelectVisitsConnections
 
class  DatabaseSelectImagesConfig
 
class  PsfWcsSelectImagesConnections
 
class  PsfWcsSelectImagesTask
 
class  SelectStruct
 
class  WcsSelectImagesTask
 

Functions

 _extractKeyValue (dataList, keys=None)
 
 validate (self)
 

Variables

 skyMap : `lsst.afw.table.ExposureCatalog`
 
 dataId : `dict` of dataId keys
 
 result : `lsst.sphgeom.ConvexPolygon.convexHull`
 
 minNPsfStarPerBand
 

Function Documentation

◆ _extractKeyValue()

lsst.pipe.tasks.selectImages._extractKeyValue ( dataList,
keys = None )
protected
Extract the keys and values from a list of dataIds.

The input dataList is a list of objects that have 'dataId' members.
This allows it to be used for both a list of data references and a
list of ExposureInfo.

Parameters
----------
dataList : `Unknown`
keys : `Unknown`

Returns
-------
keys : `Unknown`
values : `Unknown`

Raises
------
RuntimeError
    Raised if DataId keys are inconsistent.

Definition at line 110 of file selectImages.py.

110def _extractKeyValue(dataList, keys=None):
111 """Extract the keys and values from a list of dataIds.
112
113 The input dataList is a list of objects that have 'dataId' members.
114 This allows it to be used for both a list of data references and a
115 list of ExposureInfo.
116
117 Parameters
118 ----------
119 dataList : `Unknown`
120 keys : `Unknown`
121
122 Returns
123 -------
124 keys : `Unknown`
125 values : `Unknown`
126
127 Raises
128 ------
129 RuntimeError
130 Raised if DataId keys are inconsistent.
131 """
132 assert len(dataList) > 0
133 if keys is None:
134 keys = sorted(dataList[0].dataId.keys())
135 keySet = set(keys)
136 values = list()
137 for data in dataList:
138 thisKeys = set(data.dataId.keys())
139 if thisKeys != keySet:
140 raise RuntimeError("DataId keys inconsistent: %s vs %s" % (keySet, thisKeys))
141 values.append(tuple(data.dataId[k] for k in keys))
142 return keys, values
143
144

◆ validate()

lsst.pipe.tasks.selectImages.validate ( self)

Definition at line 305 of file selectImages.py.

305 def validate(self):
306 super().validate()
307 if "fallback" not in self.minNPsfStarPerBand:
308 msg = ("Must include a \"fallback\" key in the config.minNPsfStarPerBand config dict. "
309 f"It is currenly: {self.minNPsfStarPerBand}.")
310 raise pexConfig.FieldValidationError(self.__class__.minNPsfStarPerBand, self, msg)
311
312

Variable Documentation

◆ dataId

lsst.pipe.tasks.selectImages.dataId : `dict` of dataId keys

Definition at line 624 of file selectImages.py.

◆ minNPsfStarPerBand

lsst.pipe.tasks.selectImages.minNPsfStarPerBand

Definition at line 307 of file selectImages.py.

◆ result

lsst.pipe.tasks.selectImages.result : `lsst.sphgeom.ConvexPolygon.convexHull`

Definition at line 629 of file selectImages.py.

◆ skyMap

lsst.pipe.tasks.selectImages.skyMap : `lsst.afw.table.ExposureCatalog`
if self.config.doConfirmOverlap:
    patchPolygon = self.makePatchPolygon(skyMap, dataId)

inputVisits = [visitSummary.ref.dataId['visit'] for visitSummary in visitSummaries]
fwhmSizes = []
visits = []
for visit, visitSummary in zip(inputVisits, visitSummaries):
    # read in one-by-one and only once. There may be hundreds
    visitSummary = visitSummary.get()

    # mjd is guaranteed to be the same for every detector in the
    # visitSummary.
    mjd = visitSummary[0].getVisitInfo().getDate().get(system=DateTime.MJD)

    pixelScales = np.array([vs['pixelScale'] for vs in visitSummary if vs.getWcs()])
    # psfSigma is PSF model determinant radius at chip center in pixels
    psfSigmas = np.array([vs['psfSigma'] for vs in visitSummary if vs.getWcs()])
    fwhm = np.nanmean(psfSigmas * pixelScales) * np.sqrt(8.*np.log(2.))

    if self.config.maxPsfFwhm and fwhm > self.config.maxPsfFwhm:
        continue
    if self.config.minPsfFwhm and fwhm < self.config.minPsfFwhm:
        continue
    if self.config.minMJD and mjd < self.config.minMJD:
        self.log.debug('MJD %f earlier than %.2f; rejecting', mjd, self.config.minMJD)
        continue
    if self.config.maxMJD and mjd > self.config.maxMJD:
        self.log.debug('MJD %f later than %.2f;  rejecting', mjd, self.config.maxMJD)
        continue
    if self.config.doConfirmOverlap and not self.doesIntersectPolygon(visitSummary, patchPolygon):
        continue

    fwhmSizes.append(fwhm)
    visits.append(visit)

sortedVisits = [ind for (_, ind) in sorted(zip(fwhmSizes, visits))]
if self.config.nVisitsMax < 0:
    output = sortedVisits
else:
    output = sortedVisits[:self.config.nVisitsMax]

if len(output) == 0:
    self.log.info("All images rejected in BestSeeingSelectVisitsTask.")
    raise pipeBase.NoWorkFound(f"No good images found for {dataId}")
else:
    self.log.info(
        "%d images selected with FWHM range of %f--%f arcseconds",
        len(output),
        fwhmSizes[visits.index(output[0])],
        fwhmSizes[visits.index(output[-1])],
    )

# In order to store as a StructuredDataDict, convert list to dict
goodVisits = {key: True for key in output}
return pipeBase.Struct(goodVisits=goodVisits)

def makePatchPolygon(self, skyMap, dataId):

Definition at line 622 of file selectImages.py.