lsst.meas.base
ga44f29b7aa+21155385c5
Toggle main menu visibility
Loading...
Searching...
No Matches
python
lsst
meas
base
classification.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
"""Definition and registration of classification plugins.
23
"""
24
25
import
numpy
as
np
26
27
import
lsst.pex.config
28
from
.catalogCalculation
import
CatalogCalculationPluginConfig, CatalogCalculationPlugin
29
from
.pluginRegistry
import
register
30
31
__all__ = (
32
"CatalogCalculationClassificationConfig"
,
"CatalogCalculationClassificationPlugin"
,
33
)
34
35
36
class
CatalogCalculationClassificationConfig
(
CatalogCalculationPluginConfig
):
37
"""Configuration for catalog classification plugin.
38
"""
39
40
fluxRatio = lsst.pex.config.Field(dtype=float, default=.95, optional=
True
,
41
doc=
"critical ratio of model to psf flux"
)
42
modelErrFactor = lsst.pex.config.Field(dtype=float, default=0.0, optional=
True
,
43
doc=
"correction factor for modelFlux error"
)
44
psfErrFactor = lsst.pex.config.Field(dtype=float, default=0.0, optional=
True
,
45
doc=
"correction factor for psfFlux error"
)
46
47
48
@register("base_ClassificationExtendedness")
49
class
CatalogCalculationClassificationPlugin
(
CatalogCalculationPlugin
):
50
"""Plugin which calculates a binary measure of source extendedness.
51
52
Extendedness is based on a simple cut of the ratio of the PSF flux to the
53
model flux.
54
55
Notes
56
-----
57
Because the fluxes on which this algorithm is based on are slot
58
measurements, they can be provided by different algorithms, and the
59
`~CatalogCalculationClassificationConfig.fluxRatio` threshold used by this
60
algorithm should generally be set differently for different algorithms.
61
To do this, plot the difference between the PSF magnitude and the model
62
magnitude vs. the PSF magnitude, and look for where the cloud of galaxies
63
begins.
64
"""
65
66
ConfigClass = CatalogCalculationClassificationConfig
67
68
@classmethod
69
def
getExecutionOrder
(cls):
70
return
cls.
DEFAULT_CATALOGCALCULATION
71
72
def
__init__
(self, config, name, schema, metadata):
73
CatalogCalculationPlugin.__init__(self, config, name, schema, metadata)
74
self.
keyProbability
= schema.addField(name +
"_value"
, type=
"D"
,
75
doc=
"Set to 1 for extended sources, 0 for point sources."
)
76
self.
keyFlag
= schema.addField(name +
"_flag"
, type=
"Flag"
, doc=
"Set to 1 for any fatal failure."
)
77
78
def
calculate
(self, measRecord):
79
modelFlux = measRecord.getModelInstFlux()
80
psfFlux = measRecord.getPsfInstFlux()
81
modelFluxFlag = (measRecord.getModelFluxFlag()
82
if
measRecord.table.getModelFluxSlot().isValid()
83
else
False
)
84
psfFluxFlag = (measRecord.getPsfFluxFlag()
85
if
measRecord.table.getPsfFluxSlot().isValid()
86
else
False
)
87
flux1 = self.
config
.fluxRatio*modelFlux
88
if
self.
config
.modelErrFactor != 0:
89
flux1 += self.
config
.modelErrFactor*measRecord.getModelInstFluxErr()
90
flux2 = psfFlux
91
if
not
self.
config
.psfErrFactor == 0:
92
flux2 += self.
config
.psfErrFactor*measRecord.getPsfInstFluxErr()
93
94
# A generic failure occurs when either FluxFlag is set to True
95
# A generic failure also occurs if either calculated flux value is NaN:
96
# this can occur if the Flux field itself is NaN,
97
# or the ErrFactor != 0 and the FluxErr is NaN
98
if
np.isnan(flux1)
or
np.isnan(flux2)
or
modelFluxFlag
or
psfFluxFlag:
99
self.
fail
(measRecord)
100
else
:
101
measRecord.set(self.
keyProbability
, 0.0
if
flux1 < flux2
else
1.0)
102
103
def
fail
(self, measRecord, error=None):
104
measRecord.set(self.
keyFlag
,
True
)
lsst::meas::base.catalogCalculation.CatalogCalculationPluginConfig
Definition
catalogCalculation.py:41
lsst::meas::base.catalogCalculation.CatalogCalculationPlugin
Definition
catalogCalculation.py:47
lsst::meas::base.classification.CatalogCalculationClassificationConfig
Definition
classification.py:36
lsst::meas::base.classification.CatalogCalculationClassificationPlugin
Definition
classification.py:49
lsst::meas::base.classification.CatalogCalculationClassificationPlugin.keyProbability
keyProbability
Definition
classification.py:74
lsst::meas::base.classification.CatalogCalculationClassificationPlugin.keyFlag
keyFlag
Definition
classification.py:76
lsst::meas::base.classification.CatalogCalculationClassificationPlugin.getExecutionOrder
getExecutionOrder(cls)
Definition
classification.py:69
lsst::meas::base.classification.CatalogCalculationClassificationPlugin.calculate
calculate(self, measRecord)
Definition
classification.py:78
lsst::meas::base.classification.CatalogCalculationClassificationPlugin.fail
fail(self, measRecord, error=None)
Definition
classification.py:103
lsst::meas::base.classification.CatalogCalculationClassificationPlugin.__init__
__init__(self, config, name, schema, metadata)
Definition
classification.py:72
lsst::meas::base.pluginsBase.BasePlugin.config
config
Definition
pluginsBase.py:130
lsst::meas::base.pluginsBase.BasePlugin.DEFAULT_CATALOGCALCULATION
float DEFAULT_CATALOGCALCULATION
Definition
pluginsBase.py:108
lsst::pex::config
Generated on
for lsst.meas.base by
1.17.0