Coverage for tests/test_translator.py: 19%

82 statements  

« prev     ^ index     » next       coverage.py v6.4.2, created at 2022-07-15 01:31 +0000

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 focus_z=0.0*u.mm, 

55 group_counter_end=1, 

56 group_counter_start=1, 

57 has_simulated_content=False, 

58 object="UNKNOWN", 

59 observation_counter=1, 

60 observation_id="MC_C_20190319_000001", 

61 observation_type="bias", 

62 observation_reason="bias", 

63 observing_day=20190319, 

64 physical_filter="unknown", 

65 pressure=None, 

66 relative_humidity=None, 

67 science_program="unknown", 

68 temperature=None, 

69 visit_id=3019031900001)), 

70 ("lsstCam-MC_C_20190319_000001_R22_S21.yaml", 

71 dict(telescope="Simonyi Survey Telescope", 

72 instrument="LSSTCam", 

73 boresight_rotation_coord="unknown", 

74 dark_time=0.0*u.s, 

75 detector_exposure_id=3019031900001097, 

76 detector_group="R22", 

77 detector_name="S21", 

78 detector_num=97, 

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

80 exposure_id=3019031900001, 

81 exposure_group="3019031900001", 

82 exposure_time=0.0*u.s, 

83 focus_z=0.0*u.mm, 

84 group_counter_end=1, 

85 group_counter_start=1, 

86 has_simulated_content=False, 

87 object="UNKNOWN", 

88 observation_counter=1, 

89 observation_id="MC_C_20190319_000001", 

90 observation_type="bias", 

91 observation_reason="bias", 

92 observing_day=20190319, 

93 physical_filter="unknown", 

94 pressure=None, 

95 relative_humidity=None, 

96 science_program="unknown", 

97 temperature=None, 

98 visit_id=3019031900001)), 

99 ("lsstCam-MC_C_20190322_000002_R10_S22.yaml", 

100 dict(telescope="Simonyi Survey Telescope", 

101 instrument="LSSTCam", 

102 boresight_rotation_coord="unknown", 

103 dark_time=1.0*u.s, 

104 detector_exposure_id=3019032200002035, 

105 detector_group="R10", 

106 detector_name="S22", 

107 detector_num=35, 

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

109 exposure_id=3019032200002, 

110 exposure_group="3019032200002", 

111 exposure_time=1.0*u.s, 

112 focus_z=0.0*u.mm, 

113 group_counter_end=2, 

114 group_counter_start=2, 

115 has_simulated_content=False, 

116 object="UNKNOWN", 

117 observation_counter=2, 

118 observation_id="MC_C_20190322_000002", 

119 observation_type="flat", 

120 observation_reason="flat", 

121 observing_day=20190322, 

122 physical_filter="SDSSi~ND_OD0.5", 

123 pressure=None, 

124 relative_humidity=None, 

125 science_program="6489D", 

126 temperature=None, 

127 visit_id=3019032200002)), 

128 ("lsstCam-MC_C_20190406_000643_R10_S00.yaml", 

129 dict(telescope="Simonyi Survey Telescope", 

130 instrument="LSSTCam", 

131 boresight_rotation_coord="unknown", 

132 dark_time=1007.422*u.s, 

133 detector_exposure_id=3019040600643027, 

134 detector_group="R10", 

135 detector_name="S00", 

136 detector_num=27, 

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

138 exposure_id=3019040600643, 

139 exposure_group="3019040600643", 

140 exposure_time=999.99*u.s, 

141 focus_z=0.0*u.mm, 

142 group_counter_end=643, 

143 group_counter_start=643, 

144 has_simulated_content=False, 

145 object="UNKNOWN", 

146 observation_counter=643, 

147 observation_id="MC_C_20190406_000643", 

148 observation_type="flat", 

149 observation_reason="lambda", 

150 observing_day=20190406, 

151 physical_filter="950nm", 

152 pressure=None, 

153 relative_humidity=None, 

154 science_program="6549D", 

155 temperature=None, 

156 visit_id=3019040600643)), 

157 ) 

158 for filename, expected in test_data: 

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

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

161 

162 def test_phoSimLsstCam_translator(self): 

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

164 dict(telescope="Simonyi Survey Telescope", 

165 instrument="LSSTCam", 

166 boresight_rotation_coord="sky", 

167 dark_time=15.0*u.s, 

168 detector_exposure_id=4000021700032090, 

169 detector_group="R22", 

170 detector_name="S00", 

171 detector_num=90, 

172 detector_serial="E2V-CCD250-369", 

173 detector_unique_name="R22_S00", 

174 exposure_group="4000021700032", 

175 exposure_id=4000021700032, 

176 exposure_time=15.0*u.s, 

177 focus_z=0.0*u.mm, 

178 group_counter_end=32, 

179 group_counter_start=32, 

180 has_simulated_content=True, 

181 object="UNKNOWN", 

182 observation_counter=32, 

183 observation_id="MC_H_20000217_000032", 

184 observation_reason="phosim", 

185 observation_type="science", 

186 observing_day=20000217, 

187 physical_filter="g", 

188 pressure=None, 

189 relative_humidity=None, 

190 science_program="9006001", 

191 temperature=None, 

192 visit_id=4000021700032)), 

193 ) 

194 for filename, expected in test_data: 

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

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

197 check_wcs=False, **expected) 

198 

199 def test_comCam_translator(self): 

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

201 dict(telescope="Simonyi Survey Telescope", 

202 instrument="LSSTComCam", 

203 boresight_rotation_coord="unknown", 

204 dark_time=0.398*u.s, 

205 detector_exposure_id=3019053000001000, 

206 detector_group="R22", 

207 detector_name="S00", 

208 detector_num=0, 

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

210 exposure_id=3019053000001, 

211 exposure_group="3019053000001", 

212 exposure_time=0.0*u.s, 

213 focus_z=0.0*u.mm, 

214 group_counter_end=1, 

215 group_counter_start=1, 

216 has_simulated_content=False, 

217 object="UNKNOWN", 

218 observation_counter=1, 

219 observation_id="CC_C_20190530_000001", 

220 observation_type="bias", 

221 observation_reason="bias", 

222 observing_day=20190530, 

223 physical_filter="unknown", 

224 pressure=None, 

225 relative_humidity=None, 

226 science_program="unknown", 

227 temperature=None, 

228 visit_id=3019053000001)), 

229 ("comCam-CC_C_20190526_000223_R22_S01.yaml", 

230 dict(telescope="Simonyi Survey Telescope", 

231 instrument="LSSTComCam", 

232 boresight_rotation_coord="unknown", 

233 dark_time=0.034*u.s, 

234 detector_exposure_id=3019052600223001, 

235 detector_group="R22", 

236 detector_name="S01", 

237 detector_num=1, 

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

239 exposure_id=3019052600223, 

240 exposure_group="3019052600223", 

241 exposure_time=0.0*u.s, 

242 focus_z=0.0*u.mm, 

243 group_counter_end=223, 

244 group_counter_start=223, 

245 has_simulated_content=False, 

246 object="UNKNOWN", 

247 observation_counter=223, 

248 observation_id="CC_C_20190526_000223", 

249 observation_type="bias", 

250 observation_reason="dark", 

251 observing_day=20190526, 

252 physical_filter="unknown", 

253 pressure=None, 

254 relative_humidity=None, 

255 science_program="unknown", 

256 temperature=None, 

257 visit_id=3019052600223)), 

258 ) 

259 for filename, expected in test_data: 

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

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

262 

263 def test_phoSimComCam_translator(self): 

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

265 dict(telescope="Simonyi Survey Telescope", 

266 instrument="LSSTComCam", 

267 boresight_rotation_coord="sky", 

268 dark_time=1.0*u.s, 

269 detector_exposure_id=4000021706001000, 

270 detector_group="R22", 

271 detector_name="S00", 

272 detector_num=0, 

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

274 exposure_id=4000021706001, 

275 exposure_group="4000021706001", 

276 exposure_time=1.0*u.s, 

277 focus_z=0.0*u.mm, 

278 group_counter_end=6001, 

279 group_counter_start=6001, 

280 has_simulated_content=True, 

281 object="UNKNOWN", 

282 observation_counter=6001, 

283 observation_id="CC_H_20000217_006001", 

284 observation_type="science", 

285 observation_reason="test", 

286 observing_day=20000217, 

287 physical_filter="g_01", 

288 pressure=None, 

289 relative_humidity=None, 

290 science_program="9006001", 

291 temperature=None, 

292 visit_id=4000021706001)), 

293 ) 

294 for filename, expected in test_data: 

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

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

297 check_wcs=False, **expected) 

298 

299 def test_phosim_translator(self): 

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

301 dict(telescope="Simonyi Survey Telescope", 

302 instrument="LSSTCam-PhoSim", 

303 boresight_rotation_coord="sky", 

304 dark_time=30.0*u.s, 

305 detector_exposure_id=204595038, 

306 detector_group="R11", 

307 detector_name="S02", 

308 detector_num=38, 

309 detector_serial="R11_S02", 

310 exposure_id=204595, 

311 exposure_group="204595", 

312 exposure_time=30.0*u.s, 

313 focus_z=0.0*u.mm, 

314 group_counter_end=204595, 

315 group_counter_start=204595, 

316 has_simulated_content=True, 

317 object="UNKNOWN", 

318 observation_counter=0, 

319 observation_id="204595", 

320 observation_type="science", 

321 observation_reason="phosim", 

322 observing_day=20221004, 

323 physical_filter="i", 

324 pressure=520.0*cds.mmHg, 

325 relative_humidity=40.0, 

326 science_program="204595", 

327 temperature=20.0*u.deg_C, 

328 visit_id=204595, 

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

330 ) 

331 for filename, expected in test_data: 

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

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

334 

335 def test_latiss_translator(self): 

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

337 dict(telescope="Rubin Auxiliary Telescope", 

338 instrument="LATISS", 

339 boresight_rotation_coord="unknown", 

340 dark_time=27.0*u.s, 

341 detector_exposure_id=3018092000065, 

342 detector_group="RXX", 

343 detector_name="S00", 

344 detector_num=0, 

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

346 exposure_id=3018092000065, 

347 exposure_group="3018092000065", 

348 exposure_time=27.0*u.s, 

349 focus_z=0.0*u.mm, 

350 group_counter_end=65, 

351 group_counter_start=65, 

352 has_simulated_content=False, 

353 object="UNKNOWN", 

354 observation_counter=65, 

355 observation_id="AT_C_20180920_000065", 

356 observation_type="unknown", 

357 observation_reason="unknown", 

358 observing_day=20180920, 

359 physical_filter="unknown~unknown", 

360 pressure=None, 

361 relative_humidity=None, 

362 science_program="unknown", 

363 temperature=None, 

364 visit_id=3018092000065, 

365 )), 

366 ("latiss-AT_O_20190306_000014.yaml", 

367 dict(telescope="Rubin Auxiliary Telescope", 

368 instrument="LATISS", 

369 boresight_rotation_coord="unknown", 

370 dark_time=1.06*u.s, 

371 detector_exposure_id=2019030600014, 

372 detector_group="RXX", 

373 detector_name="S00", 

374 detector_num=0, 

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

376 exposure_id=2019030600014, 

377 exposure_group="2019030600014", 

378 exposure_time=1.06*u.s, 

379 focus_z=0.0*u.mm, 

380 group_counter_end=14, 

381 group_counter_start=14, 

382 has_simulated_content=False, 

383 object="UNKNOWN", 

384 observation_counter=14, 

385 observation_id="AT_O_20190306_000014", 

386 observation_type="unknown", 

387 observation_reason="unknown", 

388 observing_day=20190306, 

389 physical_filter="unknown~unknown", 

390 pressure=None, 

391 relative_humidity=None, 

392 science_program="unknown", 

393 temperature=None, 

394 visit_id=2019030600014, 

395 )), 

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

397 dict(telescope="Rubin Auxiliary Telescope", 

398 instrument="LATISS", 

399 boresight_rotation_coord="unknown", 

400 dark_time=0.0*u.s, 

401 detector_exposure_id=2019032900022, 

402 detector_group="RXX", 

403 detector_name="S00", 

404 detector_num=0, 

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

406 exposure_id=2019032900022, 

407 exposure_group="2019032900022", 

408 exposure_time=0.0*u.s, 

409 focus_z=0.0*u.mm, 

410 group_counter_end=22, 

411 group_counter_start=22, 

412 has_simulated_content=False, 

413 object="UNKNOWN", 

414 observation_counter=22, 

415 observation_id="AT_O_20190329_000022", 

416 observation_type="bias", 

417 observation_reason="unknown", 

418 observing_day=20190329, 

419 physical_filter="unknown~unknown", 

420 pressure=None, 

421 relative_humidity=None, 

422 science_program="unknown", 

423 temperature=None, 

424 visit_id=2019032900022, 

425 )), 

426 ("latiss-future.yaml", 

427 dict(telescope="Rubin Auxiliary Telescope", 

428 instrument="LATISS", 

429 boresight_rotation_coord="unknown", 

430 dark_time=0.0*u.s, 

431 detector_exposure_id=2020032900022, 

432 detector_group="RXX", 

433 detector_name="S00", 

434 detector_num=0, 

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

436 exposure_id=2020032900022, 

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

438 exposure_time=0.0*u.s, 

439 focus_z=0.0*u.mm, 

440 group_counter_end=22, 

441 group_counter_start=22, 

442 has_simulated_content=False, 

443 object="UNKNOWN", 

444 observation_counter=22, 

445 observation_id="AT_X_20200329_000022", 

446 observation_type="bias", 

447 observation_reason="unknown", 

448 observing_day=20200329, 

449 physical_filter="unknown~unknown", 

450 pressure=None, 

451 relative_humidity=None, 

452 science_program="unknown", 

453 temperature=None, 

454 visit_id=1654305000120024, 

455 )), 

456 ("latiss-AT_O_20190915_000037.yaml", 

457 dict(telescope="Rubin Auxiliary Telescope", 

458 instrument="LATISS", 

459 boresight_rotation_coord="unknown", 

460 dark_time=0.0*u.s, 

461 detector_exposure_id=2019091500037, 

462 detector_group="RXX", 

463 detector_name="S00", 

464 detector_num=0, 

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

466 exposure_id=2019091500037, 

467 exposure_group="bias_0027_0100", 

468 exposure_time=0.0*u.s, 

469 focus_z=0.0*u.mm, 

470 group_counter_end=37, 

471 group_counter_start=37, 

472 has_simulated_content=False, 

473 object="UNKNOWN", 

474 observation_counter=37, 

475 observation_id="AT_O_20190915_000037", 

476 observation_type="bias", 

477 observation_reason="unknown", 

478 observing_day=20190915, 

479 physical_filter="unknown~unknown", 

480 pressure=None, 

481 relative_humidity=None, 

482 science_program="unknown", 

483 temperature=None, 

484 visit_id=3575576933793566714, 

485 )), 

486 ("latiss-AT_O_20191031_000004.yaml", 

487 dict(telescope="Rubin Auxiliary Telescope", 

488 instrument="LATISS", 

489 boresight_rotation_coord="unknown", 

490 dark_time=3.0*u.s, 

491 detector_exposure_id=2019103100004, 

492 detector_group="RXX", 

493 detector_name="S00", 

494 detector_num=0, 

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

496 exposure_id=2019103100004, 

497 exposure_group="TEST01", 

498 exposure_time=3.0*u.s, 

499 focus_z=0.0*u.mm, 

500 group_counter_end=4, 

501 group_counter_start=4, 

502 has_simulated_content=False, 

503 object="UNKNOWN", 

504 observation_counter=4, 

505 observation_id="AT_O_20191031_000004", 

506 observation_type="engtest", 

507 observation_reason="unknown", 

508 observing_day=20191031, 

509 physical_filter="unknown~unknown", 

510 pressure=None, 

511 relative_humidity=None, 

512 science_program="unknown", 

513 temperature=None, 

514 visit_id=1123819875881954006, 

515 )), 

516 ("latiss-AT_O_20191104_000003.yaml", 

517 dict(telescope="Rubin Auxiliary Telescope", 

518 instrument="LATISS", 

519 boresight_rotation_coord="unknown", 

520 dark_time=3.0*u.s, 

521 detector_exposure_id=2019110400003, 

522 detector_group="RXX", 

523 detector_name="S00", 

524 detector_num=0, 

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

526 exposure_id=2019110400003, 

527 exposure_group="TEST01", 

528 exposure_time=3.0*u.s, 

529 focus_z=0.0*u.mm, 

530 group_counter_end=3, 

531 group_counter_start=3, 

532 has_simulated_content=False, 

533 object="UNKNOWN", 

534 observation_counter=3, 

535 observation_id="AT_O_20191104_000003", 

536 observation_type="engtest", 

537 observation_reason="unknown", 

538 observing_day=20191104, 

539 physical_filter="unknown~unknown", 

540 pressure=None, 

541 relative_humidity=None, 

542 science_program="unknown", 

543 temperature=None, 

544 visit_id=1123819875881954006, 

545 )), 

546 ("latiss-AT_O_20191113_000061.yaml", 

547 dict(telescope="Rubin Auxiliary Telescope", 

548 instrument="LATISS", 

549 boresight_rotation_coord="unknown", 

550 dark_time=0.5*u.s, 

551 detector_exposure_id=2019111300061, 

552 detector_group="RXX", 

553 detector_name="S00", 

554 detector_num=0, 

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

556 exposure_id=2019111300061, 

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

558 exposure_time=0.5*u.s, 

559 focus_z=0.0*u.mm, 

560 group_counter_end=61, 

561 group_counter_start=61, 

562 has_simulated_content=False, 

563 object="UNKNOWN", 

564 observation_counter=61, 

565 observation_id="AT_O_20191113_000061", 

566 observation_type="engtest", 

567 observation_reason="unknown", 

568 observing_day=20191113, 

569 physical_filter="empty~ronchi90lpmm", 

570 pressure=None, 

571 relative_humidity=None, 

572 science_program="unknown", 

573 temperature=None, 

574 visit_id=1892608703001301325, 

575 )), 

576 ("latiss-AT_O_20191118_000011.yaml", 

577 dict(telescope="Rubin Auxiliary Telescope", 

578 instrument="LATISS", 

579 boresight_rotation_coord="unknown", 

580 dark_time=15.0*u.s, 

581 detector_exposure_id=2019111800011, 

582 detector_group="RXX", 

583 detector_name="S00", 

584 detector_num=0, 

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

586 exposure_id=2019111800011, 

587 exposure_group="dark_0002_0005", 

588 exposure_time=15.0*u.s, 

589 focus_z=0.0*u.mm, 

590 group_counter_end=11, 

591 group_counter_start=11, 

592 has_simulated_content=False, 

593 object="UNKNOWN", 

594 observation_counter=11, 

595 observation_id="AT_O_20191118_000011", 

596 observation_type="dark", 

597 observation_reason="unknown", 

598 observing_day=20191118, 

599 physical_filter="diffuser~ronchi170lpmm", 

600 pressure=None, 

601 relative_humidity=None, 

602 science_program="unknown", 

603 temperature=None, 

604 visit_id=6861884254113212214, 

605 )), 

606 ("latiss-AT_O_20200121_000045.yaml", 

607 dict(telescope="Rubin Auxiliary Telescope", 

608 instrument="LATISS", 

609 boresight_rotation_coord="sky", 

610 dark_time=100.0*u.s, 

611 detector_exposure_id=2020012100045, 

612 detector_group="RXX", 

613 detector_name="S00", 

614 detector_num=0, 

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

616 exposure_id=2020012100045, 

617 exposure_group="test", 

618 exposure_time=100.0*u.s, 

619 focus_z=0.560002659202*u.mm, 

620 group_counter_end=45, 

621 group_counter_start=45, 

622 has_simulated_content=False, 

623 object="UNKNOWN", 

624 observation_counter=45, 

625 observation_id="AT_O_20200121_000045", 

626 observation_type="engtest", 

627 observation_reason="unknown", 

628 observing_day=20200121, 

629 physical_filter="blank_bk7_wg05~empty", 

630 pressure=None, 

631 relative_humidity=None, 

632 science_program="unknown", 

633 temperature=None, 

634 visit_id=4702443654717948604, 

635 )), 

636 ("latiss-AT_O_20200128_000379.yaml", 

637 dict(telescope="Rubin Auxiliary Telescope", 

638 instrument="LATISS", 

639 boresight_rotation_coord="sky", 

640 dark_time=5.0*u.s, 

641 detector_exposure_id=2020012800379, 

642 detector_group="RXX", 

643 detector_name="S00", 

644 detector_num=0, 

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

646 exposure_id=2020012800379, 

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

648 exposure_time=5.0*u.s, 

649 focus_z=0.35416568455*u.mm, 

650 group_counter_end=379, 

651 group_counter_start=379, 

652 has_simulated_content=False, 

653 object="HD107696", 

654 observation_counter=379, 

655 observation_id="AT_O_20200128_000379", 

656 observation_type="science", 

657 observation_reason="science", 

658 observing_day=20200128, 

659 physical_filter="KPNO_406_828nm~empty", 

660 pressure=None, 

661 relative_humidity=None, 

662 science_program="unknown", 

663 temperature=None, 

664 visit_id=1602123521660000, 

665 # We have some timing discrepancies in the headers 

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

667 # the recorded AZ/EL/TIME. 

668 wcs_params=dict(max_sep=7.), 

669 )), 

670 ("latiss-AT_O_20220405_000348.yaml", 

671 dict(telescope="Rubin Auxiliary Telescope", 

672 instrument="LATISS", 

673 boresight_rotation_coord="sky", 

674 dark_time=30.3176279067993*u.s, 

675 detector_exposure_id=2022040500348, 

676 detector_group="RXX", 

677 detector_name="S00", 

678 detector_num=0, 

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

680 exposure_id=2022040500348, 

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

682 exposure_time=30.0*u.s, 

683 focus_z=0.0697081759572029*u.mm, 

684 group_counter_end=349, 

685 group_counter_start=348, 

686 has_simulated_content=False, 

687 object="LATISS_E6A_00000040", 

688 observation_counter=348, 

689 observation_id="AT_O_20220405_000348", 

690 observation_type="science", 

691 observation_reason="object", 

692 observing_day=20220405, 

693 physical_filter="SDSSr~empty", 

694 pressure=None, 

695 relative_humidity=None, 

696 science_program="LATISS_E6A", 

697 temperature=None, 

698 visit_id=2291434871810000, 

699 # We have some timing discrepancies in the headers 

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

701 # the recorded AZ/EL/TIME. 

702 wcs_params=dict(max_sep=7.), 

703 )), 

704 ("latiss-AT_O_20220405_000349.yaml", 

705 dict(telescope="Rubin Auxiliary Telescope", 

706 instrument="LATISS", 

707 boresight_rotation_coord="sky", 

708 dark_time=30.2387452125549*u.s, 

709 detector_exposure_id=2022040500349, 

710 detector_group="RXX", 

711 detector_name="S00", 

712 detector_num=0, 

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

714 exposure_id=2022040500349, 

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

716 exposure_time=30.0*u.s, 

717 focus_z=0.0697081759572029*u.mm, 

718 group_counter_end=349, 

719 group_counter_start=348, 

720 has_simulated_content=False, 

721 object="LATISS_E6A_00000040", 

722 observation_counter=349, 

723 observation_id="AT_O_20220405_000349", 

724 observation_type="science", 

725 observation_reason="object", 

726 observing_day=20220405, 

727 physical_filter="SDSSr~empty", 

728 pressure=None, 

729 relative_humidity=None, 

730 science_program="LATISS_E6A", 

731 temperature=None, 

732 visit_id=2291434871810000, 

733 # We have some timing discrepancies in the headers 

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

735 # the recorded AZ/EL/TIME. 

736 wcs_params=dict(max_sep=7.), 

737 )), 

738 ) 

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

740 for filename, expected in test_data: 

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

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

743 

744 # This translation should fail 

745 with self.assertRaises(KeyError): 

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

747 

748 def test_imsim_translator(self): 

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

750 dict(telescope="Simonyi Survey Telescope", 

751 instrument="LSSTCam-imSim", 

752 boresight_rotation_coord="sky", 

753 dark_time=0.0*u.s, 

754 detector_exposure_id=3010002036, 

755 detector_group="R11", 

756 detector_name="S00", 

757 detector_num=36, 

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

759 exposure_id=3010002, 

760 exposure_group="3010002", 

761 exposure_time=0.0*u.s, 

762 focus_z=0.0*u.mm, 

763 group_counter_end=3010002, 

764 group_counter_start=3010002, 

765 has_simulated_content=True, 

766 object="UNKNOWN", 

767 observation_counter=0, 

768 observation_id="3010002", 

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

770 observation_reason="imsim", 

771 observing_day=20211231, 

772 physical_filter="i", 

773 pressure=None, 

774 relative_humidity=40.0, 

775 science_program="42", 

776 temperature=None, 

777 visit_id=3010002, 

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

779 )), 

780 ("imsim-lsst_a_204595_R11_S02_i.yaml", 

781 dict(telescope="Simonyi Survey Telescope", 

782 instrument="LSSTCam-imSim", 

783 boresight_rotation_coord="sky", 

784 dark_time=30.0*u.s, 

785 detector_exposure_id=204595038, 

786 detector_group="R11", 

787 detector_name="S02", 

788 detector_num=38, 

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

790 exposure_id=204595, 

791 exposure_group="204595", 

792 exposure_time=30.0*u.s, 

793 focus_z=0.0*u.mm, 

794 group_counter_end=204595, 

795 group_counter_start=204595, 

796 has_simulated_content=True, 

797 object="UNKNOWN", 

798 observation_counter=0, 

799 observation_id="204595", 

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

801 observation_reason="imsim", 

802 observing_day=20221004, 

803 physical_filter="i_sim_1.4", 

804 pressure=None, 

805 relative_humidity=40.0, 

806 science_program="204595", 

807 temperature=None, 

808 visit_id=204595, 

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

810 )), 

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

812 dict(telescope="Simonyi Survey Telescope", 

813 instrument="LSSTCam-imSim", 

814 boresight_rotation_coord="sky", 

815 dark_time=30.0*u.s, 

816 detector_exposure_id=5000007042, 

817 detector_group="R11", 

818 detector_name="S20", 

819 detector_num=42, 

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

821 exposure_id=5000007, 

822 exposure_group="5000007", 

823 exposure_time=30.0*u.s, 

824 focus_z=0.0*u.mm, 

825 group_counter_end=5000007, 

826 group_counter_start=5000007, 

827 has_simulated_content=True, 

828 object="UNKNOWN", 

829 observation_counter=0, 

830 observation_id="5000007", 

831 observation_type="flat", 

832 observation_reason="imsim", 

833 observing_day=20220805, 

834 physical_filter="i", 

835 pressure=None, 

836 relative_humidity=40.0, 

837 science_program="5000007", 

838 temperature=None, 

839 visit_id=5000007, 

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

841 )), 

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

843 dict(telescope="Simonyi Survey Telescope", 

844 instrument="LSSTCam-imSim", 

845 boresight_rotation_coord="sky", 

846 dark_time=500.0*u.s, 

847 detector_exposure_id=4010003040, 

848 detector_group="R11", 

849 detector_name="S11", 

850 detector_num=40, 

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

852 exposure_id=4010003, 

853 exposure_group="4010003", 

854 exposure_time=500.0*u.s, 

855 focus_z=0.0*u.mm, 

856 group_counter_end=4010003, 

857 group_counter_start=4010003, 

858 has_simulated_content=True, 

859 object="UNKNOWN", 

860 observation_counter=0, 

861 observation_id="4010003", 

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

863 observation_reason="imsim", 

864 observing_day=20211231, 

865 physical_filter="i", 

866 pressure=None, 

867 relative_humidity=40.0, 

868 science_program="42", 

869 temperature=None, 

870 visit_id=4010003, 

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

872 )), 

873 ) 

874 for filename, expected in test_data: 

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

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

877 

878 def test_ts3_translator(self): 

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

880 dict(telescope=None, 

881 instrument="LSST-TS3", 

882 dark_time=44.631*u.s, 

883 detector_exposure_id=201811151255111433, 

884 detector_group="R433", 

885 detector_name="S00", 

886 detector_num=433, 

887 detector_serial="E2V-CCD250-411", 

888 exposure_id=201811151255111, 

889 exposure_group="201811151255111", 

890 exposure_time=44.631*u.s, 

891 focus_z=0.0*u.mm, 

892 group_counter_end=25, 

893 group_counter_start=25, 

894 has_simulated_content=False, 

895 observation_counter=25, 

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

897 observation_type="flat", 

898 observation_reason="lambda", 

899 observing_day=20181115, 

900 physical_filter="550CutOn", 

901 science_program="2018-11-15", 

902 visit_id=201811151255111)), 

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

904 dict(telescope=None, 

905 instrument="LSST-TS3", 

906 dark_time=30.611*u.s, 

907 detector_exposure_id=201607220607067071, 

908 detector_group="R071", 

909 detector_name="S00", 

910 detector_num=71, 

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

912 exposure_id=201607220607067, 

913 exposure_group="201607220607067", 

914 exposure_time=30.611*u.s, 

915 focus_z=0.0*u.mm, 

916 group_counter_end=67, 

917 group_counter_start=67, 

918 has_simulated_content=False, 

919 observation_counter=67, 

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

921 observation_type="flat", 

922 observation_reason="lambda", 

923 observing_day=20160721, 

924 physical_filter="550CutOn", 

925 science_program="2016-07-22", 

926 visit_id=201607220607067)), 

927 ) 

928 for filename, expected in test_data: 

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

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

931 

932 def test_ts8_translator(self): 

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

934 dict(telescope=None, 

935 instrument="LSST-TS8", 

936 dark_time=0.0*u.s, 

937 detector_exposure_id=201807241041568067, 

938 detector_group="RTM-010", 

939 detector_name="S11", 

940 detector_num=67, 

941 detector_serial="E2V-CCD250-179", 

942 exposure_id=201807241041568, 

943 exposure_group="201807241041568", 

944 exposure_time=0.0*u.s, 

945 focus_z=0.0*u.mm, 

946 group_counter_end=24, 

947 group_counter_start=24, 

948 has_simulated_content=False, 

949 observation_counter=24, 

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

951 observation_type="bias", 

952 observation_reason="lambda", 

953 observing_day=20180724, 

954 physical_filter="y", 

955 science_program="6006D", 

956 visit_id=201807241041568)), 

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

958 dict(telescope=None, 

959 instrument="LSST-TS8", 

960 dark_time=21.913*u.s, 

961 detector_exposure_id=201807241028453065, 

962 detector_group="RTM-010", 

963 detector_name="S02", 

964 detector_num=65, 

965 detector_serial="E2V-CCD250-200", 

966 exposure_id=201807241028453, 

967 exposure_group="201807241028453", 

968 exposure_time=21.913*u.s, 

969 focus_z=0.0*u.mm, 

970 group_counter_end=17, 

971 group_counter_start=17, 

972 has_simulated_content=False, 

973 observation_counter=17, 

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

975 observation_type="flat", 

976 observation_reason="lambda", 

977 observing_day=20180724, 

978 physical_filter="z", 

979 science_program="6006D", 

980 visit_id=201807241028453)), 

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

982 dict(telescope=None, 

983 instrument="LSST-TS8", 

984 dark_time=300.0*u.s, 

985 detector_exposure_id=201712151140062027, 

986 detector_group="RTM-005", 

987 detector_name="S00", 

988 detector_num=27, 

989 detector_serial="E2V-CCD250-220", 

990 exposure_id=201712151140062, 

991 exposure_group="201712151140062", 

992 exposure_time=300.0*u.s, 

993 focus_z=0.0*u.mm, 

994 group_counter_end=94, 

995 group_counter_start=94, 

996 has_simulated_content=False, 

997 observation_counter=94, 

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

999 observation_type="fe55", 

1000 observation_reason="fe55", 

1001 observing_day=20171215, 

1002 physical_filter="i", 

1003 science_program="6288", 

1004 visit_id=201712151140062)), 

1005 ) 

1006 for filename, expected in test_data: 

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

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

1009 

1010 def test_ucdcam_translator(self): 

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

1012 dict(telescope=None, 

1013 instrument="LSST-UCDCam", 

1014 dark_time=0.5*u.s, 

1015 detector_exposure_id=201812052331480, 

1016 detector_group="R00", 

1017 detector_name="S00", 

1018 detector_num=0, 

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

1020 exposure_id=20181205233148, 

1021 exposure_group="20181205233148", 

1022 exposure_time=0.5*u.s, 

1023 focus_z=0.0*u.mm, 

1024 group_counter_end=100, 

1025 group_counter_start=100, 

1026 has_simulated_content=False, 

1027 observation_counter=100, 

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

1029 observation_type="flat", 

1030 observation_reason="flat", 

1031 observing_day=20181205, 

1032 physical_filter="r", 

1033 science_program="2018-12-05", 

1034 visit_id=20181205233148)), 

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

1036 dict(telescope=None, 

1037 instrument="LSST-UCDCam", 

1038 dark_time=0.5*u.s, 

1039 detector_exposure_id=201805301503552, 

1040 detector_group="R02", 

1041 detector_name="S00", 

1042 detector_num=2, 

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

1044 exposure_id=20180530150355, 

1045 exposure_group="20180530150355", 

1046 exposure_time=0.5*u.s, 

1047 focus_z=0.0*u.mm, 

1048 group_counter_end=100, 

1049 group_counter_start=100, 

1050 has_simulated_content=False, 

1051 observation_counter=100, 

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

1053 observation_type="flat", 

1054 observation_reason="flat", 

1055 observing_day=20180530, 

1056 physical_filter="r", 

1057 science_program="2018-05-30", 

1058 visit_id=20180530150355)), 

1059 ) 

1060 for filename, expected in test_data: 

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

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

1063 

1064 def test_checker(self): 

1065 filename = "latiss-future.yaml" 

1066 from astro_metadata_translator.tests import read_test_file 

1067 from astro_metadata_translator import ObservationInfo 

1068 header = read_test_file(filename, self.datadir) 

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

1070 self.assertTrue(obsInfo) 

1071 

1072 def test_fix_header(self): 

1073 from astro_metadata_translator import fix_header 

1074 from astro_metadata_translator.tests import read_test_file 

1075 # Test that header fix up is working 

1076 # Not all headers are used in metadata translation 

1077 test_data = ( 

1078 ("latiss-AT_O_20210212_000006.yaml", 

1079 dict(RASTART=260.024385071917)), 

1080 ("latiss-AT_O_20210210_000011.yaml", 

1081 dict(RASTART=355.41750341182313)), 

1082 ) 

1083 for filename, expected in test_data: 

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

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

1086 modified = fix_header(header) 

1087 self.assertTrue(modified) 

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

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

1090 

1091 

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

1093 unittest.main()