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

# 

# LSST Data Management System 

# 

# Copyright 2008-2015 AURA/LSST. 

# 

# This product includes software developed by the 

# LSST Project (http://www.lsst.org/). 

# 

# This program is free software: you can redistribute it and/or modify 

# it under the terms of the GNU General Public License as published by 

# the Free Software Foundation, either version 3 of the License, or 

# (at your option) any later version. 

# 

# This program is distributed in the hope that it will be useful, 

# but WITHOUT ANY WARRANTY; without even the implied warranty of 

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

# GNU General Public License for more details. 

# 

# You should have received a copy of the LSST License Statement and 

# the GNU General Public License along with this program. If not, 

# see <https://www.lsstcorp.org/LegalNotices/>. 

# 

 

import os 

import unittest 

 

import lsst.geom 

from lsst.afw.image import ExposureF 

from lsst.afw.table import packMatches, SourceCatalog 

import lsst.utils.tests 

from lsst.daf.persistence import Butler 

from lsst.meas.algorithms import LoadIndexedReferenceObjectsTask 

from lsst.meas.astrom import AstrometryTask 

from lsst.log import Log 

 

 

class JoinMatchListWithCatalogTestCase(unittest.TestCase): 

 

def setUp(self): 

# Load sample input from disk 

testDir = os.path.dirname(__file__) 

 

self.srcSet = SourceCatalog.readFits(os.path.join(testDir, "v695833-e0-c000.xy.fits")) 

 

self.bbox = lsst.geom.Box2I(lsst.geom.Point2I(0, 0), lsst.geom.Extent2I(2048, 4612)) # approximate 

# create an exposure with the right metadata; the closest thing we have is 

# apparently v695833-e0-c000-a00.sci.fits, which is much too small 

smallExposure = ExposureF(os.path.join(testDir, "v695833-e0-c000-a00.sci.fits")) 

self.exposure = ExposureF(self.bbox) 

self.exposure.setWcs(smallExposure.getWcs()) 

self.exposure.setFilter(smallExposure.getFilter()) 

# copy the pixels we can, in case the user wants a debug display 

mi = self.exposure.getMaskedImage() 

mi.assign(smallExposure.getMaskedImage(), smallExposure.getBBox()) 

 

logLevel = Log.INFO 

refCatDir = os.path.join(testDir, "data", "sdssrefcat") 

butler = Butler(refCatDir) 

refObjLoader = LoadIndexedReferenceObjectsTask(butler=butler) 

astrometryConfig = AstrometryTask.ConfigClass() 

self.astrom = AstrometryTask(config=astrometryConfig, refObjLoader=refObjLoader) 

self.astrom.log.setLevel(logLevel) 

# Since our sourceSelector is a registry object we have to wait for it to be created 

# before setting default values. 

self.astrom.sourceSelector.config.minSnr = 0 

 

def tearDown(self): 

del self.srcSet 

del self.bbox 

del self.exposure 

del self.astrom 

 

def getAstrometrySolution(self): 

return self.astrom.solve(exposure=self.exposure, sourceCat=self.srcSet) 

 

def testJoin(self): 

res = self.getAstrometrySolution() 

 

matches = res.matches 

matchmeta = res.matchMeta 

 

normalized = packMatches(matches) 

normalized.table.setMetadata(matchmeta) 

 

matches2 = self.astrom.refObjLoader.joinMatchListWithCatalog(normalized, self.srcSet) 

 

self.assertEqual(len(matches2), len(matches)) 

for i in range(len(matches)): 

self.assertEqual(matches2[i].second.table, matches[i].second.table) 

self.assertEqual(matches2[i].second.getId(), matches[i].second.getId()) 

self.assertEqual(matches2[i].second, matches[i].second) # no deep copying, so we can compare ptrs 

self.assertEqual(matches2[i].first.getId(), matches[i].first.getId()) 

self.assertEqual(matches2[i].first.getRa().asDegrees(), matches[i].first.getRa().asDegrees()) 

self.assertEqual(matches2[i].first.getDec().asDegrees(), matches[i].first.getDec().asDegrees()) 

self.assertEqual(matches2[i].first.get("i_flux"), matches[i].first.get("i_flux")) 

 

def testJoinAllFluxes(self): 

"""Test that we can read all the fluxes from a reference catalog""" 

res = self.getAstrometrySolution() 

 

matches = res.matches 

matchmeta = res.matchMeta 

 

normalized = packMatches(matches) 

normalized.table.setMetadata(matchmeta) 

 

matches2 = self.astrom.refObjLoader.joinMatchListWithCatalog(normalized, self.srcSet) 

self.assertGreater(len(matches2), 0) 

ref = matches2[0][0] 

 

refSchema = ref.getSchema() 

for b in ("u", "g", "r", "i", "z"): 

self.assertIn("%s_flux" % (b,), refSchema) 

self.assertIn("%s_fluxErr" % (b,), refSchema) 

 

 

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

pass 

 

 

def setup_module(module): 

lsst.utils.tests.init() 

 

 

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

lsst.utils.tests.init() 

unittest.main()