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

1from builtins import zip 

2import os 

3import unittest 

4import tempfile 

5import lsst.utils.tests 

6import numpy as np 

7from lsst.sims.utils.CodeUtilities import sims_clean_up 

8from lsst.sims.utils import ModifiedJulianDate 

9from lsst.sims.catalogs.definitions import InstanceCatalog 

10from lsst.sims.catUtils.utils import (testStarsDBObj, testGalaxyDiskDBObj, 

11 testGalaxyBulgeDBObj, testGalaxyAgnDBObj) 

12from lsst.sims.catUtils.exampleCatalogDefinitions import (PhoSimCatalogSersic2D, PhoSimCatalogPoint, 

13 PhoSimCatalogZPoint) 

14from lsst.sims.catUtils.utils import makePhoSimTestDB 

15from lsst.sims.catUtils.mixins import VariabilityStars, VariabilityGalaxies 

16from lsst.sims.catUtils.mixins import VariabilityAGN 

17from lsst.sims.catUtils.mixins import ExtraGalacticVariabilityModels 

18from lsst.sims.catUtils.utils import TestVariabilityMixin 

19from lsst.sims.catUtils.mixins import AstrometryStars, AstrometryGalaxies 

20 

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

22 

23 

24def setup_module(module): 

25 lsst.utils.tests.init() 

26 

27 

28class PhoSimPointVariable(PhoSimCatalogPoint, VariabilityStars, TestVariabilityMixin): 

29 catalog_type = __file__ + 'pho_sim_point_variable' 

30 pass 

31 

32 

33class PhoSimZPointVariable(PhoSimCatalogZPoint, VariabilityAGN, TestVariabilityMixin): 

34 catalog_type = __file__ + 'pho_sim_z_point_variable' 

35 pass 

36 

37 

38class AgnControlCatalog(InstanceCatalog, VariabilityGalaxies, TestVariabilityMixin, AstrometryGalaxies): 

39 catalog_type = __file__ + "agn_control_catalog" 

40 column_outputs = ['magNorm', 'delta_rAgn'] 

41 

42 

43class BulgeControlCatalog(InstanceCatalog, AstrometryGalaxies): 

44 catalog_type = __file__ + "bulge_control_catalog" 

45 column_outputs = ['magNorm'] 

46 

47 

48class DiskControlCatalog(InstanceCatalog, AstrometryGalaxies): 

49 catalog_type = __file__ + "disk_control_catalog" 

50 column_outputs = ['magNorm'] 

51 

52 

53class StarControlCatalog(InstanceCatalog, AstrometryStars, VariabilityStars, TestVariabilityMixin): 

54 catalog_type = __file__ + "star_control_catalog" 

55 column_outputs = ['magNorm', 'delta_lsst_r'] 

56 

57 

58class PhoSimVariabilityTest(unittest.TestCase): 

59 """ 

60 This class will test that variability gets correctly propagated into 

61 PhoSim catalogs 

62 """ 

63 

64 longMessage = True 

65 

66 @classmethod 

67 def setUpClass(cls): 

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

69 cls.obs_metadata = makePhoSimTestDB(size=10, filename=cls.dbName) 

70 cls.obs_metadata.mjd = ModifiedJulianDate(TAI=60000.0) 

71 

72 cls.bulgeDB = testGalaxyBulgeDBObj(driver='sqlite', database=cls.dbName) 

73 cls.diskDB = testGalaxyDiskDBObj(driver='sqlite', database=cls.dbName) 

74 cls.agnDB = testGalaxyAgnDBObj(driver='sqlite', database=cls.dbName) 

75 cls.starDB = testStarsDBObj(driver='sqlite', database=cls.dbName) 

76 

77 @classmethod 

78 def tearDownClass(cls): 

79 sims_clean_up() 

80 del cls.bulgeDB 

81 del cls.diskDB 

82 del cls.agnDB 

83 del cls.starDB 

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

85 os.unlink(cls.dbName) 

86 

87 def testAgn(self): 

88 """ 

89 Test that variability is correctly added to PhoSim Agn catalogs 

90 by outputting both a variable PhoSim catalog and a control catalog 

91 and making sure that the magNorm column in the PhoSim catalog 

92 is equal to the sum of the magNorm column in the control plus 

93 the detla_mag column from Variability. 

94 """ 

95 baseline = AgnControlCatalog(self.agnDB, obs_metadata=self.obs_metadata) 

96 test = PhoSimZPointVariable(self.agnDB, obs_metadata=self.obs_metadata) 

97 

98 for bb, tt in zip(baseline.iter_catalog(), test.iter_catalog()): 

99 msg = 'baseline mag %.6e; delta %.6e' % (bb[0], bb[1]) 

100 self.assertAlmostEqual(bb[0] + bb[1], tt[4], 10, msg=msg) 

101 self.assertGreater(np.abs(bb[1]), 0.0) 

102 

103 def testStars(self): 

104 """ 

105 Test that variability is correctly added to PhoSim star catalogs 

106 by outputting both a variable PhoSim catalog and a control catalog 

107 and making sure that the magNorm column in the PhoSim catalog 

108 is equal to the sum of the magNorm column in the control plus 

109 the detla_mag column from Variability. 

110 """ 

111 baseline = StarControlCatalog(self.starDB, obs_metadata=self.obs_metadata) 

112 test = PhoSimPointVariable(self.starDB, obs_metadata=self.obs_metadata) 

113 

114 for bb, tt in zip(baseline.iter_catalog(), test.iter_catalog()): 

115 msg = 'baseline mag %.6e; delta %.6e' % (bb[0], bb[1]) 

116 self.assertAlmostEqual(bb[0] + bb[1], tt[4], 10, msg=msg) 

117 self.assertGreater(np.abs(bb[1]), 0.0) 

118 

119 def testBulges(self): 

120 """ 

121 Make sure that the magNorm output to PhoSim catalogs that lack 

122 variability is the same as the column 'magNorm' taken from the database 

123 """ 

124 baseline = BulgeControlCatalog(self.bulgeDB, obs_metadata=self.obs_metadata) 

125 test = PhoSimCatalogSersic2D(self.bulgeDB, obs_metadata=self.obs_metadata) 

126 

127 for bb, tt in zip(baseline.iter_catalog(), test.iter_catalog()): 

128 self.assertAlmostEqual(bb[0], tt[4], 10) 

129 

130 def testDisks(self): 

131 baseline = DiskControlCatalog(self.diskDB, obs_metadata=self.obs_metadata) 

132 test = PhoSimCatalogSersic2D(self.diskDB, obs_metadata=self.obs_metadata) 

133 

134 for bb, tt in zip(baseline.iter_catalog(), test.iter_catalog()): 

135 self.assertAlmostEqual(bb[0], tt[4], 10) 

136 

137 

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

139 pass 

140 

141if __name__ == "__main__": 141 ↛ 142line 141 didn't jump to line 142, because the condition on line 141 was never true

142 lsst.utils.tests.init() 

143 unittest.main()