13
13
from specutils import Spectrum1D , SpectrumList
14
14
15
15
16
- # The x1d reader tests --------------------------
16
+ # The c1d/ x1d reader tests --------------------------
17
17
18
- def create_spectrum_hdu (data_len , srctype = None , ver = 1 ):
18
+ def create_spectrum_hdu (data_len , srctype = None , ver = 1 , name = 'EXTRACT1D' ):
19
19
"""Mock a JWST x1d BinTableHDU"""
20
20
data = np .random .random ((data_len , 5 ))
21
21
table = Table (data = data , names = ['WAVELENGTH' , 'FLUX' , 'ERROR' , 'SURF_BRIGHT' ,
22
22
'SB_ERROR' ])
23
23
24
- hdu = fits .BinTableHDU (table , name = 'EXTRACT1D' )
24
+ hdu = fits .BinTableHDU (table , name = name )
25
25
hdu .header ['TUNIT1' ] = 'um'
26
26
hdu .header ['TUNIT2' ] = 'Jy'
27
27
hdu .header ['TUNIT3' ] = 'Jy'
@@ -48,27 +48,46 @@ def x1d_single():
48
48
49
49
50
50
@pytest .fixture (scope = "function" )
51
- def x1d_multi ():
52
- """Mock a JWST x1d multispec HDUList with 3 spectra"""
51
+ def spec_single (request ):
52
+ """Mock a JWST c1d/x1d HDUList with a single spectrum"""
53
+ name = request .param
54
+ hdulist = fits .HDUList ()
55
+ hdulist .append (fits .PrimaryHDU ())
56
+ hdulist ["PRIMARY" ].header ["TELESCOP" ] = ("JWST" , "comment" )
57
+ # Add a BinTableHDU that contains spectral data
58
+ hdulist .append (create_spectrum_hdu (100 , 'POINT' , ver = 1 , name = name ))
59
+ # Mock the ASDF extension
60
+ hdulist .append (fits .BinTableHDU (name = 'ASDF' ))
61
+
62
+ return hdulist
63
+
64
+
65
+ @pytest .fixture (scope = "function" )
66
+ def spec_multi (request ):
67
+ """Mock a JWST c1d/x1d multispec HDUList with 3 spectra"""
68
+ name = request .param
53
69
hdulist = fits .HDUList ()
54
70
hdulist .append (fits .PrimaryHDU ())
55
71
hdulist ["PRIMARY" ].header ["TELESCOP" ] = "JWST"
56
72
# Add a few BinTableHDUs that contain spectral data
57
- hdulist .append (create_spectrum_hdu (100 , 'POINT' , ver = 1 ))
58
- hdulist .append (create_spectrum_hdu (120 , 'EXTENDED' , ver = 2 ))
59
- hdulist .append (create_spectrum_hdu (110 , 'POINT' , ver = 3 ))
73
+ hdulist .append (create_spectrum_hdu (100 , 'POINT' , ver = 1 , name = name ))
74
+ hdulist .append (create_spectrum_hdu (120 , 'EXTENDED' , ver = 2 , name = name ))
75
+ hdulist .append (create_spectrum_hdu (110 , 'POINT' , ver = 3 , name = name ))
60
76
# Mock the ASDF extension
61
77
hdulist .append (fits .BinTableHDU (name = 'ASDF' ))
62
78
63
79
return hdulist
64
80
65
81
66
- def test_jwst_x1d_multi_reader (tmpdir , x1d_multi ):
67
- """Test SpectrumList.read for JWST x1d multi data"""
82
+ @pytest .mark .parametrize ('spec_multi, format' ,
83
+ [('EXTRACT1D' , 'JWST x1d multi' ),
84
+ ('COMBINE1D' , 'JWST c1d multi' )], indirect = ['spec_multi' ])
85
+ def test_jwst_1d_multi_reader (tmpdir , spec_multi , format ):
86
+ """Test SpectrumList.read for JWST c1d/x1d multi data"""
68
87
tmpfile = str (tmpdir .join ('jwst.fits' ))
69
- x1d_multi .writeto (tmpfile )
88
+ spec_multi .writeto (tmpfile )
70
89
71
- data = SpectrumList .read (tmpfile , format = 'JWST x1d multi' )
90
+ data = SpectrumList .read (tmpfile , format = format )
72
91
assert type (data ) is SpectrumList
73
92
assert len (data ) == 3
74
93
@@ -80,20 +99,39 @@ def test_jwst_x1d_multi_reader(tmpdir, x1d_multi):
80
99
assert data [2 ].shape == (110 ,)
81
100
82
101
83
- def test_jwst_x1d_single_reader (tmpdir , x1d_single ):
102
+ @pytest .mark .parametrize ('spec_single, format' ,
103
+ [('EXTRACT1D' , 'JWST x1d' ),
104
+ ('COMBINE1D' , 'JWST c1d' )], indirect = ['spec_single' ])
105
+ def test_jwst_1d_single_reader (tmpdir , spec_single , format ):
84
106
"""Test Spectrum1D.read for JWST x1d data"""
85
107
tmpfile = str (tmpdir .join ('jwst.fits' ))
108
+ spec_single .writeto (tmpfile )
109
+
110
+ data = Spectrum1D .read (tmpfile , format = format )
111
+ assert type (data ) is Spectrum1D
112
+ assert data .shape == (100 ,)
113
+
114
+
115
+ @pytest .mark .parametrize ("srctype" , [None , "UNKNOWN" ])
116
+ def test_jwst_srctpye_defaults (tmpdir , x1d_single , srctype ):
117
+ """ Test """
118
+ tmpfile = str (tmpdir .join ('jwst.fits' ))
119
+
120
+ # Add a spectrum with missing or UNKNOWN SRCTYPE (mutate the fixture)
121
+ x1d_single ['EXTRACT1D' ].header ['SRCTYPE' ] == srctype
86
122
x1d_single .writeto (tmpfile )
87
123
88
124
data = Spectrum1D .read (tmpfile , format = 'JWST x1d' )
89
125
assert type (data ) is Spectrum1D
90
126
assert data .shape == (100 ,)
127
+ assert x1d_single ['EXTRACT1D' ].header ['SRCTYPE' ] == "POINT"
91
128
92
129
93
- def test_jwst_x1d_single_reader_no_format (tmpdir , x1d_single ):
94
- """Test Spectrum1D.read for JWST x1d data without format arg"""
130
+ @pytest .mark .parametrize ('spec_single' , ['EXTRACT1D' , 'COMBINE1D' ], indirect = ['spec_single' ])
131
+ def test_jwst_1d_single_reader_no_format (tmpdir , spec_single ):
132
+ """Test Spectrum1D.read for JWST c1d/x1d data without format arg"""
95
133
tmpfile = str (tmpdir .join ('jwst.fits' ))
96
- x1d_single .writeto (tmpfile )
134
+ spec_single .writeto (tmpfile )
97
135
98
136
data = Spectrum1D .read (tmpfile )
99
137
assert type (data ) is Spectrum1D
@@ -102,10 +140,11 @@ def test_jwst_x1d_single_reader_no_format(tmpdir, x1d_single):
102
140
assert data .spectral_axis .unit == u .um
103
141
104
142
105
- def test_jwst_x1d_multi_reader_no_format (tmpdir , x1d_multi ):
106
- """Test Spectrum1D.read for JWST x1d data without format arg"""
143
+ @pytest .mark .parametrize ('spec_multi' , ['EXTRACT1D' , 'COMBINE1D' ], indirect = ['spec_multi' ])
144
+ def test_jwst_1d_multi_reader_no_format (tmpdir , spec_multi ):
145
+ """Test Spectrum1D.read for JWST c1d/x1d data without format arg"""
107
146
tmpfile = str (tmpdir .join ('jwst.fits' ))
108
- x1d_multi .writeto (tmpfile )
147
+ spec_multi .writeto (tmpfile )
109
148
110
149
data = SpectrumList .read (tmpfile )
111
150
assert type (data ) is SpectrumList
@@ -115,39 +154,42 @@ def test_jwst_x1d_multi_reader_no_format(tmpdir, x1d_multi):
115
154
assert isinstance (item , Spectrum1D )
116
155
117
156
118
- def test_jwst_x1d_multi_reader_check_units (tmpdir , x1d_multi ):
119
- """Test units for Spectrum1D.read for JWST x1d data"""
157
+ @pytest .mark .parametrize ('spec_multi' , ['EXTRACT1D' , 'COMBINE1D' ], indirect = ['spec_multi' ])
158
+ def test_jwst_1d_multi_reader_check_units (tmpdir , spec_multi ):
159
+ """Test units for Spectrum1D.read for JWST c1d/x1d data"""
120
160
tmpfile = str (tmpdir .join ('jwst.fits' ))
121
- x1d_multi .writeto (tmpfile )
161
+ spec_multi .writeto (tmpfile )
122
162
123
163
data = SpectrumList .read (tmpfile )
124
164
assert data [0 ].unit == u .Jy
125
165
assert data [1 ].unit == u .MJy / u .sr
126
166
assert data [2 ].unit == u .Jy
127
167
128
168
129
- def test_jwst_x1d_reader_meta (tmpdir , x1d_single ):
130
- """Test that the Primary and EXTRACT1D extension headers are merged in meta"""
169
+ @pytest .mark .parametrize ('spec_single' , ['EXTRACT1D' , 'COMBINE1D' ], indirect = ['spec_single' ])
170
+ def test_jwst_1d_reader_meta (tmpdir , spec_single ):
171
+ """Test that the Primary and COMBINE1D/EXTRACT1D extension headers are merged in meta"""
131
172
tmpfile = str (tmpdir .join ('jwst.fits' ))
132
- x1d_single .writeto (tmpfile )
173
+ spec_single .writeto (tmpfile )
133
174
134
175
data = Spectrum1D .read (tmpfile )
135
176
assert ('TELESCOP' , 'JWST' ) in data .meta ['header' ].items ()
136
177
assert ('SRCTYPE' , 'POINT' ) in data .meta ['header' ].items ()
137
178
138
179
139
- def test_jwst_x1d_single_reader_fail_on_multi (tmpdir , x1d_multi ):
140
- """Make sure Spectrum1D.read on JWST x1d with many spectra errors out"""
180
+ @pytest .mark .parametrize ('spec_multi' , ['EXTRACT1D' , 'COMBINE1D' ], indirect = ['spec_multi' ])
181
+ def test_jwst_1d_single_reader_fail_on_multi (tmpdir , spec_multi ):
182
+ """Make sure Spectrum1D.read on JWST c1d/x1d with many spectra errors out"""
141
183
tmpfile = str (tmpdir .join ('jwst.fits' ))
142
- x1d_multi .writeto (tmpfile )
184
+ spec_multi .writeto (tmpfile )
143
185
144
186
with pytest .raises (IORegistryError ):
145
187
Spectrum1D .read (tmpfile )
146
188
147
189
148
- @pytest .mark .parametrize ("srctype" , [None , "UNKNOWN " ])
190
+ @pytest .mark .parametrize ("srctype" , ["BADVAL " ])
149
191
def test_jwst_reader_fail (tmpdir , x1d_single , srctype ):
150
- """Check that the reader fails when SRCTYPE is not set or is UNKNOWN """
192
+ """Check that the reader fails when SRCTYPE is a BADVAL """
151
193
tmpfile = str (tmpdir .join ('jwst.fits' ))
152
194
hdulist = x1d_single
153
195
# Add a spectrum with bad SRCTYPE (mutate the fixture)
0 commit comments