Coverage for tests/testArbitraryUncertaintyGetters.py : 24%

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 __future__ import with_statement
2from builtins import next
3from builtins import object
4import os
5import numpy as np
6import unittest
7import lsst.utils.tests
9from lsst.utils import getPackageDir
10from lsst.sims.catalogs.db import fileDBObject
11from lsst.sims.utils import ObservationMetaData
12from lsst.sims.catalogs.definitions import InstanceCatalog
13from lsst.sims.catalogs.decorators import compound
14from lsst.sims.catUtils.mixins import PhotometryStars
15from lsst.sims.photUtils import BandpassDict, Bandpass, Sed, PhotometricParameters, calcMagError_m5
18def setup_module(module):
19 lsst.utils.tests.init()
22class PhotometryCartoon(object):
24 @compound('cartoon_u', 'cartoon_g', 'cartoon_r', 'cartoon_i', 'cartoon_z')
25 def get_cartoon_mags(self):
26 if not hasattr(self, 'cartoonBandpassDict'):
28 bandpassDir = os.path.join(getPackageDir('sims_photUtils'), 'tests', 'cartoonSedTestData')
30 self.cartoonBandpassDict = \
31 BandpassDict.loadTotalBandpassesFromFiles(bandpassNames = ['u', 'g', 'r', 'i', 'z'],
32 bandpassDir = bandpassDir,
33 bandpassRoot = 'test_bandpass_')
35 return self._quiescentMagnitudeGetter(self.cartoonBandpassDict, self.get_cartoon_mags._colnames)
37 @compound('sigma_cartoon_u', 'sigma_cartoon_g', 'sigma_cartoon_r', 'sigma_cartoon_i', 'sigma_cartoon_z')
38 def get_cartoon_uncertainty(self):
39 return self._magnitudeUncertaintyGetter(['cartoon_u', 'cartoon_g', 'cartoon_r',
40 'cartoon_i', 'cartoon_z'],
41 ['c_u', 'c_g', 'c_r', 'c_i', 'c_z', 'c_y'],
42 'cartoonBandpassDict')
45class CartoonStars(InstanceCatalog, PhotometryStars, PhotometryCartoon):
46 catalog_type = __file__ + 'cartoon_stars'
47 column_outputs = ['cartoon_u', 'cartoon_g',
48 'sigma_cartoon_u', 'sigma_cartoon_g']
50 default_formats = {'f': '%.13f'}
53class CartoonUncertaintyTestCase(unittest.TestCase):
54 """
55 This unit test suite will verify that our 'arbitrarily extensible' framework
56 for writing magnitude uncertainty getters actually behaves as advertised
57 """
59 def setUp(self):
60 self.normband = Bandpass()
61 self.normband.imsimBandpass()
62 self.uband = Bandpass()
63 self.uband.readThroughput(os.path.join(getPackageDir('sims_photUtils'), 'tests',
64 'cartoonSedTestData', 'test_bandpass_u.dat'))
65 self.gband = Bandpass()
66 self.gband.readThroughput(os.path.join(getPackageDir('sims_photUtils'), 'tests',
67 'cartoonSedTestData', 'test_bandpass_g.dat'))
69 def test_stars(self):
70 obs = ObservationMetaData(bandpassName=['c_u', 'c_g'], m5=[25.0, 26.0])
72 db_dtype = np.dtype([('id', np.int),
73 ('raJ2000', np.float),
74 ('decJ2000', np.float),
75 ('sedFilename', str, 100),
76 ('magNorm', np.float),
77 ('galacticAv', np.float)])
79 inputDir = os.path.join(getPackageDir('sims_catUtils'), 'tests', 'testData')
80 inputFile = os.path.join(inputDir, 'IndicesTestCatalogStars.txt')
81 db = fileDBObject(inputFile, dtype=db_dtype, runtable='test', idColKey='id')
82 cat = CartoonStars(db, obs_metadata=obs)
83 with lsst.utils.tests.getTempFilePath('.txt') as catName:
84 cat.write_catalog(catName)
85 dtype = np.dtype([(name, np.float) for name in cat.column_outputs])
86 controlData = np.genfromtxt(catName, dtype=dtype, delimiter=',')
88 db_columns = db.query_columns(['id', 'raJ2000', 'decJ2000', 'sedFilename', 'magNorm', 'galacticAv'])
90 sedDir = os.path.join(getPackageDir('sims_sed_library'), 'starSED', 'kurucz')
92 for ix, line in enumerate(next(db_columns)):
93 spectrum = Sed()
94 spectrum.readSED_flambda(os.path.join(sedDir, line[3]))
95 fnorm = spectrum.calcFluxNorm(line[4], self.normband)
96 spectrum.multiplyFluxNorm(fnorm)
97 a_x, b_x = spectrum.setupCCM_ab()
98 spectrum.addDust(a_x, b_x, A_v=line[5])
99 umag = spectrum.calcMag(self.uband)
100 self.assertAlmostEqual(umag, controlData['cartoon_u'][ix], 3)
101 gmag = spectrum.calcMag(self.gband)
102 self.assertAlmostEqual(gmag, controlData['cartoon_g'][ix], 3)
103 umagError, gamma = calcMagError_m5(umag, self.uband, obs.m5['c_u'], PhotometricParameters())
104 gmagError, gamma = calcMagError_m5(gmag, self.gband, obs.m5['c_g'], PhotometricParameters())
105 self.assertAlmostEqual(umagError, controlData['sigma_cartoon_u'][ix], 3)
106 self.assertAlmostEqual(gmagError, controlData['sigma_cartoon_g'][ix], 3)
108 def test_mixed_stars(self):
109 """
110 Here we will test the (somewhat absurd) case of a catalog with two different bandpasses
111 (lsst_ and cartoon_) in order to verify that gamma values are being cached correctly
112 """
114 lsst_u_band = Bandpass()
115 lsst_u_band.readThroughput(os.path.join(getPackageDir('throughputs'), 'baseline', 'total_u.dat'))
116 lsst_g_band = Bandpass()
117 lsst_g_band.readThroughput(os.path.join(getPackageDir('throughputs'), 'baseline', 'total_g.dat'))
119 obs = ObservationMetaData(bandpassName=['c_u', 'c_g', 'u', 'g'],
120 m5=[25.0, 26.0, 15.0, 16.0])
121 # make the difference in m5 between the two bandpass systems extreme
122 # so that, in the unit test, we can be sure that the correct values
123 # are being used for the correct getters
125 db_dtype = np.dtype([('id', np.int),
126 ('raJ2000', np.float),
127 ('decJ2000', np.float),
128 ('sedFilename', str, 100),
129 ('magNorm', np.float),
130 ('galacticAv', np.float)])
132 inputDir = os.path.join(getPackageDir('sims_catUtils'), 'tests', 'testData')
133 inputFile = os.path.join(inputDir, 'IndicesTestCatalogStars.txt')
134 db = fileDBObject(inputFile, dtype=db_dtype, runtable='test', idColKey='id')
135 cat = CartoonStars(db, obs_metadata=obs, column_outputs=['lsst_u', 'lsst_g',
136 'sigma_lsst_u', 'sigma_lsst_g'])
137 with lsst.utils.tests.getTempFilePath('.txt') as catName:
138 cat.write_catalog(catName)
139 dtype = np.dtype([(name, np.float) for name in cat._column_outputs])
140 controlData = np.genfromtxt(catName, dtype=dtype, delimiter=',')
142 db_columns = db.query_columns(['id', 'raJ2000', 'decJ2000', 'sedFilename', 'magNorm', 'galacticAv'])
144 sedDir = os.path.join(getPackageDir('sims_sed_library'), 'starSED', 'kurucz')
146 for ix, line in enumerate(next(db_columns)):
147 spectrum = Sed()
148 spectrum.readSED_flambda(os.path.join(sedDir, line[3]))
149 fnorm = spectrum.calcFluxNorm(line[4], self.normband)
150 spectrum.multiplyFluxNorm(fnorm)
151 a_x, b_x = spectrum.setupCCM_ab()
152 spectrum.addDust(a_x, b_x, A_v=line[5])
153 umag = spectrum.calcMag(self.uband)
154 self.assertAlmostEqual(umag, controlData['cartoon_u'][ix], 3)
155 gmag = spectrum.calcMag(self.gband)
156 self.assertAlmostEqual(gmag, controlData['cartoon_g'][ix], 3)
157 lsst_umag = spectrum.calcMag(lsst_u_band)
158 self.assertAlmostEqual(lsst_umag, controlData['lsst_u'][ix], 3)
159 lsst_gmag = spectrum.calcMag(lsst_g_band)
160 self.assertAlmostEqual(lsst_gmag, controlData['lsst_g'][ix], 3)
161 umagError, gamma = calcMagError_m5(umag, self.uband, obs.m5['c_u'], PhotometricParameters())
162 gmagError, gamma = calcMagError_m5(gmag, self.gband, obs.m5['c_g'], PhotometricParameters())
163 self.assertAlmostEqual(umagError, controlData['sigma_cartoon_u'][ix], 3)
164 self.assertAlmostEqual(gmagError, controlData['sigma_cartoon_g'][ix], 3)
166 lsst_umagError, gamma = calcMagError_m5(lsst_umag, lsst_u_band,
167 obs.m5['u'], PhotometricParameters())
168 lsst_gmagError, gamma = calcMagError_m5(lsst_gmag, lsst_g_band,
169 obs.m5['g'], PhotometricParameters())
171 self.assertAlmostEqual(lsst_umagError, controlData['sigma_lsst_u'][ix], 3)
172 self.assertAlmostEqual(lsst_gmagError, controlData['sigma_lsst_g'][ix], 3)
173 self.assertGreater(np.abs(lsst_umagError-umagError), 0.01)
174 self.assertGreater(np.abs(lsst_gmagError-gmagError), 0.01)
177class MemoryTestClass(lsst.utils.tests.MemoryTestCase):
178 pass
180if __name__ == "__main__": 180 ↛ 181line 180 didn't jump to line 181, because the condition on line 180 was never true
181 lsst.utils.tests.init()
182 unittest.main()