Coverage for tests/testVectorMetrics.py : 14%

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
1from builtins import zip
2import matplotlib
3matplotlib.use("Agg")
4import numpy as np
5import unittest
6import lsst.sims.maf.metrics as metrics
7import lsst.sims.maf.slicers as slicers
8import lsst.sims.maf.metricBundles as metricBundle
9import lsst.utils.tests
12class Test2D(unittest.TestCase):
14 def setUp(self):
15 names = ['night', 'fieldId', 'fieldRA', 'fieldDec', 'fiveSigmaDepth', 'observationStartMJD']
16 types = [int, int, float, float, float, float]
18 self.m5_1 = 25.
19 self.m5_2 = 24.
21 self.n1 = 50
22 self.n2 = 49
24 # Picking RA and Dec values that will hit nside=16 healpixels
25 self.simData = np.zeros(self.n1+self.n2, dtype=list(zip(names, types)))
26 self.simData['night'][0:self.n1] = 1
27 self.simData['fieldId'][0:self.n1] = 1
28 self.simData['fieldRA'][0:self.n1] = 10.
29 self.simData['fieldDec'][0:self.n1] = 0.
30 self.simData['fiveSigmaDepth'][0:self.n1] = self.m5_1
32 self.simData['night'][self.n1:] = 2
33 self.simData['fieldId'][self.n1:] = 2
34 self.simData['fieldRA'][self.n1:] = 190.
35 self.simData['fieldDec'][self.n1:] = -20.
36 self.simData['fiveSigmaDepth'][self.n1:] = self.m5_2
38 self.fieldData = np.zeros(2, dtype=list(zip(['fieldId', 'fieldRA', 'fieldDec'],
39 [int, float, float])))
40 self.fieldData['fieldId'] = [1, 2]
41 self.fieldData['fieldRA'] = np.radians([10., 190.])
42 self.fieldData['fieldDec'] = np.radians([0., -20.])
44 self.simData['observationStartMJD'] = self.simData['night']
46 def testOpsim2dSlicer(self):
47 metric = metrics.AccumulateCountMetric(bins=[0.5, 1.5, 2.5])
48 slicer = slicers.OpsimFieldSlicer()
49 sql = ''
50 mb = metricBundle.MetricBundle(metric, slicer, sql)
51 # Clobber the stacker that gets auto-added
52 mb.stackerList = []
53 mbg = metricBundle.MetricBundleGroup({0: mb}, None, saveEarly=False)
54 mbg.setCurrent('')
55 mbg.fieldData = self.fieldData
56 mbg.runCurrent('', simData=self.simData)
57 expected = np.array([[self.n1, self.n1],
58 [-666., self.n2]])
59 assert(np.array_equal(mb.metricValues.data, expected))
61 def testHealpix2dSlicer(self):
62 metric = metrics.AccumulateCountMetric(bins=[0.5, 1.5, 2.5])
63 slicer = slicers.HealpixSlicer(nside=16)
64 sql = ''
65 mb = metricBundle.MetricBundle(metric, slicer, sql)
66 # Clobber the stacker that gets auto-added
67 mb.stackerList = []
68 mbg = metricBundle.MetricBundleGroup({0: mb}, None, saveEarly=False)
69 mbg.setCurrent('')
70 mbg.runCurrent('', simData=self.simData)
72 good = np.where(mb.metricValues.mask[:, -1] == False)[0]
73 expected = np.array([[self.n1, self.n1],
74 [-666., self.n2]])
75 assert(np.array_equal(mb.metricValues.data[good, :], expected))
77 def testHistogramMetric(self):
78 metric = metrics.HistogramMetric(bins=[0.5, 1.5, 2.5])
79 slicer = slicers.HealpixSlicer(nside=16)
80 sql = ''
81 mb = metricBundle.MetricBundle(metric, slicer, sql)
82 # Clobber the stacker that gets auto-added
83 mb.stackerList = []
84 mbg = metricBundle.MetricBundleGroup({0: mb}, None, saveEarly=False)
85 mbg.setCurrent('')
86 mbg.runCurrent('', simData=self.simData)
88 good = np.where(mb.metricValues.mask[:, -1] == False)[0]
89 expected = np.array([[self.n1, 0.],
90 [0., self.n2]])
91 assert(np.array_equal(mb.metricValues.data[good, :], expected))
93 # Check that I can run a different statistic
94 metric = metrics.HistogramMetric(col='fiveSigmaDepth',
95 statistic='sum',
96 bins=[0.5, 1.5, 2.5])
97 mb = metricBundle.MetricBundle(metric, slicer, sql)
98 # Clobber the stacker that gets auto-added
99 mb.stackerList = []
100 mbg = metricBundle.MetricBundleGroup({0: mb}, None, saveEarly=False)
101 mbg.setCurrent('')
102 mbg.runCurrent('', simData=self.simData)
103 expected = np.array([[self.m5_1*self.n1, 0.],
104 [0., self.m5_2*self.n2]])
105 assert(np.array_equal(mb.metricValues.data[good, :], expected))
107 def testAccumulateMetric(self):
108 metric = metrics.AccumulateMetric(col='fiveSigmaDepth', bins=[0.5, 1.5, 2.5])
109 slicer = slicers.HealpixSlicer(nside=16)
110 sql = ''
111 mb = metricBundle.MetricBundle(metric, slicer, sql)
112 # Clobber the stacker that gets auto-added
113 mb.stackerList = []
114 mbg = metricBundle.MetricBundleGroup({0: mb}, None, saveEarly=False)
115 mbg.setCurrent('')
116 mbg.runCurrent('', simData=self.simData)
117 good = np.where(mb.metricValues.mask[:, -1] == False)[0]
118 expected = np.array([[self.n1*self.m5_1, self.n1*self.m5_1],
119 [-666., self.n2 * self.m5_2]])
120 assert(np.array_equal(mb.metricValues.data[good, :], expected))
122 def testHistogramM5Metric(self):
123 metric = metrics.HistogramM5Metric(bins=[0.5, 1.5, 2.5])
124 slicer = slicers.HealpixSlicer(nside=16)
125 sql = ''
126 mb = metricBundle.MetricBundle(metric, slicer, sql)
127 # Clobber the stacker that gets auto-added
128 mb.stackerList = []
129 mbg = metricBundle.MetricBundleGroup({0: mb}, None, saveEarly=False)
130 mbg.setCurrent('')
131 mbg.runCurrent('', simData=self.simData)
132 good = np.where((mb.metricValues.mask[:, 0] == False) |
133 (mb.metricValues.mask[:, 1] == False))[0]
135 checkMetric = metrics.Coaddm5Metric()
136 tempSlice = np.zeros(self.n1, dtype=list(zip(['fiveSigmaDepth'], [float])))
137 tempSlice['fiveSigmaDepth'] += self.m5_1
138 val1 = checkMetric.run(tempSlice)
139 tempSlice = np.zeros(self.n2, dtype=list(zip(['fiveSigmaDepth'], [float])))
140 tempSlice['fiveSigmaDepth'] += self.m5_2
141 val2 = checkMetric.run(tempSlice)
143 expected = np.array([[val1, -666.],
144 [-666., val2]])
145 assert(np.array_equal(mb.metricValues.data[good, :], expected))
147 def testAccumulateM5Metric(self):
148 metric = metrics.AccumulateM5Metric(bins=[0.5, 1.5, 2.5])
149 slicer = slicers.HealpixSlicer(nside=16)
150 sql = ''
151 mb = metricBundle.MetricBundle(metric, slicer, sql)
152 # Clobber the stacker that gets auto-added
153 mb.stackerList = []
154 mbg = metricBundle.MetricBundleGroup({0: mb}, None, saveEarly=False)
155 mbg.setCurrent('')
156 mbg.runCurrent('', simData=self.simData)
157 good = np.where(mb.metricValues.mask[:, -1] == False)[0]
159 checkMetric = metrics.Coaddm5Metric()
160 tempSlice = np.zeros(self.n1, dtype=list(zip(['fiveSigmaDepth'], [float])))
161 tempSlice['fiveSigmaDepth'] += self.m5_1
162 val1 = checkMetric.run(tempSlice)
163 tempSlice = np.zeros(self.n2, dtype=list(zip(['fiveSigmaDepth'], [float])))
164 tempSlice['fiveSigmaDepth'] += self.m5_2
165 val2 = checkMetric.run(tempSlice)
167 expected = np.array([[val1, val1],
168 [-666., val2]])
169 assert(np.array_equal(mb.metricValues.data[good, :], expected))
171 def testAccumulateUniformityMetric(self):
172 names = ['night']
173 types = ['float']
174 dataSlice = np.zeros(3652, dtype=list(zip(names, types)))
176 # Test that a uniform distribution is very close to zero
177 dataSlice['night'] = np.arange(1, dataSlice.size+1)
178 metric = metrics.AccumulateUniformityMetric()
179 result = metric.run(dataSlice)
180 assert(np.max(result) < 1./365.25)
181 assert(np.min(result) >= 0)
183 # Test that if everythin on night 1 or last night, then result is ~1
184 dataSlice['night'] = 1
185 result = metric.run(dataSlice)
186 assert(np.max(result) >= 1.-1./365.25)
187 dataSlice['night'] = 3652
188 result = metric.run(dataSlice)
189 assert(np.max(result) >= 1.-1./365.25)
191 # Test if all taken in the middle, result ~0.5
192 dataSlice['night'] = 3652/2
193 result = metric.run(dataSlice)
194 assert(np.max(result) >= 0.5-1./365.25)
196 def testRunRegularToo(self):
197 """
198 Test that a binned slicer and a regular slicer can run together
199 """
200 bundleList = []
201 metric = metrics.AccumulateM5Metric(bins=[0.5, 1.5, 2.5])
202 slicer = slicers.HealpixSlicer(nside=16)
203 sql = ''
204 bundleList.append(metricBundle.MetricBundle(metric, slicer, sql))
205 metric = metrics.Coaddm5Metric()
206 slicer = slicers.HealpixSlicer(nside=16)
207 bundleList.append(metricBundle.MetricBundle(metric, slicer, sql))
208 for bundle in bundleList:
209 bundle.stackerList = []
210 bd = metricBundle.makeBundlesDictFromList(bundleList)
211 mbg = metricBundle.MetricBundleGroup(bd, None, saveEarly=False)
212 mbg.setCurrent('')
213 mbg.runCurrent('', simData=self.simData)
215 assert(np.array_equal(bundleList[0].metricValues[:, 1].compressed(),
216 bundleList[1].metricValues.compressed()))
219class TestMemory(lsst.utils.tests.MemoryTestCase):
220 pass
223def setup_module(module):
224 lsst.utils.tests.init()
227if __name__ == "__main__": 227 ↛ 228line 227 didn't jump to line 228, because the condition on line 227 was never true
228 lsst.utils.tests.init()
229 unittest.main()