Hide keyboard shortcuts

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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

from builtins import range 

import os 

import numpy as np 

import unittest 

import tempfile 

 

import lsst.utils.tests 

from lsst.utils import getPackageDir 

from lsst.sims.utils.CodeUtilities import sims_clean_up 

from lsst.sims.catUtils.utils import makePhoSimTestDB 

from lsst.sims.utils import ObservationMetaData 

from lsst.sims.catalogs.definitions import InstanceCatalog 

from lsst.sims.utils import defaultSpecMap 

from lsst.sims.catUtils.utils import testStarsDBObj, testGalaxyTileDBObj 

from lsst.sims.photUtils import Sed, Bandpass, LSSTdefaults, calcMagError_sed 

from lsst.sims.photUtils import PhotometricParameters 

from lsst.sims.photUtils.utils import setM5 

from lsst.sims.catUtils.mixins import PhotometryStars, PhotometryGalaxies 

 

ROOT = os.path.abspath(os.path.dirname(__file__)) 

 

 

def setup_module(module): 

lsst.utils.tests.init() 

 

 

class testStarCatalog(InstanceCatalog, PhotometryStars): 

catalog_type = __file__ + 'test_star_catalog' 

column_outputs = ['raJ2000', 'decJ2000', 

'lsst_u', 'lsst_g', 'lsst_r', 'lsst_i', 'lsst_z', 'lsst_y', 

'sigma_lsst_u', 'sigma_lsst_g', 'sigma_lsst_r', 'sigma_lsst_i', 

'sigma_lsst_z', 'sigma_lsst_y', 'sedFilename', 'magNorm', 'galacticAv'] 

 

 

class testGalaxyCatalog(InstanceCatalog, PhotometryGalaxies): 

catalog_type = __file__ + "test_galaxy_catalog" 

 

column_outputs = ['raJ2000', 'decJ2000', 

'lsst_u', 'lsst_g', 'lsst_r', 'lsst_i', 'lsst_z', 'lsst_y', 

'uBulge', 'gBulge', 'rBulge', 'iBulge', 'zBulge', 'yBulge', 

'uDisk', 'gDisk', 'rDisk', 'iDisk', 'zDisk', 'yDisk', 

'uAgn', 'gAgn', 'rAgn', 'iAgn', 'zAgn', 'yAgn', 

'sigma_lsst_u', 'sigma_lsst_g', 'sigma_lsst_r', 'sigma_lsst_i', 

'sigma_lsst_z', 'sigma_lsst_y', 

'sigma_uBulge', 'sigma_gBulge', 'sigma_rBulge', 'sigma_iBulge', 

'sigma_zBulge', 'sigma_yBulge', 

'sigma_uDisk', 'sigma_gDisk', 'sigma_rDisk', 'sigma_iDisk', 

'sigma_zDisk', 'sigma_yDisk', 

'sigma_uAgn', 'sigma_gAgn', 'sigma_rAgn', 'sigma_iAgn', 

'sigma_zAgn', 'sigma_yAgn', 

'sedFilenameBulge', 'sedFilenameDisk', 'sedFilenameAgn', 

'magNormBulge', 'magNormDisk', 'magNormAgn', 

'internalAvBulge', 'internalAvDisk', 'redshift'] 

 

 

class testPhotometricUncertaintyGetters(unittest.TestCase): 

""" 

This class will test that the getters for photometric uncertainties 

are calculating the correct values. 

 

This test is here rather than in sims_photUtils because the infrastructure 

to generate fake databases is in sims_catUtils. 

""" 

 

@classmethod 

def setUpClass(cls): 

lsstDefaults = LSSTdefaults() 

cls.dbName = tempfile.mktemp(prefix='uncertaintyTestDB-', suffix='.db', dir=ROOT) 

 

default_obs_metadata = makePhoSimTestDB(filename=cls.dbName, size=10, radius = 5.0) 

bandpass = ['u', 'g', 'r', 'i', 'z', 'y'] 

m5 = list(lsstDefaults._m5.values()) 

 

cls.obs_metadata = ObservationMetaData(pointingRA = default_obs_metadata.pointingRA, 

pointingDec = default_obs_metadata.pointingDec, 

rotSkyPos = default_obs_metadata.rotSkyPos, 

bandpassName = bandpass, 

m5 = m5) 

 

cls.obs_metadata.setBandpassM5andSeeing(bandpassName=bandpass, m5=m5) 

cls.driver = 'sqlite' 

cls.host = '' 

 

cls.skySeds = [] 

cls.hardwareBandpasses = [] 

cls.totalBandpasses = [] 

cls.bandpasses = ['u', 'g', 'r', 'i', 'z', 'y'] 

 

components = ['detector.dat', 'm1.dat', 'm2.dat', 'm3.dat', 

'lens1.dat', 'lens2.dat', 'lens3.dat'] 

 

for b in cls.bandpasses: 

bandpassDummy = Bandpass() 

bandpassDummy.readThroughput(os.path.join(getPackageDir('throughputs'), 

'baseline', 'total_%s.dat' % b)) 

cls.totalBandpasses.append(bandpassDummy) 

 

for b in cls.bandpasses: 

finalComponents = [] 

for c in components: 

finalComponents.append(os.path.join(getPackageDir('throughputs'), 'baseline', c)) 

finalComponents.append(os.path.join(getPackageDir('throughputs'), 

'baseline', 'filter_%s.dat' % b)) 

bandpassDummy = Bandpass() 

bandpassDummy.readThroughputList(finalComponents) 

cls.hardwareBandpasses.append(bandpassDummy) 

 

for i in range(len(cls.bandpasses)): 

sedDummy = Sed() 

sedDummy.readSED_flambda(os.path.join(getPackageDir('throughputs'), 

'baseline', 'darksky.dat')) 

normalizedSedDummy = setM5(cls.obs_metadata.m5[cls.bandpasses[i]], sedDummy, 

cls.totalBandpasses[i], cls.hardwareBandpasses[i], 

FWHMeff=lsstDefaults.FWHMeff(cls.bandpasses[i]), 

photParams=PhotometricParameters()) 

 

cls.skySeds.append(normalizedSedDummy) 

 

@classmethod 

def tearDownClass(cls): 

sims_clean_up() 

if os.path.exists(cls.dbName): 

os.unlink(cls.dbName) 

del cls.dbName 

del cls.driver 

del cls.host 

del cls.obs_metadata 

del cls.totalBandpasses 

del cls.hardwareBandpasses 

del cls.skySeds 

 

def testStellarPhotometricUncertainties(self): 

""" 

Test in the case of a catalog of stars 

""" 

lsstDefaults = LSSTdefaults() 

starDB = testStarsDBObj(driver=self.driver, host=self.host, database=self.dbName) 

starCat = testStarCatalog(starDB, obs_metadata=self.obs_metadata) 

 

ct = 0 

for line in starCat.iter_catalog(): 

starSed = Sed() 

starSed.readSED_flambda(os.path.join(getPackageDir('sims_sed_library'), 

defaultSpecMap[line[14]])) 

imsimband = Bandpass() 

imsimband.imsimBandpass() 

fNorm = starSed.calcFluxNorm(line[15], imsimband) 

starSed.multiplyFluxNorm(fNorm) 

 

aV = np.float(line[16]) 

a_int, b_int = starSed.setupCCM_ab() 

starSed.addDust(a_int, b_int, A_v=aV) 

 

for i in range(len(self.bandpasses)): 

controlSigma = calcMagError_sed(starSed, self.totalBandpasses[i], 

self.skySeds[i], 

self.hardwareBandpasses[i], 

FWHMeff=lsstDefaults.FWHMeff(self.bandpasses[i]), 

photParams=PhotometricParameters()) 

 

testSigma = line[8+i] 

self.assertAlmostEqual(controlSigma, testSigma, 4) 

ct += 1 

self.assertGreater(ct, 0) 

 

def testGalaxyPhotometricUncertainties(self): 

""" 

Test in the case of a catalog of galaxies 

""" 

lsstDefaults = LSSTdefaults() 

galDB = testGalaxyTileDBObj(driver=self.driver, host=self.host, database=self.dbName) 

galCat = testGalaxyCatalog(galDB, obs_metadata=self.obs_metadata) 

imsimband = Bandpass() 

imsimband.imsimBandpass() 

ct = 0 

for line in galCat.iter_catalog(): 

bulgeSedName = line[50] 

diskSedName = line[51] 

agnSedName = line[52] 

magNormBulge = line[53] 

magNormDisk = line[54] 

magNormAgn = line[55] 

avBulge = line[56] 

avDisk = line[57] 

redshift = line[58] 

 

bulgeSed = Sed() 

bulgeSed.readSED_flambda(os.path.join(getPackageDir('sims_sed_library'), 

defaultSpecMap[bulgeSedName])) 

fNorm = bulgeSed.calcFluxNorm(magNormBulge, imsimband) 

bulgeSed.multiplyFluxNorm(fNorm) 

 

diskSed = Sed() 

diskSed.readSED_flambda(os.path.join(getPackageDir('sims_sed_library'), 

defaultSpecMap[diskSedName])) 

fNorm = diskSed.calcFluxNorm(magNormDisk, imsimband) 

diskSed.multiplyFluxNorm(fNorm) 

 

agnSed = Sed() 

agnSed.readSED_flambda(os.path.join(getPackageDir('sims_sed_library'), 

defaultSpecMap[agnSedName])) 

fNorm = agnSed.calcFluxNorm(magNormAgn, imsimband) 

agnSed.multiplyFluxNorm(fNorm) 

 

a_int, b_int = bulgeSed.setupCCM_ab() 

bulgeSed.addDust(a_int, b_int, A_v=avBulge) 

 

a_int, b_int = diskSed.setupCCM_ab() 

diskSed.addDust(a_int, b_int, A_v=avDisk) 

 

bulgeSed.redshiftSED(redshift, dimming=True) 

diskSed.redshiftSED(redshift, dimming=True) 

agnSed.redshiftSED(redshift, dimming=True) 

 

bulgeSed.resampleSED(wavelen_match=self.totalBandpasses[0].wavelen) 

diskSed.resampleSED(wavelen_match=bulgeSed.wavelen) 

agnSed.resampleSED(wavelen_match=bulgeSed.wavelen) 

 

np.testing.assert_almost_equal(bulgeSed.wavelen, diskSed.wavelen) 

np.testing.assert_almost_equal(bulgeSed.wavelen, agnSed.wavelen) 

 

fl = bulgeSed.flambda + diskSed.flambda + agnSed.flambda 

 

totalSed = Sed(wavelen=bulgeSed.wavelen, flambda=fl) 

 

sedList = [totalSed, bulgeSed, diskSed, agnSed] 

 

for i, spectrum in enumerate(sedList): 

if i == 0: 

msgroot = 'failed on total' 

elif i == 1: 

msgroot = 'failed on bulge' 

elif i == 2: 

msgroot = 'failed on disk' 

elif i == 3: 

msgroot = 'failed on agn' 

 

for j, b in enumerate(self.bandpasses): 

controlSigma = calcMagError_sed(spectrum, self.totalBandpasses[j], 

self.skySeds[j], 

self.hardwareBandpasses[j], 

FWHMeff=lsstDefaults.FWHMeff(b), 

photParams=PhotometricParameters()) 

 

testSigma = line[26+(i*6)+j] 

msg = '%e neq %e; ' % (testSigma, controlSigma) + msgroot 

self.assertAlmostEqual(testSigma, controlSigma, 10, msg=msg) 

ct += 1 

 

self.assertGreater(ct, 0) 

 

 

class MemoryTestClass(lsst.utils.tests.MemoryTestCase): 

pass 

 

256 ↛ 257line 256 didn't jump to line 257, because the condition on line 256 was never trueif __name__ == "__main__": 

lsst.utils.tests.init() 

unittest.main()