lsst.meas.base
ga44f29b7aa+acb932b993
Toggle main menu visibility
Loading...
Searching...
No Matches
python
lsst
meas
base
measurementInvestigationLib.py
Go to the documentation of this file.
1
# This file is part of meas_base.
2
#
3
# Developed for the LSST Data Management System.
4
# This product includes software developed by the LSST Project
5
# (https://www.lsst.org).
6
# See the COPYRIGHT file at the top-level directory of this distribution
7
# for details of code ownership.
8
#
9
# This program is free software: you can redistribute it and/or modify
10
# it under the terms of the GNU General Public License as published by
11
# the Free Software Foundation, either version 3 of the License, or
12
# (at your option) any later version.
13
#
14
# This program is distributed in the hope that it will be useful,
15
# but WITHOUT ANY WARRANTY; without even the implied warranty of
16
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
# GNU General Public License for more details.
18
#
19
# You should have received a copy of the GNU General Public License
20
# along with this program. If not, see <https://www.gnu.org/licenses/>.
21
22
from
collections.abc
import
Iterable
23
24
from
lsst.afw.table
import
Schema, SourceCatalog
25
from
lsst.meas.base
import
NoiseReplacer, NoiseReplacerConfig
26
from
lsst.meas.base
import
SingleFrameMeasurementTask
as
SFMT
# noqa N814
27
28
29
def
rebuildNoiseReplacer
(exposure, measCat):
30
"""Recreate the `NoiseReplacer` used in measurement.
31
32
Given a measurement catalog and the exposure on which the measurements
33
were made, reconstruct the `NoiseReplacer` object that was used to mask
34
out sources during measurement.
35
36
Parameters
37
----------
38
exposure : `lsst.afw.exposure.Exposure`
39
The image on which measurements were made.
40
41
measCat : `lsst.afw.table.SourceCatalog`
42
Catalog containing the results measurements on each source.
43
44
Returns
45
-------
46
noiseReplacer : `NoiseReplacer`
47
Object used to replace and/or restore sources in the exposure with
48
deterministic noise.
49
"""
50
51
algMetadata = measCat.getMetadata()
52
noiseReplacerConf =
NoiseReplacerConfig
()
53
noiseReplacerConf.noiseSeedMultiplier = \
54
algMetadata.getScalar(SFMT.NOISE_SEED_MULTIPLIER)
55
noiseReplacerConf.noiseSource = algMetadata.getScalar(SFMT.NOISE_SOURCE)
56
noiseReplacerConf.noiseOffset = algMetadata.getScalar(SFMT.NOISE_OFFSET)
57
58
footprints = {src.getId(): (src.getParent(), src.getFootprint())
59
for
src
in
measCat}
60
61
try
:
62
exposureId = algMetadata.getScalar(SFMT.NOISE_EXPOSURE_ID)
63
except
Exception:
64
exposureId =
None
65
66
noiseReplacer =
NoiseReplacer
(noiseReplacerConf, exposure, footprints,
67
exposureId=exposureId)
68
return
noiseReplacer
69
70
71
def
makeRerunCatalog
(schema, oldCatalog, idList, fields=None,
72
resetParents=True, addParents=False):
73
"""Create a catalog prepopulated with IDs.
74
75
This function is used to generate a `~lsst.afw.table.SourceCatalog`
76
containing blank records with IDs as specified in the ``idList``
77
parameter.
78
79
This function is primarily used when re-running measurements on a
80
particular footprint. Specifying IDs in the new measurement catalog which
81
correspond to IDs in the old catalog makes comparing results much easier.
82
83
The ``resetParents`` and ``addParents`` options are needed because
84
`SingleFrameMeasurementTask.runPlugins` will skip child
85
objects whose parents are not in the catalog.
86
87
Parameters
88
----------
89
schema : `lsst.afw.table.Schema`
90
Schema used to describe the fields in the resulting catalog.
91
92
oldCatalog : `lsst.afw.table.SourceCatalog`
93
Catalog containing previous measurements.
94
95
idList : iterable of `int`
96
Iterable whose values should be numbers corresponding to measurement
97
IDs which exist in ``oldCatalog``.
98
99
fields : iterable of `str`
100
Iterable whose entries should be strings corresponding to schema keys
101
that exist in both the old catalog and input schema. Fields listed
102
will be copied from the old catalog into the new catalog.
103
104
resetParents : `bool`
105
If `True`, child objects whose parents are not in the ``idList``
106
will have their parents reset to zero.
107
108
addParents : `bool`
109
If `True`, parents of child objects will be added to ``idList`` if
110
they are not already present.
111
112
Returns
113
-------
114
measCat : `lsst.afw.table.SourceCatalog`
115
Catalog prepopulated with entries with the IDs specified.
116
"""
117
118
if
not
isinstance(schema, Schema):
119
raise
RuntimeError(
"schema must be an instance of "
120
"lsst.afw.table.Schema"
)
121
122
if
not
isinstance(oldCatalog, SourceCatalog):
123
raise
RuntimeError(
"oldCatalog must be an instance of "
124
"lsst.afw.table.SourceCatalogiterable"
)
125
126
if
fields
is
None
:
127
fields = []
128
if
not
isinstance(fields, Iterable):
129
raise
RuntimeError(
"fields list must be an iterable with string"
130
"elements"
)
131
for
entry
in
fields:
132
if
entry
not
in
schema:
133
schema.addField(oldCatalog.schema.find(entry).field)
134
135
if
addParents:
136
newIdList = set()
137
for
srcId
in
idList:
138
newIdList.add(srcId)
139
parentId = oldCatalog.find(srcId).getParent()
140
if
parentId:
141
newIdList.add(parentId)
142
idList = newIdList
143
idList = sorted(idList)
144
145
measCat =
SourceCatalog
(schema)
146
for
srcId
in
idList:
147
oldSrc = oldCatalog.find(srcId)
148
src = measCat.addNew()
149
src.setId(srcId)
150
src.setFootprint(oldSrc.getFootprint())
151
parent = oldSrc.getParent()
152
if
resetParents
and
parent
and
parent
not
in
idList:
153
parent = 0
154
src.setParent(parent)
155
src.setCoord(oldSrc.getCoord())
156
for
entry
in
fields:
157
src[entry] = oldSrc[entry]
158
return
measCat
lsst::afw::table::SortedCatalogT< SourceRecord >
lsst::meas::base.noiseReplacer.NoiseReplacerConfig
Definition
noiseReplacer.py:32
lsst::meas::base.noiseReplacer.NoiseReplacer
Definition
noiseReplacer.py:58
lsst::afw::table
lsst::meas::base.measurementInvestigationLib.makeRerunCatalog
makeRerunCatalog(schema, oldCatalog, idList, fields=None, resetParents=True, addParents=False)
Definition
measurementInvestigationLib.py:72
lsst::meas::base.measurementInvestigationLib.rebuildNoiseReplacer
rebuildNoiseReplacer(exposure, measCat)
Definition
measurementInvestigationLib.py:29
lsst::meas::base
Definition
Algorithm.h:37
Generated on
for lsst.meas.base by
1.17.0