Coverage for tests/test_translator.py: 21%

82 statements  

« prev     ^ index     » next       coverage.py v7.1.0, created at 2023-02-05 18:52 -0800

1# This file is part of obs_lsst. 

2# 

3# Developed for the LSST Data Management System. 

4# This product includes software developed by the LSST Project 

5# (http://www.lsst.org). 

6# See the COPYRIGHT file at the top-level directory of this distribution 

7# for details of code ownership. 

8# 

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

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

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

12# (at your option) any later version. 

13# 

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

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

16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

17# GNU General Public License for more details. 

18# 

19# You should have received a copy of the GNU General Public License 

20# along with this program. If not, see <http://www.gnu.org/licenses/>. 

21 

22import os.path 

23import unittest 

24import astropy.units as u 

25import astropy.units.cds as cds 

26import lsst.obs.lsst.translators # noqa: F401 -- register the translators 

27 

28from astro_metadata_translator.tests import MetadataAssertHelper 

29 

30TESTDIR = os.path.abspath(os.path.dirname(__file__)) 

31 

32 

33class LsstMetadataTranslatorTestCase(unittest.TestCase, MetadataAssertHelper): 

34 """Each test reads in raw headers from YAML files, constructs an 

35 `ObservationInfo`, and compares the properties with the expected values 

36 defined in the corresponding `dict`.""" 

37 

38 datadir = os.path.join(TESTDIR, "headers") 

39 

40 def test_lsstCam_translator(self): 

41 test_data = (("lsstCam-MC_C_20190319_000001_R10_S02.yaml", 

42 dict(telescope="Simonyi Survey Telescope", 

43 instrument="LSSTCam", 

44 boresight_rotation_coord="unknown", 

45 dark_time=0.0*u.s, 

46 detector_exposure_id=3019031900001029, 

47 detector_group="R10", 

48 detector_name="S02", 

49 detector_num=29, 

50 detector_serial="ITL-3800C-041", 

51 exposure_id=3019031900001, 

52 exposure_group="3019031900001", 

53 exposure_time=0.0*u.s, 

54 object="UNKNOWN", 

55 observation_counter=1, 

56 observation_id="MC_C_20190319_000001", 

57 observation_type="bias", 

58 observation_reason="bias", 

59 observing_day=20190319, 

60 physical_filter="unknown", 

61 pressure=None, 

62 relative_humidity=None, 

63 science_program="unknown", 

64 temperature=None, 

65 visit_id=3019031900001)), 

66 ("lsstCam-MC_C_20190319_000001_R22_S21.yaml", 

67 dict(telescope="Simonyi Survey Telescope", 

68 instrument="LSSTCam", 

69 boresight_rotation_coord="unknown", 

70 dark_time=0.0*u.s, 

71 detector_exposure_id=3019031900001097, 

72 detector_group="R22", 

73 detector_name="S21", 

74 detector_num=97, 

75 detector_serial="ITL-3800C-139", 

76 exposure_id=3019031900001, 

77 exposure_group="3019031900001", 

78 exposure_time=0.0*u.s, 

79 object="UNKNOWN", 

80 observation_counter=1, 

81 observation_id="MC_C_20190319_000001", 

82 observation_type="bias", 

83 observation_reason="bias", 

84 observing_day=20190319, 

85 physical_filter="unknown", 

86 pressure=None, 

87 relative_humidity=None, 

88 science_program="unknown", 

89 temperature=None, 

90 visit_id=3019031900001)), 

91 ("lsstCam-MC_C_20190322_000002_R10_S22.yaml", 

92 dict(telescope="Simonyi Survey Telescope", 

93 instrument="LSSTCam", 

94 boresight_rotation_coord="unknown", 

95 dark_time=1.0*u.s, 

96 detector_exposure_id=3019032200002035, 

97 detector_group="R10", 

98 detector_name="S22", 

99 detector_num=35, 

100 detector_serial="ITL-3800C-103", 

101 exposure_id=3019032200002, 

102 exposure_group="3019032200002", 

103 exposure_time=1.0*u.s, 

104 object="UNKNOWN", 

105 observation_counter=2, 

106 observation_id="MC_C_20190322_000002", 

107 observation_type="flat", 

108 observation_reason="flat", 

109 observing_day=20190322, 

110 physical_filter="SDSSi~ND_OD0.5", 

111 pressure=None, 

112 relative_humidity=None, 

113 science_program="6489D", 

114 temperature=None, 

115 visit_id=3019032200002)), 

116 ("lsstCam-MC_C_20190406_000643_R10_S00.yaml", 

117 dict(telescope="Simonyi Survey Telescope", 

118 instrument="LSSTCam", 

119 boresight_rotation_coord="unknown", 

120 dark_time=1007.422*u.s, 

121 detector_exposure_id=3019040600643027, 

122 detector_group="R10", 

123 detector_name="S00", 

124 detector_num=27, 

125 detector_serial="ITL-3800C-145", 

126 exposure_id=3019040600643, 

127 exposure_group="3019040600643", 

128 exposure_time=999.99*u.s, 

129 object="UNKNOWN", 

130 observation_counter=643, 

131 observation_id="MC_C_20190406_000643", 

132 observation_type="flat", 

133 observation_reason="lambda", 

134 observing_day=20190406, 

135 physical_filter="950nm", 

136 pressure=None, 

137 relative_humidity=None, 

138 science_program="6549D", 

139 temperature=None, 

140 visit_id=3019040600643)), 

141 ) 

142 for filename, expected in test_data: 

143 with self.subTest(f"Testing {filename}"): 

144 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected) 

145 

146 def test_phoSimLsstCam_translator(self): 

147 test_data = (("lsstCam-MC_H_20000217_000032_R22_S00.yaml", 

148 dict(telescope="Simonyi Survey Telescope", 

149 instrument="LSSTCam", 

150 boresight_rotation_coord="sky", 

151 dark_time=15.0*u.s, 

152 detector_exposure_id=4000021700032090, 

153 detector_group="R22", 

154 detector_name="S00", 

155 detector_num=90, 

156 detector_serial="E2V-CCD250-369", 

157 detector_unique_name="R22_S00", 

158 exposure_group="4000021700032", 

159 exposure_id=4000021700032, 

160 exposure_time=15.0*u.s, 

161 object="UNKNOWN", 

162 observation_counter=32, 

163 observation_id="MC_H_20000217_000032", 

164 observation_reason="phosim", 

165 observation_type="science", 

166 observing_day=20000217, 

167 physical_filter="g", 

168 pressure=None, 

169 relative_humidity=None, 

170 science_program="9006001", 

171 temperature=None, 

172 visit_id=4000021700032)), 

173 ) 

174 for filename, expected in test_data: 

175 with self.subTest(f"Testing {filename}"): 

176 self.assertObservationInfoFromYaml(filename, dir=self.datadir, 

177 check_wcs=False, **expected) 

178 

179 def test_comCam_translator(self): 

180 test_data = (("comCam-CC_C_20190530_000001_R22_S00.yaml", 

181 dict(telescope="Simonyi Survey Telescope", 

182 instrument="LSSTComCam", 

183 boresight_rotation_coord="unknown", 

184 dark_time=0.398*u.s, 

185 detector_exposure_id=3019053000001000, 

186 detector_group="R22", 

187 detector_name="S00", 

188 detector_num=0, 

189 detector_serial="ITL-3800C-229", 

190 exposure_id=3019053000001, 

191 exposure_group="3019053000001", 

192 exposure_time=0.0*u.s, 

193 object="UNKNOWN", 

194 observation_counter=1, 

195 observation_id="CC_C_20190530_000001", 

196 observation_type="bias", 

197 observation_reason="bias", 

198 observing_day=20190530, 

199 physical_filter="unknown", 

200 pressure=None, 

201 relative_humidity=None, 

202 science_program="unknown", 

203 temperature=None, 

204 visit_id=3019053000001)), 

205 ("comCam-CC_C_20190526_000223_R22_S01.yaml", 

206 dict(telescope="Simonyi Survey Telescope", 

207 instrument="LSSTComCam", 

208 boresight_rotation_coord="unknown", 

209 dark_time=0.034*u.s, 

210 detector_exposure_id=3019052600223001, 

211 detector_group="R22", 

212 detector_name="S01", 

213 detector_num=1, 

214 detector_serial="ITL-3800C-251", 

215 exposure_id=3019052600223, 

216 exposure_group="3019052600223", 

217 exposure_time=0.0*u.s, 

218 object="UNKNOWN", 

219 observation_counter=223, 

220 observation_id="CC_C_20190526_000223", 

221 observation_type="bias", 

222 observation_reason="dark", 

223 observing_day=20190526, 

224 physical_filter="unknown", 

225 pressure=None, 

226 relative_humidity=None, 

227 science_program="unknown", 

228 temperature=None, 

229 visit_id=3019052600223)), 

230 ) 

231 for filename, expected in test_data: 

232 with self.subTest(f"Testing {filename}"): 

233 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected) 

234 

235 def test_phoSimComCam_translator(self): 

236 test_data = (("comCam-CC_H_20000217_006001_R22_S00.yaml", 

237 dict(telescope="Simonyi Survey Telescope", 

238 instrument="LSSTComCam", 

239 boresight_rotation_coord="sky", 

240 dark_time=1.0*u.s, 

241 detector_exposure_id=4000021706001000, 

242 detector_group="R22", 

243 detector_name="S00", 

244 detector_num=0, 

245 detector_serial="ITL-3800C-229", 

246 exposure_id=4000021706001, 

247 exposure_group="4000021706001", 

248 exposure_time=1.0*u.s, 

249 object="UNKNOWN", 

250 observation_counter=6001, 

251 observation_id="CC_H_20000217_006001", 

252 observation_type="science", 

253 observation_reason="test", 

254 observing_day=20000217, 

255 physical_filter="g_01", 

256 pressure=None, 

257 relative_humidity=None, 

258 science_program="9006001", 

259 temperature=None, 

260 visit_id=4000021706001)), 

261 ) 

262 for filename, expected in test_data: 

263 with self.subTest(f"Testing {filename}"): 

264 self.assertObservationInfoFromYaml(filename, dir=self.datadir, 

265 check_wcs=False, **expected) 

266 

267 def test_phosim_translator(self): 

268 test_data = (("phosim-lsst_a_204595_f3_R11_S02_E000.yaml", 

269 dict(telescope="Simonyi Survey Telescope", 

270 instrument="LSSTCam-PhoSim", 

271 boresight_rotation_coord="sky", 

272 dark_time=30.0*u.s, 

273 detector_exposure_id=204595038, 

274 detector_group="R11", 

275 detector_name="S02", 

276 detector_num=38, 

277 detector_serial="R11_S02", 

278 exposure_id=204595, 

279 exposure_group="204595", 

280 exposure_time=30.0*u.s, 

281 object="UNKNOWN", 

282 observation_counter=0, 

283 observation_id="204595", 

284 observation_type="science", 

285 observation_reason="phosim", 

286 observing_day=20221004, 

287 physical_filter="i", 

288 pressure=520.0*cds.mmHg, 

289 relative_humidity=40.0, 

290 science_program="204595", 

291 temperature=20.0*u.deg_C, 

292 visit_id=204595, 

293 wcs_params=dict(max_sep=3000.))), # 2022 

294 ) 

295 for filename, expected in test_data: 

296 with self.subTest(f"Testing {filename}"): 

297 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected) 

298 

299 def test_latiss_translator(self): 

300 test_data = (("latiss-2018-09-20-05700065-det000.yaml", 

301 dict(telescope="Rubin Auxiliary Telescope", 

302 instrument="LATISS", 

303 boresight_rotation_coord="unknown", 

304 dark_time=27.0*u.s, 

305 detector_exposure_id=3018092000065, 

306 detector_group="RXX", 

307 detector_name="S00", 

308 detector_num=0, 

309 detector_serial="ITL-3800C-098", 

310 exposure_id=3018092000065, 

311 exposure_group="3018092000065", 

312 exposure_time=27.0*u.s, 

313 object="UNKNOWN", 

314 observation_counter=65, 

315 observation_id="AT_C_20180920_000065", 

316 observation_type="unknown", 

317 observation_reason="unknown", 

318 observing_day=20180920, 

319 physical_filter="unknown~unknown", 

320 pressure=None, 

321 relative_humidity=None, 

322 science_program="unknown", 

323 temperature=None, 

324 visit_id=3018092000065, 

325 )), 

326 ("latiss-AT_O_20190306_000014.yaml", 

327 dict(telescope="Rubin Auxiliary Telescope", 

328 instrument="LATISS", 

329 boresight_rotation_coord="unknown", 

330 dark_time=1.06*u.s, 

331 detector_exposure_id=2019030600014, 

332 detector_group="RXX", 

333 detector_name="S00", 

334 detector_num=0, 

335 detector_serial="ITL-3800C-098", 

336 exposure_id=2019030600014, 

337 exposure_group="2019030600014", 

338 exposure_time=1.06*u.s, 

339 object="UNKNOWN", 

340 observation_counter=14, 

341 observation_id="AT_O_20190306_000014", 

342 observation_type="unknown", 

343 observation_reason="unknown", 

344 observing_day=20190306, 

345 physical_filter="unknown~unknown", 

346 pressure=None, 

347 relative_humidity=None, 

348 science_program="unknown", 

349 temperature=None, 

350 visit_id=2019030600014, 

351 )), 

352 ("latiss-AT_O_20190329_000022-ats-wfs_ccd.yaml", 

353 dict(telescope="Rubin Auxiliary Telescope", 

354 instrument="LATISS", 

355 boresight_rotation_coord="unknown", 

356 dark_time=0.0*u.s, 

357 detector_exposure_id=2019032900022, 

358 detector_group="RXX", 

359 detector_name="S00", 

360 detector_num=0, 

361 detector_serial="ITL-3800C-098", 

362 exposure_id=2019032900022, 

363 exposure_group="2019032900022", 

364 exposure_time=0.0*u.s, 

365 object="UNKNOWN", 

366 observation_counter=22, 

367 observation_id="AT_O_20190329_000022", 

368 observation_type="bias", 

369 observation_reason="unknown", 

370 observing_day=20190329, 

371 physical_filter="unknown~unknown", 

372 pressure=None, 

373 relative_humidity=None, 

374 science_program="unknown", 

375 temperature=None, 

376 visit_id=2019032900022, 

377 )), 

378 ("latiss-future.yaml", 

379 dict(telescope="Rubin Auxiliary Telescope", 

380 instrument="LATISS", 

381 boresight_rotation_coord="unknown", 

382 dark_time=0.0*u.s, 

383 detector_exposure_id=2020032900022, 

384 detector_group="RXX", 

385 detector_name="S00", 

386 detector_num=0, 

387 detector_serial="ITL-3800C-068", 

388 exposure_id=2020032900022, 

389 exposure_group="2020-03-29T16:55:00.012#24", 

390 exposure_time=0.0*u.s, 

391 object="UNKNOWN", 

392 observation_counter=22, 

393 observation_id="AT_X_20200329_000022", 

394 observation_type="bias", 

395 observation_reason="unknown", 

396 observing_day=20200329, 

397 physical_filter="unknown~unknown", 

398 pressure=None, 

399 relative_humidity=None, 

400 science_program="unknown", 

401 temperature=None, 

402 visit_id=1654305000120024, 

403 )), 

404 ("latiss-AT_O_20190915_000037.yaml", 

405 dict(telescope="Rubin Auxiliary Telescope", 

406 instrument="LATISS", 

407 boresight_rotation_coord="unknown", 

408 dark_time=0.0*u.s, 

409 detector_exposure_id=2019091500037, 

410 detector_group="RXX", 

411 detector_name="S00", 

412 detector_num=0, 

413 detector_serial="ITL-3800C-068", 

414 exposure_id=2019091500037, 

415 exposure_group="bias_0027_0100", 

416 exposure_time=0.0*u.s, 

417 object="UNKNOWN", 

418 observation_counter=37, 

419 observation_id="AT_O_20190915_000037", 

420 observation_type="bias", 

421 observation_reason="unknown", 

422 observing_day=20190915, 

423 physical_filter="unknown~unknown", 

424 pressure=None, 

425 relative_humidity=None, 

426 science_program="unknown", 

427 temperature=None, 

428 visit_id=3575576933793566714, 

429 )), 

430 ("latiss-AT_O_20191031_000004.yaml", 

431 dict(telescope="Rubin Auxiliary Telescope", 

432 instrument="LATISS", 

433 boresight_rotation_coord="unknown", 

434 dark_time=3.0*u.s, 

435 detector_exposure_id=2019103100004, 

436 detector_group="RXX", 

437 detector_name="S00", 

438 detector_num=0, 

439 detector_serial="ITL-3800C-068", 

440 exposure_id=2019103100004, 

441 exposure_group="TEST01", 

442 exposure_time=3.0*u.s, 

443 object="UNKNOWN", 

444 observation_counter=4, 

445 observation_id="AT_O_20191031_000004", 

446 observation_type="engtest", 

447 observation_reason="unknown", 

448 observing_day=20191031, 

449 physical_filter="unknown~unknown", 

450 pressure=None, 

451 relative_humidity=None, 

452 science_program="unknown", 

453 temperature=None, 

454 visit_id=1123819875881954006, 

455 )), 

456 ("latiss-AT_O_20191104_000003.yaml", 

457 dict(telescope="Rubin Auxiliary Telescope", 

458 instrument="LATISS", 

459 boresight_rotation_coord="unknown", 

460 dark_time=3.0*u.s, 

461 detector_exposure_id=2019110400003, 

462 detector_group="RXX", 

463 detector_name="S00", 

464 detector_num=0, 

465 detector_serial="ITL-3800C-068", 

466 exposure_id=2019110400003, 

467 exposure_group="TEST01", 

468 exposure_time=3.0*u.s, 

469 object="UNKNOWN", 

470 observation_counter=3, 

471 observation_id="AT_O_20191104_000003", 

472 observation_type="engtest", 

473 observation_reason="unknown", 

474 observing_day=20191104, 

475 physical_filter="unknown~unknown", 

476 pressure=None, 

477 relative_humidity=None, 

478 science_program="unknown", 

479 temperature=None, 

480 visit_id=1123819875881954006, 

481 )), 

482 ("latiss-AT_O_20191113_000061.yaml", 

483 dict(telescope="Rubin Auxiliary Telescope", 

484 instrument="LATISS", 

485 boresight_rotation_coord="unknown", 

486 dark_time=0.5*u.s, 

487 detector_exposure_id=2019111300061, 

488 detector_group="RXX", 

489 detector_name="S00", 

490 detector_num=0, 

491 detector_serial="ITL-3800C-068", 

492 exposure_id=2019111300061, 

493 exposure_group="wave,Focus,455,32.0PH=5um", 

494 exposure_time=0.5*u.s, 

495 object="UNKNOWN", 

496 observation_counter=61, 

497 observation_id="AT_O_20191113_000061", 

498 observation_type="engtest", 

499 observation_reason="unknown", 

500 observing_day=20191113, 

501 physical_filter="empty~ronchi90lpmm", 

502 pressure=None, 

503 relative_humidity=None, 

504 science_program="unknown", 

505 temperature=None, 

506 visit_id=1892608703001301325, 

507 )), 

508 ("latiss-AT_O_20191118_000011.yaml", 

509 dict(telescope="Rubin Auxiliary Telescope", 

510 instrument="LATISS", 

511 boresight_rotation_coord="unknown", 

512 dark_time=15.0*u.s, 

513 detector_exposure_id=2019111800011, 

514 detector_group="RXX", 

515 detector_name="S00", 

516 detector_num=0, 

517 detector_serial="ITL-3800C-068", 

518 exposure_id=2019111800011, 

519 exposure_group="dark_0002_0005", 

520 exposure_time=15.0*u.s, 

521 object="UNKNOWN", 

522 observation_counter=11, 

523 observation_id="AT_O_20191118_000011", 

524 observation_type="dark", 

525 observation_reason="unknown", 

526 observing_day=20191118, 

527 physical_filter="diffuser~ronchi170lpmm", 

528 pressure=None, 

529 relative_humidity=None, 

530 science_program="unknown", 

531 temperature=None, 

532 visit_id=6861884254113212214, 

533 )), 

534 ("latiss-AT_O_20200121_000045.yaml", 

535 dict(telescope="Rubin Auxiliary Telescope", 

536 instrument="LATISS", 

537 boresight_rotation_coord="sky", 

538 dark_time=100.0*u.s, 

539 detector_exposure_id=2020012100045, 

540 detector_group="RXX", 

541 detector_name="S00", 

542 detector_num=0, 

543 detector_serial="ITL-3800C-068", 

544 exposure_id=2020012100045, 

545 exposure_group="test", 

546 exposure_time=100.0*u.s, 

547 object="UNKNOWN", 

548 observation_counter=45, 

549 observation_id="AT_O_20200121_000045", 

550 observation_type="engtest", 

551 observation_reason="unknown", 

552 observing_day=20200121, 

553 physical_filter="blank_bk7_wg05~empty", 

554 pressure=None, 

555 relative_humidity=None, 

556 science_program="unknown", 

557 temperature=None, 

558 visit_id=4702443654717948604, 

559 )), 

560 ("latiss-AT_O_20200128_000379.yaml", 

561 dict(telescope="Rubin Auxiliary Telescope", 

562 instrument="LATISS", 

563 boresight_rotation_coord="sky", 

564 dark_time=5.0*u.s, 

565 detector_exposure_id=2020012800379, 

566 detector_group="RXX", 

567 detector_name="S00", 

568 detector_num=0, 

569 detector_serial="ITL-3800C-068", 

570 exposure_id=2020012800379, 

571 exposure_group="2020-01-29T07:25:52.166", 

572 exposure_time=5.0*u.s, 

573 object="HD107696", 

574 observation_counter=379, 

575 observation_id="AT_O_20200128_000379", 

576 observation_type="science", 

577 observation_reason="science", 

578 observing_day=20200128, 

579 physical_filter="KPNO_406_828nm~empty", 

580 pressure=None, 

581 relative_humidity=None, 

582 science_program="unknown", 

583 temperature=None, 

584 visit_id=1602123521660000, 

585 # We have some timing discrepancies in the headers 

586 # that make it hard to match the demand RA/DEC to 

587 # the recorded AZ/EL/TIME. 

588 wcs_params=dict(max_sep=7.), 

589 )), 

590 ) 

591 self.assertObservationInfoFromYaml("latiss-future.yaml", dir=self.datadir) 

592 for filename, expected in test_data: 

593 with self.subTest(f"Testing {filename}"): 

594 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected) 

595 

596 # This translation should fail 

597 with self.assertRaises(KeyError): 

598 self.assertObservationInfoFromYaml("latiss-future-bad.yaml", dir=self.datadir) 

599 

600 def test_imsim_translator(self): 

601 test_data = (("imsim-bias-lsst_a_3010002_R11_S00.yaml", 

602 dict(telescope="Simonyi Survey Telescope", 

603 instrument="LSSTCam-imSim", 

604 boresight_rotation_coord="sky", 

605 dark_time=0.0*u.s, 

606 detector_exposure_id=3010002036, 

607 detector_group="R11", 

608 detector_name="S00", 

609 detector_num=36, 

610 detector_serial="LCA-11021_RTM-000", 

611 exposure_id=3010002, 

612 exposure_group="3010002", 

613 exposure_time=0.0*u.s, 

614 object="UNKNOWN", 

615 observation_counter=0, 

616 observation_id="3010002", 

617 observation_type="science", # The header is wrong 

618 observation_reason="imsim", 

619 observing_day=20211231, 

620 physical_filter="i", 

621 pressure=None, 

622 relative_humidity=40.0, 

623 science_program="42", 

624 temperature=None, 

625 visit_id=3010002, 

626 wcs_params=dict(max_sep=3000.), # 2022 

627 )), 

628 ("imsim-lsst_a_204595_R11_S02_i.yaml", 

629 dict(telescope="Simonyi Survey Telescope", 

630 instrument="LSSTCam-imSim", 

631 boresight_rotation_coord="sky", 

632 dark_time=30.0*u.s, 

633 detector_exposure_id=204595038, 

634 detector_group="R11", 

635 detector_name="S02", 

636 detector_num=38, 

637 detector_serial="LCA-11021_RTM-000", 

638 exposure_id=204595, 

639 exposure_group="204595", 

640 exposure_time=30.0*u.s, 

641 object="UNKNOWN", 

642 observation_counter=0, 

643 observation_id="204595", 

644 observation_type="science", # The header is wrong 

645 observation_reason="imsim", 

646 observing_day=20221004, 

647 physical_filter="i_sim_1.4", 

648 pressure=None, 

649 relative_humidity=40.0, 

650 science_program="204595", 

651 temperature=None, 

652 visit_id=204595, 

653 wcs_params=dict(max_sep=3000.), # 2022 

654 )), 

655 ("imsim-flats-lsst_a_5000007_R11_S20_i.yaml", 

656 dict(telescope="Simonyi Survey Telescope", 

657 instrument="LSSTCam-imSim", 

658 boresight_rotation_coord="sky", 

659 dark_time=30.0*u.s, 

660 detector_exposure_id=5000007042, 

661 detector_group="R11", 

662 detector_name="S20", 

663 detector_num=42, 

664 detector_serial="LCA-11021_RTM-000", 

665 exposure_id=5000007, 

666 exposure_group="5000007", 

667 exposure_time=30.0*u.s, 

668 object="UNKNOWN", 

669 observation_counter=0, 

670 observation_id="5000007", 

671 observation_type="flat", 

672 observation_reason="imsim", 

673 observing_day=20220805, 

674 physical_filter="i", 

675 pressure=None, 

676 relative_humidity=40.0, 

677 science_program="5000007", 

678 temperature=None, 

679 visit_id=5000007, 

680 wcs_params=dict(max_sep=3000.), # 2022 

681 )), 

682 ("imsim-dark-lsst_a_4010003_R11_S11.yaml", 

683 dict(telescope="Simonyi Survey Telescope", 

684 instrument="LSSTCam-imSim", 

685 boresight_rotation_coord="sky", 

686 dark_time=500.0*u.s, 

687 detector_exposure_id=4010003040, 

688 detector_group="R11", 

689 detector_name="S11", 

690 detector_num=40, 

691 detector_serial="LCA-11021_RTM-000", 

692 exposure_id=4010003, 

693 exposure_group="4010003", 

694 exposure_time=500.0*u.s, 

695 object="UNKNOWN", 

696 observation_counter=0, 

697 observation_id="4010003", 

698 observation_type="science", # The header is wrong 

699 observation_reason="imsim", 

700 observing_day=20211231, 

701 physical_filter="i", 

702 pressure=None, 

703 relative_humidity=40.0, 

704 science_program="42", 

705 temperature=None, 

706 visit_id=4010003, 

707 wcs_params=dict(max_sep=3000.), # 2022 

708 )), 

709 ) 

710 for filename, expected in test_data: 

711 with self.subTest(f"Testing {filename}"): 

712 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected) 

713 

714 def test_ts3_translator(self): 

715 test_data = (("ts3-E2V-CCD250-411_lambda_flat_1000_025_20181115075559.yaml", 

716 dict(telescope=None, 

717 instrument="LSST-TS3", 

718 dark_time=44.631*u.s, 

719 detector_exposure_id=201811151255111433, 

720 detector_group="R433", 

721 detector_name="S00", 

722 detector_num=433, 

723 detector_serial="E2V-CCD250-411", 

724 exposure_id=201811151255111, 

725 exposure_group="201811151255111", 

726 exposure_time=44.631*u.s, 

727 observation_counter=25, 

728 observation_id="E2V-CCD250-411_lambda_flat_1000_025_20181115075559", 

729 observation_type="flat", 

730 observation_reason="lambda", 

731 observing_day=20181115, 

732 physical_filter="550CutOn", 

733 science_program="2018-11-15", 

734 visit_id=201811151255111)), 

735 ("ts3-ITL-3800C-098_lambda_flat_1000_067_20160722020740.yaml", 

736 dict(telescope=None, 

737 instrument="LSST-TS3", 

738 dark_time=30.611*u.s, 

739 detector_exposure_id=201607220607067071, 

740 detector_group="R071", 

741 detector_name="S00", 

742 detector_num=71, 

743 detector_serial="ITL-3800C-098", 

744 exposure_id=201607220607067, 

745 exposure_group="201607220607067", 

746 exposure_time=30.611*u.s, 

747 observation_counter=67, 

748 observation_id="ITL-3800C-098_lambda_flat_1000_067_20160722020740", 

749 observation_type="flat", 

750 observation_reason="lambda", 

751 observing_day=20160721, 

752 physical_filter="550CutOn", 

753 science_program="2016-07-22", 

754 visit_id=201607220607067)), 

755 ) 

756 for filename, expected in test_data: 

757 with self.subTest(f"Testing {filename}"): 

758 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected) 

759 

760 def test_ts8_translator(self): 

761 test_data = (("ts8-E2V-CCD250-179_lambda_bias_024_6006D_20180724104156.yaml", 

762 dict(telescope=None, 

763 instrument="LSST-TS8", 

764 dark_time=0.0*u.s, 

765 detector_exposure_id=201807241041568067, 

766 detector_group="RTM-010", 

767 detector_name="S11", 

768 detector_num=67, 

769 detector_serial="E2V-CCD250-179", 

770 exposure_id=201807241041568, 

771 exposure_group="201807241041568", 

772 exposure_time=0.0*u.s, 

773 observation_counter=24, 

774 observation_id="E2V-CCD250-179_lambda_bias_024_6006D_20180724104156", 

775 observation_type="bias", 

776 observation_reason="lambda", 

777 observing_day=20180724, 

778 physical_filter="y", 

779 science_program="6006D", 

780 visit_id=201807241041568)), 

781 ("ts8-E2V-CCD250-200-Dev_lambda_flat_0700_6006D_20180724102845.yaml", 

782 dict(telescope=None, 

783 instrument="LSST-TS8", 

784 dark_time=21.913*u.s, 

785 detector_exposure_id=201807241028453065, 

786 detector_group="RTM-010", 

787 detector_name="S02", 

788 detector_num=65, 

789 detector_serial="E2V-CCD250-200", 

790 exposure_id=201807241028453, 

791 exposure_group="201807241028453", 

792 exposure_time=21.913*u.s, 

793 observation_counter=17, 

794 observation_id="E2V-CCD250-200-Dev_lambda_flat_0700_6006D_20180724102845", 

795 observation_type="flat", 

796 observation_reason="lambda", 

797 observing_day=20180724, 

798 physical_filter="z", 

799 science_program="6006D", 

800 visit_id=201807241028453)), 

801 ("ts8-E2V-CCD250-220_fe55_fe55_094_6288_20171215114006.yaml", 

802 dict(telescope=None, 

803 instrument="LSST-TS8", 

804 dark_time=300.0*u.s, 

805 detector_exposure_id=201712151140062027, 

806 detector_group="RTM-005", 

807 detector_name="S00", 

808 detector_num=27, 

809 detector_serial="E2V-CCD250-220", 

810 exposure_id=201712151140062, 

811 exposure_group="201712151140062", 

812 exposure_time=300.0*u.s, 

813 observation_counter=94, 

814 observation_id="E2V-CCD250-220_fe55_fe55_094_6288_20171215114006", 

815 observation_type="fe55", 

816 observation_reason="fe55", 

817 observing_day=20171215, 

818 physical_filter="i", 

819 science_program="6288", 

820 visit_id=201712151140062)), 

821 ) 

822 for filename, expected in test_data: 

823 with self.subTest(f"Testing {filename}"): 

824 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected) 

825 

826 def test_ucdcam_translator(self): 

827 test_data = (("UCD-E2V-CCD250-112-04_flat_flat_100_20181205153143.yaml", 

828 dict(telescope=None, 

829 instrument="LSST-UCDCam", 

830 dark_time=0.5*u.s, 

831 detector_exposure_id=201812052331480, 

832 detector_group="R00", 

833 detector_name="S00", 

834 detector_num=0, 

835 detector_serial="E2V-CCD250-112-04", 

836 exposure_id=20181205233148, 

837 exposure_group="20181205233148", 

838 exposure_time=0.5*u.s, 

839 observation_counter=100, 

840 observation_id="E2V-CCD250-112-04_flat_flat_100_20181205153143", 

841 observation_type="flat", 

842 observation_reason="flat", 

843 observing_day=20181205, 

844 physical_filter="r", 

845 science_program="2018-12-05", 

846 visit_id=20181205233148)), 

847 ("UCD-ITL-3800C-002_flat_flat_100_20180530080354.yaml", 

848 dict(telescope=None, 

849 instrument="LSST-UCDCam", 

850 dark_time=0.5*u.s, 

851 detector_exposure_id=201805301503552, 

852 detector_group="R02", 

853 detector_name="S00", 

854 detector_num=2, 

855 detector_serial="ITL-3800C-002", 

856 exposure_id=20180530150355, 

857 exposure_group="20180530150355", 

858 exposure_time=0.5*u.s, 

859 observation_counter=100, 

860 observation_id="ITL-3800C-002_flat_flat_100_20180530080354", 

861 observation_type="flat", 

862 observation_reason="flat", 

863 observing_day=20180530, 

864 physical_filter="r", 

865 science_program="2018-05-30", 

866 visit_id=20180530150355)), 

867 ) 

868 for filename, expected in test_data: 

869 with self.subTest(f"Testing {filename}"): 

870 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected) 

871 

872 def test_checker(self): 

873 filename = "latiss-future.yaml" 

874 from astro_metadata_translator.tests import read_test_file 

875 from astro_metadata_translator import ObservationInfo 

876 header = read_test_file(filename, self.datadir) 

877 obsInfo = ObservationInfo(header, pedantic=True, filename=filename) 

878 self.assertTrue(obsInfo) 

879 

880 def test_fix_header(self): 

881 from astro_metadata_translator import fix_header 

882 from astro_metadata_translator.tests import read_test_file 

883 # Test that header fix up is working 

884 # Not all headers are used in metadata translation 

885 test_data = ( 

886 ("latiss-AT_O_20210212_000006.yaml", 

887 dict(RASTART=260.024385071917)), 

888 ("latiss-AT_O_20210210_000011.yaml", 

889 dict(RASTART=355.41750341182313)), 

890 ) 

891 for filename, expected in test_data: 

892 with self.subTest(f"Testing {filename}"): 

893 header = read_test_file(filename, dir=self.datadir) 

894 modified = fix_header(header) 

895 self.assertTrue(modified) 

896 for k, v in expected.items(): 

897 self.assertEqual(header[k], v, f"Testing {k} in {filename}") 

898 

899 

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

901 unittest.main()