Coverage for tests/test_translator.py: 17%

82 statements  

« prev     ^ index     » next       coverage.py v6.5.0, created at 2022-12-08 15:41 -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 group_counter_end=1, 

55 group_counter_start=1, 

56 has_simulated_content=False, 

57 object="UNKNOWN", 

58 observation_counter=1, 

59 observation_id="MC_C_20190319_000001", 

60 observation_type="bias", 

61 observation_reason="bias", 

62 observing_day=20190319, 

63 physical_filter="unknown", 

64 pressure=None, 

65 relative_humidity=None, 

66 science_program="unknown", 

67 temperature=None, 

68 visit_id=3019031900001)), 

69 ("lsstCam-MC_C_20190319_000001_R22_S21.yaml", 

70 dict(telescope="Simonyi Survey Telescope", 

71 instrument="LSSTCam", 

72 boresight_rotation_coord="unknown", 

73 dark_time=0.0*u.s, 

74 detector_exposure_id=3019031900001097, 

75 detector_group="R22", 

76 detector_name="S21", 

77 detector_num=97, 

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

79 exposure_id=3019031900001, 

80 exposure_group="3019031900001", 

81 exposure_time=0.0*u.s, 

82 group_counter_end=1, 

83 group_counter_start=1, 

84 has_simulated_content=False, 

85 object="UNKNOWN", 

86 observation_counter=1, 

87 observation_id="MC_C_20190319_000001", 

88 observation_type="bias", 

89 observation_reason="bias", 

90 observing_day=20190319, 

91 physical_filter="unknown", 

92 pressure=None, 

93 relative_humidity=None, 

94 science_program="unknown", 

95 temperature=None, 

96 visit_id=3019031900001)), 

97 ("lsstCam-MC_C_20190322_000002_R10_S22.yaml", 

98 dict(telescope="Simonyi Survey Telescope", 

99 instrument="LSSTCam", 

100 boresight_rotation_coord="unknown", 

101 dark_time=1.0*u.s, 

102 detector_exposure_id=3019032200002035, 

103 detector_group="R10", 

104 detector_name="S22", 

105 detector_num=35, 

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

107 exposure_id=3019032200002, 

108 exposure_group="3019032200002", 

109 exposure_time=1.0*u.s, 

110 group_counter_end=2, 

111 group_counter_start=2, 

112 has_simulated_content=False, 

113 object="UNKNOWN", 

114 observation_counter=2, 

115 observation_id="MC_C_20190322_000002", 

116 observation_type="flat", 

117 observation_reason="flat", 

118 observing_day=20190322, 

119 physical_filter="SDSSi~ND_OD0.5", 

120 pressure=None, 

121 relative_humidity=None, 

122 science_program="6489D", 

123 temperature=None, 

124 visit_id=3019032200002)), 

125 ("lsstCam-MC_C_20190406_000643_R10_S00.yaml", 

126 dict(telescope="Simonyi Survey Telescope", 

127 instrument="LSSTCam", 

128 boresight_rotation_coord="unknown", 

129 dark_time=1007.422*u.s, 

130 detector_exposure_id=3019040600643027, 

131 detector_group="R10", 

132 detector_name="S00", 

133 detector_num=27, 

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

135 exposure_id=3019040600643, 

136 exposure_group="3019040600643", 

137 exposure_time=999.99*u.s, 

138 group_counter_end=643, 

139 group_counter_start=643, 

140 has_simulated_content=False, 

141 object="UNKNOWN", 

142 observation_counter=643, 

143 observation_id="MC_C_20190406_000643", 

144 observation_type="flat", 

145 observation_reason="lambda", 

146 observing_day=20190406, 

147 physical_filter="950nm", 

148 pressure=None, 

149 relative_humidity=None, 

150 science_program="6549D", 

151 temperature=None, 

152 visit_id=3019040600643)), 

153 ) 

154 for filename, expected in test_data: 

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

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

157 

158 def test_phoSimLsstCam_translator(self): 

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

160 dict(telescope="Simonyi Survey Telescope", 

161 instrument="LSSTCam", 

162 boresight_rotation_coord="sky", 

163 dark_time=15.0*u.s, 

164 detector_exposure_id=4000021700032090, 

165 detector_group="R22", 

166 detector_name="S00", 

167 detector_num=90, 

168 detector_serial="E2V-CCD250-369", 

169 detector_unique_name="R22_S00", 

170 exposure_group="4000021700032", 

171 exposure_id=4000021700032, 

172 exposure_time=15.0*u.s, 

173 group_counter_end=32, 

174 group_counter_start=32, 

175 has_simulated_content=True, 

176 object="UNKNOWN", 

177 observation_counter=32, 

178 observation_id="MC_H_20000217_000032", 

179 observation_reason="phosim", 

180 observation_type="science", 

181 observing_day=20000217, 

182 physical_filter="g", 

183 pressure=None, 

184 relative_humidity=None, 

185 science_program="9006001", 

186 temperature=None, 

187 visit_id=4000021700032)), 

188 ) 

189 for filename, expected in test_data: 

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

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

192 check_wcs=False, **expected) 

193 

194 def test_comCam_translator(self): 

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

196 dict(telescope="Simonyi Survey Telescope", 

197 instrument="LSSTComCam", 

198 boresight_rotation_coord="unknown", 

199 dark_time=0.398*u.s, 

200 detector_exposure_id=3019053000001000, 

201 detector_group="R22", 

202 detector_name="S00", 

203 detector_num=0, 

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

205 exposure_id=3019053000001, 

206 exposure_group="3019053000001", 

207 exposure_time=0.0*u.s, 

208 group_counter_end=1, 

209 group_counter_start=1, 

210 has_simulated_content=False, 

211 object="UNKNOWN", 

212 observation_counter=1, 

213 observation_id="CC_C_20190530_000001", 

214 observation_type="bias", 

215 observation_reason="bias", 

216 observing_day=20190530, 

217 physical_filter="unknown", 

218 pressure=None, 

219 relative_humidity=None, 

220 science_program="unknown", 

221 temperature=None, 

222 visit_id=3019053000001)), 

223 ("comCam-CC_C_20190526_000223_R22_S01.yaml", 

224 dict(telescope="Simonyi Survey Telescope", 

225 instrument="LSSTComCam", 

226 boresight_rotation_coord="unknown", 

227 dark_time=0.034*u.s, 

228 detector_exposure_id=3019052600223001, 

229 detector_group="R22", 

230 detector_name="S01", 

231 detector_num=1, 

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

233 exposure_id=3019052600223, 

234 exposure_group="3019052600223", 

235 exposure_time=0.0*u.s, 

236 group_counter_end=223, 

237 group_counter_start=223, 

238 has_simulated_content=False, 

239 object="UNKNOWN", 

240 observation_counter=223, 

241 observation_id="CC_C_20190526_000223", 

242 observation_type="bias", 

243 observation_reason="dark", 

244 observing_day=20190526, 

245 physical_filter="unknown", 

246 pressure=None, 

247 relative_humidity=None, 

248 science_program="unknown", 

249 temperature=None, 

250 visit_id=3019052600223)), 

251 ) 

252 for filename, expected in test_data: 

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

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

255 

256 def test_phoSimComCam_translator(self): 

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

258 dict(telescope="Simonyi Survey Telescope", 

259 instrument="LSSTComCam", 

260 boresight_rotation_coord="sky", 

261 dark_time=1.0*u.s, 

262 detector_exposure_id=4000021706001000, 

263 detector_group="R22", 

264 detector_name="S00", 

265 detector_num=0, 

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

267 exposure_id=4000021706001, 

268 exposure_group="4000021706001", 

269 exposure_time=1.0*u.s, 

270 group_counter_end=6001, 

271 group_counter_start=6001, 

272 has_simulated_content=True, 

273 object="UNKNOWN", 

274 observation_counter=6001, 

275 observation_id="CC_H_20000217_006001", 

276 observation_type="science", 

277 observation_reason="test", 

278 observing_day=20000217, 

279 physical_filter="g_01", 

280 pressure=None, 

281 relative_humidity=None, 

282 science_program="9006001", 

283 temperature=None, 

284 visit_id=4000021706001)), 

285 ) 

286 for filename, expected in test_data: 

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

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

289 check_wcs=False, **expected) 

290 

291 def test_phosim_translator(self): 

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

293 dict(telescope="Simonyi Survey Telescope", 

294 instrument="LSSTCam-PhoSim", 

295 boresight_rotation_coord="sky", 

296 dark_time=30.0*u.s, 

297 detector_exposure_id=204595038, 

298 detector_group="R11", 

299 detector_name="S02", 

300 detector_num=38, 

301 detector_serial="R11_S02", 

302 exposure_id=204595, 

303 exposure_group="204595", 

304 exposure_time=30.0*u.s, 

305 group_counter_end=204595, 

306 group_counter_start=204595, 

307 has_simulated_content=True, 

308 object="UNKNOWN", 

309 observation_counter=0, 

310 observation_id="204595", 

311 observation_type="science", 

312 observation_reason="phosim", 

313 observing_day=20221004, 

314 physical_filter="i", 

315 pressure=520.0*cds.mmHg, 

316 relative_humidity=40.0, 

317 science_program="204595", 

318 temperature=20.0*u.deg_C, 

319 visit_id=204595, 

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

321 ) 

322 for filename, expected in test_data: 

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

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

325 

326 def test_latiss_translator(self): 

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

328 dict(telescope="Rubin Auxiliary Telescope", 

329 instrument="LATISS", 

330 boresight_rotation_coord="unknown", 

331 dark_time=27.0*u.s, 

332 detector_exposure_id=3018092000065, 

333 detector_group="RXX", 

334 detector_name="S00", 

335 detector_num=0, 

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

337 exposure_id=3018092000065, 

338 exposure_group="3018092000065", 

339 exposure_time=27.0*u.s, 

340 group_counter_end=65, 

341 group_counter_start=65, 

342 has_simulated_content=False, 

343 object="UNKNOWN", 

344 observation_counter=65, 

345 observation_id="AT_C_20180920_000065", 

346 observation_type="unknown", 

347 observation_reason="unknown", 

348 observing_day=20180920, 

349 physical_filter="unknown~unknown", 

350 pressure=None, 

351 relative_humidity=None, 

352 science_program="unknown", 

353 temperature=None, 

354 visit_id=3018092000065, 

355 )), 

356 ("latiss-AT_O_20190306_000014.yaml", 

357 dict(telescope="Rubin Auxiliary Telescope", 

358 instrument="LATISS", 

359 boresight_rotation_coord="unknown", 

360 dark_time=1.06*u.s, 

361 detector_exposure_id=2019030600014, 

362 detector_group="RXX", 

363 detector_name="S00", 

364 detector_num=0, 

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

366 exposure_id=2019030600014, 

367 exposure_group="2019030600014", 

368 exposure_time=1.06*u.s, 

369 group_counter_end=14, 

370 group_counter_start=14, 

371 has_simulated_content=False, 

372 object="UNKNOWN", 

373 observation_counter=14, 

374 observation_id="AT_O_20190306_000014", 

375 observation_type="unknown", 

376 observation_reason="unknown", 

377 observing_day=20190306, 

378 physical_filter="unknown~unknown", 

379 pressure=None, 

380 relative_humidity=None, 

381 science_program="unknown", 

382 temperature=None, 

383 visit_id=2019030600014, 

384 )), 

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

386 dict(telescope="Rubin Auxiliary Telescope", 

387 instrument="LATISS", 

388 boresight_rotation_coord="unknown", 

389 dark_time=0.0*u.s, 

390 detector_exposure_id=2019032900022, 

391 detector_group="RXX", 

392 detector_name="S00", 

393 detector_num=0, 

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

395 exposure_id=2019032900022, 

396 exposure_group="2019032900022", 

397 exposure_time=0.0*u.s, 

398 group_counter_end=22, 

399 group_counter_start=22, 

400 has_simulated_content=False, 

401 object="UNKNOWN", 

402 observation_counter=22, 

403 observation_id="AT_O_20190329_000022", 

404 observation_type="bias", 

405 observation_reason="unknown", 

406 observing_day=20190329, 

407 physical_filter="unknown~unknown", 

408 pressure=None, 

409 relative_humidity=None, 

410 science_program="unknown", 

411 temperature=None, 

412 visit_id=2019032900022, 

413 )), 

414 ("latiss-future.yaml", 

415 dict(telescope="Rubin Auxiliary Telescope", 

416 instrument="LATISS", 

417 boresight_rotation_coord="unknown", 

418 dark_time=0.0*u.s, 

419 detector_exposure_id=2020032900022, 

420 detector_group="RXX", 

421 detector_name="S00", 

422 detector_num=0, 

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

424 exposure_id=2020032900022, 

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

426 exposure_time=0.0*u.s, 

427 group_counter_end=22, 

428 group_counter_start=22, 

429 has_simulated_content=False, 

430 object="UNKNOWN", 

431 observation_counter=22, 

432 observation_id="AT_X_20200329_000022", 

433 observation_type="bias", 

434 observation_reason="unknown", 

435 observing_day=20200329, 

436 physical_filter="unknown~unknown", 

437 pressure=None, 

438 relative_humidity=None, 

439 science_program="unknown", 

440 temperature=None, 

441 visit_id=1654305000120024, 

442 )), 

443 ("latiss-AT_O_20190915_000037.yaml", 

444 dict(telescope="Rubin Auxiliary Telescope", 

445 instrument="LATISS", 

446 boresight_rotation_coord="unknown", 

447 dark_time=0.0*u.s, 

448 detector_exposure_id=2019091500037, 

449 detector_group="RXX", 

450 detector_name="S00", 

451 detector_num=0, 

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

453 exposure_id=2019091500037, 

454 exposure_group="bias_0027_0100", 

455 exposure_time=0.0*u.s, 

456 group_counter_end=37, 

457 group_counter_start=37, 

458 has_simulated_content=False, 

459 object="UNKNOWN", 

460 observation_counter=37, 

461 observation_id="AT_O_20190915_000037", 

462 observation_type="bias", 

463 observation_reason="unknown", 

464 observing_day=20190915, 

465 physical_filter="unknown~unknown", 

466 pressure=None, 

467 relative_humidity=None, 

468 science_program="unknown", 

469 temperature=None, 

470 visit_id=3575576933793566714, 

471 )), 

472 ("latiss-AT_O_20191031_000004.yaml", 

473 dict(telescope="Rubin Auxiliary Telescope", 

474 instrument="LATISS", 

475 boresight_rotation_coord="unknown", 

476 dark_time=3.0*u.s, 

477 detector_exposure_id=2019103100004, 

478 detector_group="RXX", 

479 detector_name="S00", 

480 detector_num=0, 

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

482 exposure_id=2019103100004, 

483 exposure_group="TEST01", 

484 exposure_time=3.0*u.s, 

485 group_counter_end=4, 

486 group_counter_start=4, 

487 has_simulated_content=False, 

488 object="UNKNOWN", 

489 observation_counter=4, 

490 observation_id="AT_O_20191031_000004", 

491 observation_type="engtest", 

492 observation_reason="unknown", 

493 observing_day=20191031, 

494 physical_filter="unknown~unknown", 

495 pressure=None, 

496 relative_humidity=None, 

497 science_program="unknown", 

498 temperature=None, 

499 visit_id=1123819875881954006, 

500 )), 

501 ("latiss-AT_O_20191104_000003.yaml", 

502 dict(telescope="Rubin Auxiliary Telescope", 

503 instrument="LATISS", 

504 boresight_rotation_coord="unknown", 

505 dark_time=3.0*u.s, 

506 detector_exposure_id=2019110400003, 

507 detector_group="RXX", 

508 detector_name="S00", 

509 detector_num=0, 

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

511 exposure_id=2019110400003, 

512 exposure_group="TEST01", 

513 exposure_time=3.0*u.s, 

514 group_counter_end=3, 

515 group_counter_start=3, 

516 has_simulated_content=False, 

517 object="UNKNOWN", 

518 observation_counter=3, 

519 observation_id="AT_O_20191104_000003", 

520 observation_type="engtest", 

521 observation_reason="unknown", 

522 observing_day=20191104, 

523 physical_filter="unknown~unknown", 

524 pressure=None, 

525 relative_humidity=None, 

526 science_program="unknown", 

527 temperature=None, 

528 visit_id=1123819875881954006, 

529 )), 

530 ("latiss-AT_O_20191113_000061.yaml", 

531 dict(telescope="Rubin Auxiliary Telescope", 

532 instrument="LATISS", 

533 boresight_rotation_coord="unknown", 

534 dark_time=0.5*u.s, 

535 detector_exposure_id=2019111300061, 

536 detector_group="RXX", 

537 detector_name="S00", 

538 detector_num=0, 

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

540 exposure_id=2019111300061, 

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

542 exposure_time=0.5*u.s, 

543 group_counter_end=61, 

544 group_counter_start=61, 

545 has_simulated_content=False, 

546 object="UNKNOWN", 

547 observation_counter=61, 

548 observation_id="AT_O_20191113_000061", 

549 observation_type="engtest", 

550 observation_reason="unknown", 

551 observing_day=20191113, 

552 physical_filter="empty~ronchi90lpmm", 

553 pressure=None, 

554 relative_humidity=None, 

555 science_program="unknown", 

556 temperature=None, 

557 visit_id=1892608703001301325, 

558 )), 

559 ("latiss-AT_O_20191118_000011.yaml", 

560 dict(telescope="Rubin Auxiliary Telescope", 

561 instrument="LATISS", 

562 boresight_rotation_coord="unknown", 

563 dark_time=15.0*u.s, 

564 detector_exposure_id=2019111800011, 

565 detector_group="RXX", 

566 detector_name="S00", 

567 detector_num=0, 

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

569 exposure_id=2019111800011, 

570 exposure_group="dark_0002_0005", 

571 exposure_time=15.0*u.s, 

572 group_counter_end=11, 

573 group_counter_start=11, 

574 has_simulated_content=False, 

575 object="UNKNOWN", 

576 observation_counter=11, 

577 observation_id="AT_O_20191118_000011", 

578 observation_type="dark", 

579 observation_reason="unknown", 

580 observing_day=20191118, 

581 physical_filter="diffuser~ronchi170lpmm", 

582 pressure=None, 

583 relative_humidity=None, 

584 science_program="unknown", 

585 temperature=None, 

586 visit_id=6861884254113212214, 

587 )), 

588 ("latiss-AT_O_20200121_000045.yaml", 

589 dict(telescope="Rubin Auxiliary Telescope", 

590 instrument="LATISS", 

591 boresight_rotation_coord="sky", 

592 dark_time=100.0*u.s, 

593 detector_exposure_id=2020012100045, 

594 detector_group="RXX", 

595 detector_name="S00", 

596 detector_num=0, 

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

598 exposure_id=2020012100045, 

599 exposure_group="test", 

600 exposure_time=100.0*u.s, 

601 group_counter_end=45, 

602 group_counter_start=45, 

603 has_simulated_content=False, 

604 object="UNKNOWN", 

605 observation_counter=45, 

606 observation_id="AT_O_20200121_000045", 

607 observation_type="engtest", 

608 observation_reason="unknown", 

609 observing_day=20200121, 

610 physical_filter="blank_bk7_wg05~empty", 

611 pressure=None, 

612 relative_humidity=None, 

613 science_program="unknown", 

614 temperature=None, 

615 visit_id=4702443654717948604, 

616 )), 

617 ("latiss-AT_O_20200128_000379.yaml", 

618 dict(telescope="Rubin Auxiliary Telescope", 

619 instrument="LATISS", 

620 boresight_rotation_coord="sky", 

621 dark_time=5.0*u.s, 

622 detector_exposure_id=2020012800379, 

623 detector_group="RXX", 

624 detector_name="S00", 

625 detector_num=0, 

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

627 exposure_id=2020012800379, 

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

629 exposure_time=5.0*u.s, 

630 group_counter_end=379, 

631 group_counter_start=379, 

632 has_simulated_content=False, 

633 object="HD107696", 

634 observation_counter=379, 

635 observation_id="AT_O_20200128_000379", 

636 observation_type="science", 

637 observation_reason="science", 

638 observing_day=20200128, 

639 physical_filter="KPNO_406_828nm~empty", 

640 pressure=None, 

641 relative_humidity=None, 

642 science_program="unknown", 

643 temperature=None, 

644 visit_id=1602123521660000, 

645 # We have some timing discrepancies in the headers 

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

647 # the recorded AZ/EL/TIME. 

648 wcs_params=dict(max_sep=7.), 

649 )), 

650 ("latiss-AT_O_20220405_000348.yaml", 

651 dict(telescope="Rubin Auxiliary Telescope", 

652 instrument="LATISS", 

653 boresight_rotation_coord="sky", 

654 dark_time=30.3176279067993*u.s, 

655 detector_exposure_id=2022040500348, 

656 detector_group="RXX", 

657 detector_name="S00", 

658 detector_num=0, 

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

660 exposure_id=2022040500348, 

661 exposure_group="2022-04-06T02:58:07.181", 

662 exposure_time=30.0*u.s, 

663 group_counter_end=349, 

664 group_counter_start=348, 

665 has_simulated_content=False, 

666 object="LATISS_E6A_00000040", 

667 observation_counter=348, 

668 observation_id="AT_O_20220405_000348", 

669 observation_type="science", 

670 observation_reason="object", 

671 observing_day=20220405, 

672 physical_filter="SDSSr~empty", 

673 pressure=None, 

674 relative_humidity=None, 

675 science_program="LATISS_E6A", 

676 temperature=None, 

677 visit_id=2291434871810000, 

678 # We have some timing discrepancies in the headers 

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

680 # the recorded AZ/EL/TIME. 

681 wcs_params=dict(max_sep=7.), 

682 )), 

683 ("latiss-AT_O_20220405_000349.yaml", 

684 dict(telescope="Rubin Auxiliary Telescope", 

685 instrument="LATISS", 

686 boresight_rotation_coord="sky", 

687 dark_time=30.2387452125549*u.s, 

688 detector_exposure_id=2022040500349, 

689 detector_group="RXX", 

690 detector_name="S00", 

691 detector_num=0, 

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

693 exposure_id=2022040500349, 

694 exposure_group="2022-04-06T02:58:07.181", 

695 exposure_time=30.0*u.s, 

696 group_counter_end=349, 

697 group_counter_start=348, 

698 has_simulated_content=False, 

699 object="LATISS_E6A_00000040", 

700 observation_counter=349, 

701 observation_id="AT_O_20220405_000349", 

702 observation_type="science", 

703 observation_reason="object", 

704 observing_day=20220405, 

705 physical_filter="SDSSr~empty", 

706 pressure=None, 

707 relative_humidity=None, 

708 science_program="LATISS_E6A", 

709 temperature=None, 

710 visit_id=2291434871810000, 

711 # We have some timing discrepancies in the headers 

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

713 # the recorded AZ/EL/TIME. 

714 wcs_params=dict(max_sep=7.), 

715 )), 

716 ) 

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

718 for filename, expected in test_data: 

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

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

721 

722 # This translation should fail 

723 with self.assertRaises(KeyError): 

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

725 

726 def test_imsim_translator(self): 

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

728 dict(telescope="Simonyi Survey Telescope", 

729 instrument="LSSTCam-imSim", 

730 boresight_rotation_coord="sky", 

731 dark_time=0.0*u.s, 

732 detector_exposure_id=3010002036, 

733 detector_group="R11", 

734 detector_name="S00", 

735 detector_num=36, 

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

737 exposure_id=3010002, 

738 exposure_group="3010002", 

739 exposure_time=0.0*u.s, 

740 group_counter_end=3010002, 

741 group_counter_start=3010002, 

742 has_simulated_content=True, 

743 object="UNKNOWN", 

744 observation_counter=0, 

745 observation_id="3010002", 

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

747 observation_reason="imsim", 

748 observing_day=20211231, 

749 physical_filter="i", 

750 pressure=None, 

751 relative_humidity=40.0, 

752 science_program="42", 

753 temperature=None, 

754 visit_id=3010002, 

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

756 )), 

757 ("imsim-lsst_a_204595_R11_S02_i.yaml", 

758 dict(telescope="Simonyi Survey Telescope", 

759 instrument="LSSTCam-imSim", 

760 boresight_rotation_coord="sky", 

761 dark_time=30.0*u.s, 

762 detector_exposure_id=204595038, 

763 detector_group="R11", 

764 detector_name="S02", 

765 detector_num=38, 

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

767 exposure_id=204595, 

768 exposure_group="204595", 

769 exposure_time=30.0*u.s, 

770 group_counter_end=204595, 

771 group_counter_start=204595, 

772 has_simulated_content=True, 

773 object="UNKNOWN", 

774 observation_counter=0, 

775 observation_id="204595", 

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

777 observation_reason="imsim", 

778 observing_day=20221004, 

779 physical_filter="i_sim_1.4", 

780 pressure=None, 

781 relative_humidity=40.0, 

782 science_program="204595", 

783 temperature=None, 

784 visit_id=204595, 

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

786 )), 

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

788 dict(telescope="Simonyi Survey Telescope", 

789 instrument="LSSTCam-imSim", 

790 boresight_rotation_coord="sky", 

791 dark_time=30.0*u.s, 

792 detector_exposure_id=5000007042, 

793 detector_group="R11", 

794 detector_name="S20", 

795 detector_num=42, 

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

797 exposure_id=5000007, 

798 exposure_group="5000007", 

799 exposure_time=30.0*u.s, 

800 group_counter_end=5000007, 

801 group_counter_start=5000007, 

802 has_simulated_content=True, 

803 object="UNKNOWN", 

804 observation_counter=0, 

805 observation_id="5000007", 

806 observation_type="flat", 

807 observation_reason="imsim", 

808 observing_day=20220805, 

809 physical_filter="i", 

810 pressure=None, 

811 relative_humidity=40.0, 

812 science_program="5000007", 

813 temperature=None, 

814 visit_id=5000007, 

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

816 )), 

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

818 dict(telescope="Simonyi Survey Telescope", 

819 instrument="LSSTCam-imSim", 

820 boresight_rotation_coord="sky", 

821 dark_time=500.0*u.s, 

822 detector_exposure_id=4010003040, 

823 detector_group="R11", 

824 detector_name="S11", 

825 detector_num=40, 

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

827 exposure_id=4010003, 

828 exposure_group="4010003", 

829 exposure_time=500.0*u.s, 

830 group_counter_end=4010003, 

831 group_counter_start=4010003, 

832 has_simulated_content=True, 

833 object="UNKNOWN", 

834 observation_counter=0, 

835 observation_id="4010003", 

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

837 observation_reason="imsim", 

838 observing_day=20211231, 

839 physical_filter="i", 

840 pressure=None, 

841 relative_humidity=40.0, 

842 science_program="42", 

843 temperature=None, 

844 visit_id=4010003, 

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

846 )), 

847 ) 

848 for filename, expected in test_data: 

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

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

851 

852 def test_ts3_translator(self): 

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

854 dict(telescope=None, 

855 instrument="LSST-TS3", 

856 dark_time=44.631*u.s, 

857 detector_exposure_id=201811151255111433, 

858 detector_group="R433", 

859 detector_name="S00", 

860 detector_num=433, 

861 detector_serial="E2V-CCD250-411", 

862 exposure_id=201811151255111, 

863 exposure_group="201811151255111", 

864 exposure_time=44.631*u.s, 

865 group_counter_end=25, 

866 group_counter_start=25, 

867 has_simulated_content=False, 

868 observation_counter=25, 

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

870 observation_type="flat", 

871 observation_reason="lambda", 

872 observing_day=20181115, 

873 physical_filter="550CutOn", 

874 science_program="2018-11-15", 

875 visit_id=201811151255111)), 

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

877 dict(telescope=None, 

878 instrument="LSST-TS3", 

879 dark_time=30.611*u.s, 

880 detector_exposure_id=201607220607067071, 

881 detector_group="R071", 

882 detector_name="S00", 

883 detector_num=71, 

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

885 exposure_id=201607220607067, 

886 exposure_group="201607220607067", 

887 exposure_time=30.611*u.s, 

888 group_counter_end=67, 

889 group_counter_start=67, 

890 has_simulated_content=False, 

891 observation_counter=67, 

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

893 observation_type="flat", 

894 observation_reason="lambda", 

895 observing_day=20160721, 

896 physical_filter="550CutOn", 

897 science_program="2016-07-22", 

898 visit_id=201607220607067)), 

899 ) 

900 for filename, expected in test_data: 

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

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

903 

904 def test_ts8_translator(self): 

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

906 dict(telescope=None, 

907 instrument="LSST-TS8", 

908 dark_time=0.0*u.s, 

909 detector_exposure_id=201807241041568067, 

910 detector_group="RTM-010", 

911 detector_name="S11", 

912 detector_num=67, 

913 detector_serial="E2V-CCD250-179", 

914 exposure_id=201807241041568, 

915 exposure_group="201807241041568", 

916 exposure_time=0.0*u.s, 

917 group_counter_end=24, 

918 group_counter_start=24, 

919 has_simulated_content=False, 

920 observation_counter=24, 

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

922 observation_type="bias", 

923 observation_reason="lambda", 

924 observing_day=20180724, 

925 physical_filter="y", 

926 science_program="6006D", 

927 visit_id=201807241041568)), 

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

929 dict(telescope=None, 

930 instrument="LSST-TS8", 

931 dark_time=21.913*u.s, 

932 detector_exposure_id=201807241028453065, 

933 detector_group="RTM-010", 

934 detector_name="S02", 

935 detector_num=65, 

936 detector_serial="E2V-CCD250-200", 

937 exposure_id=201807241028453, 

938 exposure_group="201807241028453", 

939 exposure_time=21.913*u.s, 

940 group_counter_end=17, 

941 group_counter_start=17, 

942 has_simulated_content=False, 

943 observation_counter=17, 

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

945 observation_type="flat", 

946 observation_reason="lambda", 

947 observing_day=20180724, 

948 physical_filter="z", 

949 science_program="6006D", 

950 visit_id=201807241028453)), 

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

952 dict(telescope=None, 

953 instrument="LSST-TS8", 

954 dark_time=300.0*u.s, 

955 detector_exposure_id=201712151140062027, 

956 detector_group="RTM-005", 

957 detector_name="S00", 

958 detector_num=27, 

959 detector_serial="E2V-CCD250-220", 

960 exposure_id=201712151140062, 

961 exposure_group="201712151140062", 

962 exposure_time=300.0*u.s, 

963 group_counter_end=94, 

964 group_counter_start=94, 

965 has_simulated_content=False, 

966 observation_counter=94, 

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

968 observation_type="fe55", 

969 observation_reason="fe55", 

970 observing_day=20171215, 

971 physical_filter="i", 

972 science_program="6288", 

973 visit_id=201712151140062)), 

974 ) 

975 for filename, expected in test_data: 

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

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

978 

979 def test_ucdcam_translator(self): 

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

981 dict(telescope=None, 

982 instrument="LSST-UCDCam", 

983 dark_time=0.5*u.s, 

984 detector_exposure_id=201812052331480, 

985 detector_group="R00", 

986 detector_name="S00", 

987 detector_num=0, 

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

989 exposure_id=20181205233148, 

990 exposure_group="20181205233148", 

991 exposure_time=0.5*u.s, 

992 group_counter_end=100, 

993 group_counter_start=100, 

994 has_simulated_content=False, 

995 observation_counter=100, 

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

997 observation_type="flat", 

998 observation_reason="flat", 

999 observing_day=20181205, 

1000 physical_filter="r", 

1001 science_program="2018-12-05", 

1002 visit_id=20181205233148)), 

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

1004 dict(telescope=None, 

1005 instrument="LSST-UCDCam", 

1006 dark_time=0.5*u.s, 

1007 detector_exposure_id=201805301503552, 

1008 detector_group="R02", 

1009 detector_name="S00", 

1010 detector_num=2, 

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

1012 exposure_id=20180530150355, 

1013 exposure_group="20180530150355", 

1014 exposure_time=0.5*u.s, 

1015 group_counter_end=100, 

1016 group_counter_start=100, 

1017 has_simulated_content=False, 

1018 observation_counter=100, 

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

1020 observation_type="flat", 

1021 observation_reason="flat", 

1022 observing_day=20180530, 

1023 physical_filter="r", 

1024 science_program="2018-05-30", 

1025 visit_id=20180530150355)), 

1026 ) 

1027 for filename, expected in test_data: 

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

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

1030 

1031 def test_checker(self): 

1032 filename = "latiss-future.yaml" 

1033 from astro_metadata_translator.tests import read_test_file 

1034 from astro_metadata_translator import ObservationInfo 

1035 header = read_test_file(filename, self.datadir) 

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

1037 self.assertTrue(obsInfo) 

1038 

1039 def test_fix_header(self): 

1040 from astro_metadata_translator import fix_header 

1041 from astro_metadata_translator.tests import read_test_file 

1042 # Test that header fix up is working 

1043 # Not all headers are used in metadata translation 

1044 test_data = ( 

1045 ("latiss-AT_O_20210212_000006.yaml", 

1046 dict(RASTART=260.024385071917)), 

1047 ("latiss-AT_O_20210210_000011.yaml", 

1048 dict(RASTART=355.41750341182313)), 

1049 ) 

1050 for filename, expected in test_data: 

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

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

1053 modified = fix_header(header) 

1054 self.assertTrue(modified) 

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

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

1057 

1058 

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

1060 unittest.main()