LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
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 
39  """Represents the results of adding subfilters to a filter band."""
40 
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.insertedinserted = []
53  self.existingexisting = []
54 
55  def __init__(self):
56  self.filtersfilters = defaultdict(self.InsertedSubfiltersInsertedSubfilters)
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.filtersfilters[filterName].inserted.append(subfilter)
74  else:
75  self.filtersfilters[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.filtersfilters.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  butler = Butler(repo, writeable=True)
118  results = InsertResults()
119  for filterName in band_names:
120  try:
121  with butler.registry.transaction():
122  for sub in range(num_subfilters):
123  butler.registry.insertDimensionData("subfilter", {"band": filterName, "subfilter": sub})
124  results.add(filterName, sub, True)
125  except IntegrityError:
126  records = butler.registry.queryDimensionRecords("subfilter", dataId={"band": filterName})
127  for record in records:
128  results.add(filterName, record.id, False)
129 
130  return results
std::vector< SchemaItem< Flag > > * items
def registerDcrSubfilters(repo, num_subfilters, band_names)