Coverage for tests/test_filters.py : 22%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# This file is part of obs_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/>.
22import unittest
24import lsst.utils.tests
25import lsst.afw.image
26from lsst.obs.base import FilterDefinition, FilterDefinitionCollection
27import lsst.pex.exceptions
30class TestFilterDefinitionCollection(lsst.utils.tests.TestCase):
31 def setUp(self):
32 self.filters1 = FilterDefinitionCollection(FilterDefinition(physical_filter='abc', lambdaEff=123),
33 FilterDefinition(physical_filter='def',
34 band='d',
35 lambdaEff=456))
36 self.filters2 = FilterDefinitionCollection(FilterDefinition(physical_filter='abc', lambdaEff=321),
37 FilterDefinition(physical_filter='def',
38 band='dd',
39 lambdaEff=654))
40 FilterDefinitionCollection.reset()
42 def test_singleton(self):
43 self.filters1.defineFilters()
44 self.assertEqual(lsst.afw.image.Filter('abc').getFilterProperty().getLambdaEff(), 123)
45 self.assertEqual(lsst.afw.image.Filter('def').getFilterProperty().getLambdaEff(), 456)
46 self.filters1.defineFilters() # this should not change anything
47 self.assertEqual(lsst.afw.image.Filter('abc').getFilterProperty().getLambdaEff(), 123)
48 self.assertEqual(lsst.afw.image.Filter('def').getFilterProperty().getLambdaEff(), 456)
49 with self.assertRaises(RuntimeError):
50 self.filters2.defineFilters()
51 # the defined filters should be unchanged
52 self.assertEqual(lsst.afw.image.Filter('abc').getFilterProperty().getLambdaEff(), 123)
53 self.assertEqual(lsst.afw.image.Filter('def').getFilterProperty().getLambdaEff(), 456)
55 def test_reset(self):
56 self.filters1.defineFilters()
57 with self.assertRaises(RuntimeError):
58 self.filters2.defineFilters()
59 self.filters1.reset()
60 # The new filters can be defiend and should replace the old ones.
61 self.filters2.defineFilters()
62 self.assertEqual(lsst.afw.image.Filter('abc').getFilterProperty().getLambdaEff(), 321)
63 self.assertEqual(lsst.afw.image.Filter('def').getFilterProperty().getLambdaEff(), 654)
65 def test_findAll(self):
66 self.assertEqual(set(self.filters1.findAll('r')), set())
67 matches = self.filters1.findAll('abc')
68 self.assertEqual(len(matches), 1)
69 match = list(matches)[0]
70 self.assertEqual(match.physical_filter, 'abc')
72 def test_physical_to_band(self):
73 """Test that the physical_to_band dict returns expected values.
74 """
75 self.assertIsNone(self.filters1.physical_to_band['abc'])
76 self.assertEqual(self.filters1.physical_to_band['def'], 'd')
77 self.assertIsNone(self.filters2.physical_to_band['abc'])
78 self.assertEqual(self.filters2.physical_to_band['def'], 'dd')
81class TestFilterDefinition(lsst.utils.tests.TestCase):
82 def setUp(self):
83 lsst.afw.image.utils.resetFilters()
84 self.filter_g = FilterDefinition(band="g",
85 physical_filter="HSC-G",
86 lambdaEff=1234,
87 alias={'ABCDEFG'})
88 self.filter_g2 = FilterDefinition(band="g",
89 physical_filter="HSC-G2",
90 afw_name='g2',
91 lambdaEff=1235,
92 alias={'HIJK'})
94 self.physical_only = FilterDefinition(physical_filter="physical", lambdaEff=0)
95 self.afw_name = FilterDefinition(physical_filter="afw_name",
96 lambdaEff=5, afw_name="afw only")
97 self.abstract = FilterDefinition(physical_filter="abstract", lambdaEff=42,
98 band="abstract only")
100 def testDefineFilters(self):
101 """Test that a filter is properly defined in afw."""
102 # the filter should not exist until we define it
103 with self.assertRaises(lsst.pex.exceptions.NotFoundError):
104 lsst.afw.image.Filter('g')
105 with self.assertRaises(lsst.pex.exceptions.NotFoundError):
106 lsst.afw.image.Filter('g2')
107 with self.assertRaises(lsst.pex.exceptions.NotFoundError):
108 lsst.afw.image.Filter('HSC-G')
110 self.filter_g.defineFilter()
111 filter = lsst.afw.image.Filter('g')
112 filter_alias = lsst.afw.image.Filter('HSC-G')
113 self.assertEqual(filter.getName(), 'g')
114 # afw Filter stores the aliased name as the CannonicalName
115 self.assertEqual(filter_alias.getCanonicalName(), 'g')
116 self.assertEqual(filter, filter_alias)
117 self.assertEqual(['ABCDEFG', 'HSC-G'], sorted(filter.getAliases()))
119 self.filter_g2.defineFilter()
120 filter2 = lsst.afw.image.Filter('g2')
121 filter2_alias = lsst.afw.image.Filter('HSC-G2')
122 self.assertEqual(filter2.getName(), 'g2')
123 self.assertEqual(filter2_alias.getCanonicalName(), 'g2')
124 self.assertEqual(filter2, filter2_alias)
125 self.assertEqual(['HIJK', 'HSC-G2', 'g'], sorted(filter2.getAliases()))
127 def test_physical_only(self):
128 """physical_filter is the only name this filter has.
129 """
130 self.physical_only.defineFilter()
131 filter = lsst.afw.image.Filter('physical')
132 self.assertEqual(filter.getName(), 'physical')
133 self.assertEqual([], sorted(filter.getAliases()))
134 self.assertEqual(self.physical_only.makeFilterLabel(),
135 lsst.afw.image.FilterLabel(physical='physical'))
137 def test_afw_name(self):
138 """afw_name is the Filter name, physical_filter is an alias.
139 """
140 self.afw_name.defineFilter()
141 filter = lsst.afw.image.Filter('afw only')
142 filter_alias = lsst.afw.image.Filter('afw_name')
143 self.assertEqual(filter.getName(), 'afw only')
144 self.assertEqual(filter_alias.getCanonicalName(), 'afw only')
145 self.assertEqual(['afw_name'], sorted(filter.getAliases()))
146 self.assertEqual(self.afw_name.makeFilterLabel(),
147 lsst.afw.image.FilterLabel(physical='afw_name'))
149 def test_abstract_only(self):
150 """band is the Filter name, physical_filter is an alias.
151 """
152 self.abstract.defineFilter()
153 filter = lsst.afw.image.Filter('abstract only')
154 filter_alias = lsst.afw.image.Filter('abstract')
155 self.assertEqual(filter.getName(), 'abstract only')
156 self.assertEqual(filter_alias.getCanonicalName(), 'abstract only')
157 self.assertEqual(['abstract'], sorted(filter.getAliases()))
158 self.assertEqual(self.abstract.makeFilterLabel(),
159 lsst.afw.image.FilterLabel(band='abstract only', physical='abstract'))
162class MemoryTester(lsst.utils.tests.MemoryTestCase):
163 pass
166def setup_module(module):
167 lsst.utils.tests.init()
170if __name__ == '__main__': 170 ↛ 171line 170 didn't jump to line 171, because the condition on line 170 was never true
171 lsst.utils.tests.init()
172 unittest.main()