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', lambdaEff=456))
34 self.filters2 = FilterDefinitionCollection(FilterDefinition(physical_filter='abc', lambdaEff=321),
35 FilterDefinition(physical_filter='def', lambdaEff=654))
36 FilterDefinitionCollection.reset()
38 def test_singleton(self):
39 self.filters1.defineFilters()
40 self.assertEqual(lsst.afw.image.Filter('abc').getFilterProperty().getLambdaEff(), 123)
41 self.assertEqual(lsst.afw.image.Filter('def').getFilterProperty().getLambdaEff(), 456)
42 self.filters1.defineFilters() # this should not change anything
43 self.assertEqual(lsst.afw.image.Filter('abc').getFilterProperty().getLambdaEff(), 123)
44 self.assertEqual(lsst.afw.image.Filter('def').getFilterProperty().getLambdaEff(), 456)
45 with self.assertRaises(RuntimeError):
46 self.filters2.defineFilters()
47 # the defined filters should be unchanged
48 self.assertEqual(lsst.afw.image.Filter('abc').getFilterProperty().getLambdaEff(), 123)
49 self.assertEqual(lsst.afw.image.Filter('def').getFilterProperty().getLambdaEff(), 456)
51 def test_reset(self):
52 self.filters1.defineFilters()
53 with self.assertRaises(RuntimeError):
54 self.filters2.defineFilters()
55 self.filters1.reset()
56 # The new filters can be defiend and should replace the old ones.
57 self.filters2.defineFilters()
58 self.assertEqual(lsst.afw.image.Filter('abc').getFilterProperty().getLambdaEff(), 321)
59 self.assertEqual(lsst.afw.image.Filter('def').getFilterProperty().getLambdaEff(), 654)
61 def test_findAll(self):
62 self.assertEqual(set(self.filters1.findAll('r')), set())
63 matches = self.filters1.findAll('abc')
64 self.assertEqual(len(matches), 1)
65 match = list(matches)[0]
66 self.assertEqual(match.physical_filter, 'abc')
69class TestFilterDefinition(lsst.utils.tests.TestCase):
70 def setUp(self):
71 lsst.afw.image.utils.resetFilters()
72 self.filter_g = FilterDefinition(band="g",
73 physical_filter="HSC-G",
74 lambdaEff=1234,
75 alias={'ABCDEFG'})
76 self.filter_g2 = FilterDefinition(band="g",
77 physical_filter="HSC-G2",
78 afw_name='g2',
79 lambdaEff=1235,
80 alias={'HIJK'})
82 self.physical_only = FilterDefinition(physical_filter="physical", lambdaEff=0)
83 self.afw_name = FilterDefinition(physical_filter="afw_name",
84 lambdaEff=5, afw_name="afw only")
85 self.abstract = FilterDefinition(physical_filter="abstract", lambdaEff=42,
86 band="abstract only")
88 def testDefineFilters(self):
89 """Test that a filter is properly defined in afw."""
90 # the filter should not exist until we define it
91 with self.assertRaises(lsst.pex.exceptions.NotFoundError):
92 lsst.afw.image.Filter('g')
93 with self.assertRaises(lsst.pex.exceptions.NotFoundError):
94 lsst.afw.image.Filter('g2')
95 with self.assertRaises(lsst.pex.exceptions.NotFoundError):
96 lsst.afw.image.Filter('HSC-G')
98 self.filter_g.defineFilter()
99 filter = lsst.afw.image.Filter('g')
100 filter_alias = lsst.afw.image.Filter('HSC-G')
101 self.assertEqual(filter.getName(), 'g')
102 # afw Filter stores the aliased name as the CannonicalName
103 self.assertEqual(filter_alias.getCanonicalName(), 'g')
104 self.assertEqual(filter, filter_alias)
105 self.assertEqual(['ABCDEFG', 'HSC-G'], sorted(filter.getAliases()))
107 self.filter_g2.defineFilter()
108 filter2 = lsst.afw.image.Filter('g2')
109 filter2_alias = lsst.afw.image.Filter('HSC-G2')
110 self.assertEqual(filter2.getName(), 'g2')
111 self.assertEqual(filter2_alias.getCanonicalName(), 'g2')
112 self.assertEqual(filter2, filter2_alias)
113 self.assertEqual(['HIJK', 'HSC-G2', 'g'], sorted(filter2.getAliases()))
115 def test_physical_only(self):
116 """physical_filter is the only name this filter has.
117 """
118 self.physical_only.defineFilter()
119 filter = lsst.afw.image.Filter('physical')
120 self.assertEqual(filter.getName(), 'physical')
121 self.assertEqual([], sorted(filter.getAliases()))
122 self.assertEqual(self.physical_only.makeFilterLabel(),
123 lsst.afw.image.FilterLabel(physical='physical'))
125 def test_afw_name(self):
126 """afw_name is the Filter name, physical_filter is an alias.
127 """
128 self.afw_name.defineFilter()
129 filter = lsst.afw.image.Filter('afw only')
130 filter_alias = lsst.afw.image.Filter('afw_name')
131 self.assertEqual(filter.getName(), 'afw only')
132 self.assertEqual(filter_alias.getCanonicalName(), 'afw only')
133 self.assertEqual(['afw_name'], sorted(filter.getAliases()))
134 self.assertEqual(self.afw_name.makeFilterLabel(),
135 lsst.afw.image.FilterLabel(physical='afw_name'))
137 def test_abstract_only(self):
138 """band is the Filter name, physical_filter is an alias.
139 """
140 self.abstract.defineFilter()
141 filter = lsst.afw.image.Filter('abstract only')
142 filter_alias = lsst.afw.image.Filter('abstract')
143 self.assertEqual(filter.getName(), 'abstract only')
144 self.assertEqual(filter_alias.getCanonicalName(), 'abstract only')
145 self.assertEqual(['abstract'], sorted(filter.getAliases()))
146 self.assertEqual(self.abstract.makeFilterLabel(),
147 lsst.afw.image.FilterLabel(band='abstract only', physical='abstract'))
150class MemoryTester(lsst.utils.tests.MemoryTestCase):
151 pass
154def setup_module(module):
155 lsst.utils.tests.init()
158if __name__ == '__main__': 158 ↛ 159line 158 didn't jump to line 159, because the condition on line 158 was never true
159 lsst.utils.tests.init()
160 unittest.main()