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
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | Static Public Attributes | Static Protected Attributes | List of all members
lsst.meas.algorithms.reserveSourcesTask.ReserveSourcesTask Class Reference
Inheritance diagram for lsst.meas.algorithms.reserveSourcesTask.ReserveSourcesTask:

Public Member Functions

 __init__ (self, columnName=None, schema=None, doc=None, **kwargs)
 
 run (self, sources, prior=None, expId=0)
 
 select (self, numSources, expId=0)
 
 applySelectionPrior (self, prior, selection)
 
 markSources (self, sources, selection)
 

Public Attributes

 columnName
 
 key
 

Static Public Attributes

 ConfigClass = ReserveSourcesConfig
 

Static Protected Attributes

str _DefaultName = "reserveSources"
 

Detailed Description

Reserve sources from analysis

We randomly select a fraction of sources that will be reserved
from analysis. This allows evaluation of the quality of model fits
using sources that were not involved in the fitting process.

Parameters
----------
columnName : `str`, required
    Name of flag column to add; we will suffix this with "_reserved".
schema : `lsst.afw.table.Schema`, required
    Catalog schema.
doc : `str`
    Documentation for column to add.
config : `ReserveSourcesConfig`
    Configuration.

Definition at line 41 of file reserveSourcesTask.py.

Constructor & Destructor Documentation

◆ __init__()

lsst.meas.algorithms.reserveSourcesTask.ReserveSourcesTask.__init__ ( self,
columnName = None,
schema = None,
doc = None,
** kwargs )

Definition at line 62 of file reserveSourcesTask.py.

62 def __init__(self, columnName=None, schema=None, doc=None, **kwargs):
63 Task.__init__(self, **kwargs)
64 assert columnName is not None, "columnName not provided"
65 assert schema is not None, "schema not provided"
66 self.columnName = columnName
67 self.key = schema.addField(self.columnName + "_reserved", type="Flag", doc=doc)
68

Member Function Documentation

◆ applySelectionPrior()

lsst.meas.algorithms.reserveSourcesTask.ReserveSourcesTask.applySelectionPrior ( self,
prior,
selection )
Apply selection to full catalog

The `select` method makes a random selection of sources. If those
sources don't represent the full population (because a sub-selection
has already been made), then we need to generate a selection covering
the entire population.

Parameters
----------
prior : `numpy.ndarray` of type `bool`
    Prior selection of sources, identifying the subset from which the
    random selection has been made.
selection : `numpy.ndarray` of type `bool`
    Selection of sources in subset identified by `prior`.

Returns
-------
full : `numpy.ndarray` of type `bool`
    Selection applied to full population.

Definition at line 141 of file reserveSourcesTask.py.

141 def applySelectionPrior(self, prior, selection):
142 """Apply selection to full catalog
143
144 The `select` method makes a random selection of sources. If those
145 sources don't represent the full population (because a sub-selection
146 has already been made), then we need to generate a selection covering
147 the entire population.
148
149 Parameters
150 ----------
151 prior : `numpy.ndarray` of type `bool`
152 Prior selection of sources, identifying the subset from which the
153 random selection has been made.
154 selection : `numpy.ndarray` of type `bool`
155 Selection of sources in subset identified by `prior`.
156
157 Returns
158 -------
159 full : `numpy.ndarray` of type `bool`
160 Selection applied to full population.
161 """
162 full = np.zeros(len(prior), dtype=bool)
163 full[prior] = selection
164 return full
165

◆ markSources()

lsst.meas.algorithms.reserveSourcesTask.ReserveSourcesTask.markSources ( self,
sources,
selection )
Mark sources in a list or catalog

This requires iterating through the list and setting the flag in
each source individually. Even if the `sources` is a `Catalog`
with contiguous records, it's not currently possible to set a boolean
column (DM-6981) so we need to iterate.

Parameters
----------
catalog : `lsst.afw.table.Catalog` or `list` of `lsst.afw.table.Record`
    Catalog in which to flag selected sources.
selection : `numpy.ndarray` of type `bool`
    Selection of sources to mark.

Definition at line 166 of file reserveSourcesTask.py.

166 def markSources(self, sources, selection):
167 """Mark sources in a list or catalog
168
169 This requires iterating through the list and setting the flag in
170 each source individually. Even if the `sources` is a `Catalog`
171 with contiguous records, it's not currently possible to set a boolean
172 column (DM-6981) so we need to iterate.
173
174 Parameters
175 ----------
176 catalog : `lsst.afw.table.Catalog` or `list` of `lsst.afw.table.Record`
177 Catalog in which to flag selected sources.
178 selection : `numpy.ndarray` of type `bool`
179 Selection of sources to mark.
180 """
181 for src, select in zip(sources, selection):
182 if select:
183 src.set(self.key, True)

◆ run()

lsst.meas.algorithms.reserveSourcesTask.ReserveSourcesTask.run ( self,
sources,
prior = None,
expId = 0 )
Select sources to be reserved

Reserved sources will be flagged in the catalog, and we will return
boolean arrays that identify the sources to be reserved from and
used in the analysis. Typically you'll want to use the sources
from the `use` array in your fitting, and use the sources from the
`reserved` array as an independent test of your fitting.

Parameters
----------
sources : `lsst.afw.table.Catalog` or `list` of `lsst.afw.table.Record`
    Sources from which to select some to be reserved.
prior : `numpy.ndarray` of type `bool`, optional
    Prior selection of sources. Should have the same length as
    `sources`. If set, we will only consider for reservation sources
    that are flagged `True` in this array.
expId : `int`
    Exposure identifier; used for seeding the random number generator.

Returns
-------
results : `lsst.pipe.base.Struct`
    The results in a `~lsst.pipe.base.Struct`:

    ``reserved``
        Sources to be reserved are flagged `True` in this array.
        (`numpy.ndarray` of type `bool`)
    ``use``
        Sources the user should use in analysis are flagged `True`.
        (`numpy.ndarray` of type `bool`)

Definition at line 69 of file reserveSourcesTask.py.

69 def run(self, sources, prior=None, expId=0):
70 """Select sources to be reserved
71
72 Reserved sources will be flagged in the catalog, and we will return
73 boolean arrays that identify the sources to be reserved from and
74 used in the analysis. Typically you'll want to use the sources
75 from the `use` array in your fitting, and use the sources from the
76 `reserved` array as an independent test of your fitting.
77
78 Parameters
79 ----------
80 sources : `lsst.afw.table.Catalog` or `list` of `lsst.afw.table.Record`
81 Sources from which to select some to be reserved.
82 prior : `numpy.ndarray` of type `bool`, optional
83 Prior selection of sources. Should have the same length as
84 `sources`. If set, we will only consider for reservation sources
85 that are flagged `True` in this array.
86 expId : `int`
87 Exposure identifier; used for seeding the random number generator.
88
89 Returns
90 -------
91 results : `lsst.pipe.base.Struct`
92 The results in a `~lsst.pipe.base.Struct`:
93
94 ``reserved``
95 Sources to be reserved are flagged `True` in this array.
96 (`numpy.ndarray` of type `bool`)
97 ``use``
98 Sources the user should use in analysis are flagged `True`.
99 (`numpy.ndarray` of type `bool`)
100 """
101 if prior is not None:
102 assert len(prior) == len(sources), "Length mismatch: %s vs %s" % (len(prior), len(sources))
103 numSources = prior.sum()
104 else:
105 numSources = len(sources)
106 selection = self.select(numSources, expId)
107 if prior is not None:
108 selection = self.applySelectionPrior(prior, selection)
109 self.markSources(sources, selection)
110 self.log.info("Reserved %d/%d sources", selection.sum(), len(selection))
111 return Struct(reserved=selection,
112 use=prior & ~selection if prior is not None else np.logical_not(selection))
113

◆ select()

lsst.meas.algorithms.reserveSourcesTask.ReserveSourcesTask.select ( self,
numSources,
expId = 0 )
Randomly select some sources

We return a boolean array with a random selection. The fraction
of sources selected is specified by the config parameter `fraction`.

Parameters
----------
numSources : `int`
    Number of sources in catalog from which to select.
expId : `int`
    Exposure identifier; used for seeding the random number generator.

Returns
-------
selection : `numpy.ndarray` of type `bool`
    Selected sources are flagged `True` in this array.

Definition at line 114 of file reserveSourcesTask.py.

114 def select(self, numSources, expId=0):
115 """Randomly select some sources
116
117 We return a boolean array with a random selection. The fraction
118 of sources selected is specified by the config parameter `fraction`.
119
120 Parameters
121 ----------
122 numSources : `int`
123 Number of sources in catalog from which to select.
124 expId : `int`
125 Exposure identifier; used for seeding the random number generator.
126
127 Returns
128 -------
129 selection : `numpy.ndarray` of type `bool`
130 Selected sources are flagged `True` in this array.
131 """
132 selection = np.zeros(numSources, dtype=bool)
133 if self.config.fraction <= 0:
134 return selection
135 reserve = int(np.round(numSources*self.config.fraction))
136 selection[:reserve] = True
137 rng = np.random.RandomState((self.config.seed + expId) & 0xFFFFFFFF)
138 rng.shuffle(selection)
139 return selection
140

Member Data Documentation

◆ _DefaultName

str lsst.meas.algorithms.reserveSourcesTask.ReserveSourcesTask._DefaultName = "reserveSources"
staticprotected

Definition at line 60 of file reserveSourcesTask.py.

◆ columnName

lsst.meas.algorithms.reserveSourcesTask.ReserveSourcesTask.columnName

Definition at line 66 of file reserveSourcesTask.py.

◆ ConfigClass

lsst.meas.algorithms.reserveSourcesTask.ReserveSourcesTask.ConfigClass = ReserveSourcesConfig
static

Definition at line 59 of file reserveSourcesTask.py.

◆ key

lsst.meas.algorithms.reserveSourcesTask.ReserveSourcesTask.key

Definition at line 67 of file reserveSourcesTask.py.


The documentation for this class was generated from the following file: