LSST Applications g042eb84c57+730a74494b,g04e9c324dd+8c5ae1fdc5,g134cb467dc+1f1e3e7524,g199a45376c+0ba108daf9,g1fd858c14a+fa7d31856b,g210f2d0738+f66ac109ec,g262e1987ae+83a3acc0e5,g29ae962dfc+d856a2cb1f,g2cef7863aa+aef1011c0b,g35bb328faa+8c5ae1fdc5,g3fd5ace14f+a1e0c9f713,g47891489e3+0d594cb711,g4d44eb3520+c57ec8f3ed,g4d7b6aa1c5+f66ac109ec,g53246c7159+8c5ae1fdc5,g56a1a4eaf3+fd7ad03fde,g64539dfbff+f66ac109ec,g67b6fd64d1+0d594cb711,g67fd3c3899+f66ac109ec,g6985122a63+0d594cb711,g74acd417e5+3098891321,g786e29fd12+668abc6043,g81db2e9a8d+98e2ab9f28,g87389fa792+8856018cbb,g89139ef638+0d594cb711,g8d7436a09f+80fda9ce03,g8ea07a8fe4+760ca7c3fc,g90f42f885a+033b1d468d,g97be763408+a8a29bda4b,g99822b682c+e3ec3c61f9,g9d5c6a246b+0d5dac0c3d,ga41d0fce20+9243b26dd2,gbf99507273+8c5ae1fdc5,gd7ef33dd92+0d594cb711,gdab6d2f7ff+3098891321,ge410e46f29+0d594cb711,geaed405ab2+c4bbc419c6,gf9a733ac38+8c5ae1fdc5,w.2025.38
LSST Data Management Base Package
Loading...
Searching...
No Matches
lsst.pipe.tasks.selectImages Namespace Reference

Classes

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

Functions

 _meetsVisitSummaryMinValues (visit, visitSummary, visitSummaryMinValues, logger=None)
 
 _extractKeyValue (dataList, keys=None)
 
 validate (self)
 

Variables

 excludeDetectors
 
 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 142 of file selectImages.py.

142def _extractKeyValue(dataList, keys=None):
143 """Extract the keys and values from a list of dataIds.
144
145 The input dataList is a list of objects that have 'dataId' members.
146 This allows it to be used for both a list of data references and a
147 list of ExposureInfo.
148
149 Parameters
150 ----------
151 dataList : `Unknown`
152 keys : `Unknown`
153
154 Returns
155 -------
156 keys : `Unknown`
157 values : `Unknown`
158
159 Raises
160 ------
161 RuntimeError
162 Raised if DataId keys are inconsistent.
163 """
164 assert len(dataList) > 0
165 if keys is None:
166 keys = sorted(dataList[0].dataId.keys())
167 keySet = set(keys)
168 values = list()
169 for data in dataList:
170 thisKeys = set(data.dataId.keys())
171 if thisKeys != keySet:
172 raise RuntimeError("DataId keys inconsistent: %s vs %s" % (keySet, thisKeys))
173 values.append(tuple(data.dataId[k] for k in keys))
174 return keys, values
175
176

◆ _meetsVisitSummaryMinValues()

lsst.pipe.tasks.selectImages._meetsVisitSummaryMinValues ( visit,
visitSummary,
visitSummaryMinValues,
logger = None )
protected
Check if the visitSummary meets minimum values in visitSummaryMinValues.

Parameters
----------
visit : `int`
    Visit number.
visitSummary : `lsst.afw.table.ExposureCatalog`
    Exposure catalog with per-detector summary information.
visitSummaryMinValues : `dict`
    Dictionary with column names as keys and minimum allowed values as values.
logger : `lsst.log.Logger`
    Logger to log debug and warning messages.

Returns
-------
result : `bool`
    True if all columns in visitSummary meet the minimum values specified
    in visitSummaryMinValues, False otherwise.

Definition at line 37 of file selectImages.py.

37def _meetsVisitSummaryMinValues(visit, visitSummary, visitSummaryMinValues, logger=None):
38 """Check if the visitSummary meets minimum values in visitSummaryMinValues.
39
40 Parameters
41 ----------
42 visit : `int`
43 Visit number.
44 visitSummary : `lsst.afw.table.ExposureCatalog`
45 Exposure catalog with per-detector summary information.
46 visitSummaryMinValues : `dict`
47 Dictionary with column names as keys and minimum allowed values as values.
48 logger : `lsst.log.Logger`
49 Logger to log debug and warning messages.
50
51 Returns
52 -------
53 result : `bool`
54 True if all columns in visitSummary meet the minimum values specified
55 in visitSummaryMinValues, False otherwise.
56 """
57 for columnName, minThreshold in visitSummaryMinValues.items():
58 # Get values for this column across all detectors with a valid WCS
59 values = np.asarray([vs[columnName] for vs in visitSummary if vs.getWcs()])
60 meanValue = np.nanmean(values)
61 if meanValue < minThreshold:
62 if logger is not None:
63 logger.info(f'Rejecting visit {visit}: mean {columnName} ({meanValue:.3f}) '
64 f'is below the minimum threshold ({minThreshold:.3f}).')
65 return False
66 return True
67
68

◆ validate()

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

Definition at line 358 of file selectImages.py.

358 def validate(self):
359 super().validate()
360 if "fallback" not in self.minNPsfStarPerBand:
361 msg = ("Must include a \"fallback\" key in the config.minNPsfStarPerBand config dict. "
362 f"It is currenly: {self.minNPsfStarPerBand}.")
363 raise pexConfig.FieldValidationError(self.__class__.minNPsfStarPerBand, self, msg)
364
365

Variable Documentation

◆ dataId

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

Definition at line 689 of file selectImages.py.

◆ excludeDetectors

lsst.pipe.tasks.selectImages.excludeDetectors
Initial value:
1= pexConfig.ListField(
2 dtype=int,
3 default=[],
4 doc="Detectors to exclude from selection.",
5 optional=True,
6 )

Definition at line 351 of file selectImages.py.

◆ minNPsfStarPerBand

lsst.pipe.tasks.selectImages.minNPsfStarPerBand

Definition at line 360 of file selectImages.py.

◆ result

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

Definition at line 694 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
    if (self.config.visitSummaryMinValues
        and not _meetsVisitSummaryMinValues(visit, visitSummary, self.config.visitSummaryMinValues,
                                            self.log)):
        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 687 of file selectImages.py.