lsst.pipe.tasks
g2c8cee2ce7+cc5eabfb3a
Toggle main menu visibility
Loading...
Searching...
No Matches
python
lsst
pipe
tasks
script
registerDcrSubfilters.py
Go to the documentation of this file.
1
# This file is part of pipe_tasks.
2
#
3
# Developed for the LSST Data Management System.
4
# This product includes software developed by the LSST Project
5
# (http://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 <http://www.gnu.org/licenses/>.
21
22
23
from
collections
import
defaultdict
24
import
logging
25
from
sqlalchemy.exc
import
IntegrityError
26
27
from
lsst.daf.butler
import
Butler
28
29
30
_log = logging.getLogger(__name__)
31
32
33
registeredMsg =
"Registered subfilters {subfilters} for filter band \"{band}\"."
34
notRegisteredMsg = \
35
"Not registering subfilters for filter band \"{band}\"; subfilters {subfilters} already existed."
36
37
38
class
InsertResults
:
39
"""Represents the results of adding subfilters to a filter band."""
40
41
class
InsertedSubfilters
:
42
"""Keeps track of the inserted and existing subfilter numbers.
43
44
Attributes
45
----------
46
inserted : `list` [`int`]
47
The inserted subfilters.
48
existing : `list` [`int`]
49
The subfilters that already existed.
50
"""
51
def
__init__
(self):
52
self.
inserted
= []
53
self.
existing
= []
54
55
def
__init__
(self):
56
self.
filters
= defaultdict(self.
InsertedSubfilters
)
57
58
def
add
(self, filterName, subfilter, inserted):
59
"""Add result information about attemping to add a subfilter to a
60
filter band.
61
62
Parameters
63
----------
64
filterName : `str`
65
The name of the filter band.
66
subfilter : `int`
67
The subfilter id.
68
inserted : `bool`
69
`True` if the subfilter was inserted, or `False` if this is the id
70
of a subfilter that already existed.
71
"""
72
if
inserted:
73
self.
filters
[filterName].inserted.append(subfilter)
74
else
:
75
self.
filters
[filterName].existing.append(subfilter)
76
77
def
__str__
(self):
78
"""Get the results formated for CLI output.
79
80
Returns
81
-------
82
results : `str`
83
The results formatted for CLI output.
84
"""
85
ret =
""
86
for
filterName, subs
in
self.
filters
.items():
87
if
ret:
88
ret +=
"\n"
89
if
subs.inserted:
90
ret += registeredMsg.format(band=filterName, subfilters=subs.inserted)
91
if
subs.existing:
92
subs.existing.sort()
93
ret += notRegisteredMsg.format(band=filterName, subfilters=subs.existing)
94
return
ret
95
96
97
def
registerDcrSubfilters(repo, num_subfilters, band_names):
98
"""Construct a set of subfilters for chromatic modeling and add them to a
99
registry.
100
101
Parameters
102
----------
103
repo : `str`
104
URI to the location to read the repo.
105
num_subfilters : `int`
106
The number of subfilters to add.
107
band_names : `list` [`str`]
108
The filter band names to add.
109
110
Returns
111
-------
112
insertResults : ``InsertResults``
113
A class that contains the results of the subfilters that were inserted
114
or already exist in each filter band, that has a __str__ method so it
115
can be easily printed to the CLI output.
116
"""
117
results =
InsertResults
()
118
with
Butler.from_config(repo, writeable=
True
)
as
butler:
119
for
filterName
in
band_names:
120
try
:
121
with
butler.registry.transaction():
122
for
sub
in
range(num_subfilters):
123
butler.registry.insertDimensionData(
124
"subfilter"
, {
"band"
: filterName,
"subfilter"
: sub}
125
)
126
results.add(filterName, sub,
True
)
127
except
IntegrityError:
128
records = butler.registry.queryDimensionRecords(
"subfilter"
, dataId={
"band"
: filterName})
129
for
record
in
records:
130
results.add(filterName, record.id,
False
)
131
132
return
results
lsst.pipe.tasks.script.registerDcrSubfilters.InsertResults.InsertedSubfilters
Definition
registerDcrSubfilters.py:41
lsst.pipe.tasks.script.registerDcrSubfilters.InsertResults.InsertedSubfilters.existing
list existing
Definition
registerDcrSubfilters.py:53
lsst.pipe.tasks.script.registerDcrSubfilters.InsertResults.InsertedSubfilters.__init__
__init__(self)
Definition
registerDcrSubfilters.py:51
lsst.pipe.tasks.script.registerDcrSubfilters.InsertResults.InsertedSubfilters.inserted
list inserted
Definition
registerDcrSubfilters.py:52
lsst.pipe.tasks.script.registerDcrSubfilters.InsertResults
Definition
registerDcrSubfilters.py:38
lsst.pipe.tasks.script.registerDcrSubfilters.InsertResults.filters
filters
Definition
registerDcrSubfilters.py:56
lsst.pipe.tasks.script.registerDcrSubfilters.InsertResults.__init__
__init__(self)
Definition
registerDcrSubfilters.py:55
lsst.pipe.tasks.script.registerDcrSubfilters.InsertResults.add
add(self, filterName, subfilter, inserted)
Definition
registerDcrSubfilters.py:58
lsst.pipe.tasks.script.registerDcrSubfilters.InsertResults.__str__
__str__(self)
Definition
registerDcrSubfilters.py:77
Generated on
for lsst.pipe.tasks by
1.17.0