Coverage for tests/test_translator.py: 16%

97 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-03-28 04:13 -0700

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 warnings 

25import astropy.units as u 

26import astropy.units.cds as cds 

27from astropy.io.fits.verify import VerifyWarning 

28 

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

30from astro_metadata_translator.tests import MetadataAssertHelper 

31 

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

33 

34 

35class LsstMetadataTranslatorTestCase(unittest.TestCase, MetadataAssertHelper): 

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

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

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

39 

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

41 

42 def test_lsstCam_translator(self): 

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

44 dict(telescope="Simonyi Survey Telescope", 

45 instrument="LSSTCam", 

46 boresight_rotation_coord="unknown", 

47 dark_time=0.0*u.s, 

48 detector_exposure_id=0x269200011d, 

49 detector_group="R10", 

50 detector_name="S02", 

51 detector_num=29, 

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

53 exposure_id=3019031900001, 

54 exposure_group="3019031900001", 

55 exposure_time=0.0*u.s, 

56 focus_z=0.0*u.mm, 

57 group_counter_end=1, 

58 group_counter_start=1, 

59 has_simulated_content=False, 

60 object="UNKNOWN", 

61 observation_counter=1, 

62 observation_id="MC_C_20190319_000001", 

63 observation_type="bias", 

64 observation_reason="bias", 

65 observing_day=20190319, 

66 physical_filter="unknown", 

67 pressure=None, 

68 relative_humidity=None, 

69 science_program="unknown", 

70 temperature=None, 

71 visit_id=3019031900001)), 

72 ("lsstCam-MC_C_20190319_000001_R22_S21.yaml", 

73 dict(telescope="Simonyi Survey Telescope", 

74 instrument="LSSTCam", 

75 boresight_rotation_coord="unknown", 

76 dark_time=0.0*u.s, 

77 detector_exposure_id=0x2692000161, 

78 detector_group="R22", 

79 detector_name="S21", 

80 detector_num=97, 

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

82 exposure_id=3019031900001, 

83 exposure_group="3019031900001", 

84 exposure_time=0.0*u.s, 

85 focus_z=0.0*u.mm, 

86 group_counter_end=1, 

87 group_counter_start=1, 

88 has_simulated_content=False, 

89 object="UNKNOWN", 

90 observation_counter=1, 

91 observation_id="MC_C_20190319_000001", 

92 observation_type="bias", 

93 observation_reason="bias", 

94 observing_day=20190319, 

95 physical_filter="unknown", 

96 pressure=None, 

97 relative_humidity=None, 

98 science_program="unknown", 

99 temperature=None, 

100 visit_id=3019031900001)), 

101 ("lsstCam-MC_C_20190322_000002_R10_S22.yaml", 

102 dict(telescope="Simonyi Survey Telescope", 

103 instrument="LSSTCam", 

104 boresight_rotation_coord="unknown", 

105 dark_time=1.0*u.s, 

106 detector_exposure_id=0x2693800223, 

107 detector_group="R10", 

108 detector_name="S22", 

109 detector_num=35, 

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

111 exposure_id=3019032200002, 

112 exposure_group="3019032200002", 

113 exposure_time=1.0*u.s, 

114 focus_z=0.0*u.mm, 

115 group_counter_end=2, 

116 group_counter_start=2, 

117 has_simulated_content=False, 

118 object="UNKNOWN", 

119 observation_counter=2, 

120 observation_id="MC_C_20190322_000002", 

121 observation_type="flat", 

122 observation_reason="flat", 

123 observing_day=20190322, 

124 physical_filter="SDSSi~ND_OD0.5", 

125 pressure=None, 

126 relative_humidity=None, 

127 science_program="6489D", 

128 temperature=None, 

129 visit_id=3019032200002)), 

130 ("lsstCam-MC_C_20190406_000643_R10_S00.yaml", 

131 dict(telescope="Simonyi Survey Telescope", 

132 instrument="LSSTCam", 

133 boresight_rotation_coord="unknown", 

134 dark_time=1007.422*u.s, 

135 detector_exposure_id=0x269b02831b, 

136 detector_group="R10", 

137 detector_name="S00", 

138 detector_num=27, 

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

140 exposure_id=3019040600643, 

141 exposure_group="3019040600643", 

142 exposure_time=999.99*u.s, 

143 focus_z=0.0*u.mm, 

144 group_counter_end=643, 

145 group_counter_start=643, 

146 has_simulated_content=False, 

147 object="UNKNOWN", 

148 observation_counter=643, 

149 observation_id="MC_C_20190406_000643", 

150 observation_type="flat", 

151 observation_reason="lambda", 

152 observing_day=20190406, 

153 physical_filter="950nm", 

154 pressure=None, 

155 relative_humidity=None, 

156 science_program="6549D", 

157 temperature=None, 

158 visit_id=3019040600643)), 

159 ("lsstCam-faked-future-ccs.yaml", # Old CCS observation with date in future for exp_id 

160 dict(telescope="Simonyi Survey Telescope", 

161 instrument="LSSTCam", 

162 boresight_rotation_coord="unknown", 

163 dark_time=0.0*u.s, 

164 detector_exposure_id=0xdb480011d, 

165 detector_group="R10", 

166 detector_name="S02", 

167 detector_num=29, 

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

169 exposure_id=2029031900001, 

170 exposure_group="2029031900001", 

171 exposure_time=0.0*u.s, 

172 focus_z=0.0*u.mm, 

173 group_counter_end=1, 

174 group_counter_start=1, 

175 has_simulated_content=False, 

176 object="UNKNOWN", 

177 observation_counter=1, 

178 observation_id="MC_C_20190319_000001", 

179 observation_type="bias", 

180 observation_reason="bias", 

181 observing_day=20290319, 

182 physical_filter="unknown", 

183 pressure=None, 

184 relative_humidity=None, 

185 science_program="unknown", 

186 temperature=None, 

187 visit_id=2029031900001)), 

188 ("lsstCam-MC_C_20231107_000078_R01_S01.json", 

189 dict(telescope="Simonyi Survey Telescope", 

190 instrument="LSSTCam", 

191 boresight_rotation_coord="unknown", 

192 dark_time=0.092*u.s, 

193 detector_exposure_id=0x9e1004e01, 

194 detector_group="R01", 

195 detector_name="S01", 

196 detector_num=1, 

197 detector_serial="ITL-3800C-226", 

198 exposure_id=2023110700078, 

199 exposure_group="2023110700078", 

200 exposure_time=0.0*u.s, 

201 focus_z=0.0*u.mm, 

202 group_counter_end=78, 

203 group_counter_start=78, 

204 has_simulated_content=False, 

205 object="UNKNOWN", 

206 observation_counter=78, 

207 observation_id="MC_C_20231107_000078", 

208 observation_type="bias", 

209 observation_reason="bot_persistence", 

210 observing_day=20231107, 

211 physical_filter="ph_5", 

212 pressure=None, 

213 relative_humidity=None, 

214 science_program="13518", 

215 temperature=None, 

216 visit_id=2023110700078)), 

217 ) 

218 for filename, expected in test_data: 

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

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

221 

222 def test_phoSimLsstCam_translator(self): 

223 test_data = (("lsstCam-MC_H_20100217_000032_R22_S00.yaml", 

224 dict(telescope="Simonyi Survey Telescope", 

225 instrument="LSSTCam", 

226 boresight_rotation_coord="sky", 

227 dark_time=15.0*u.s, 

228 detector_exposure_id=0x401780205a, 

229 detector_group="R22", 

230 detector_name="S00", 

231 detector_num=90, 

232 detector_serial="E2V-CCD250-369", 

233 detector_unique_name="R22_S00", 

234 exposure_group="4010021700032", 

235 exposure_id=4010021700032, 

236 exposure_time=15.0*u.s, 

237 focus_z=0.0*u.mm, 

238 group_counter_end=32, 

239 group_counter_start=32, 

240 has_simulated_content=True, 

241 object="UNKNOWN", 

242 observation_counter=32, 

243 observation_id="MC_H_20100217_000032", 

244 observation_reason="phosim", 

245 observation_type="science", 

246 observing_day=20100217, 

247 physical_filter="g", 

248 pressure=None, 

249 relative_humidity=None, 

250 science_program="9006001", 

251 temperature=None, 

252 visit_id=4010021700032)), 

253 ) 

254 for filename, expected in test_data: 

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

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

257 check_wcs=False, **expected) 

258 

259 def test_comCam_translator(self): 

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

261 dict(telescope="Simonyi Survey Telescope", 

262 instrument="LSSTComCam", 

263 boresight_rotation_coord="unknown", 

264 dark_time=0.398*u.s, 

265 detector_exposure_id=0x26b6000100, 

266 detector_group="R22", 

267 detector_name="S00", 

268 detector_num=0, 

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

270 exposure_id=3019053000001, 

271 exposure_group="3019053000001", 

272 exposure_time=0.0*u.s, 

273 focus_z=0.0*u.mm, 

274 group_counter_end=1, 

275 group_counter_start=1, 

276 has_simulated_content=False, 

277 object="UNKNOWN", 

278 observation_counter=1, 

279 observation_id="CC_C_20190530_000001", 

280 observation_type="bias", 

281 observation_reason="bias", 

282 observing_day=20190530, 

283 physical_filter="unknown", 

284 pressure=None, 

285 relative_humidity=None, 

286 science_program="unknown", 

287 temperature=None, 

288 visit_id=3019053000001)), 

289 ("comCam-CC_C_20190526_000223_R22_S01.yaml", 

290 dict(telescope="Simonyi Survey Telescope", 

291 instrument="LSSTComCam", 

292 boresight_rotation_coord="unknown", 

293 dark_time=0.034*u.s, 

294 detector_exposure_id=0x26b400df01, 

295 detector_group="R22", 

296 detector_name="S01", 

297 detector_num=1, 

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

299 exposure_id=3019052600223, 

300 exposure_group="3019052600223", 

301 exposure_time=0.0*u.s, 

302 focus_z=0.0*u.mm, 

303 group_counter_end=223, 

304 group_counter_start=223, 

305 has_simulated_content=False, 

306 object="UNKNOWN", 

307 observation_counter=223, 

308 observation_id="CC_C_20190526_000223", 

309 observation_type="bias", 

310 observation_reason="dark", 

311 observing_day=20190526, 

312 physical_filter="unknown", 

313 pressure=None, 

314 relative_humidity=None, 

315 science_program="unknown", 

316 temperature=None, 

317 visit_id=3019052600223)), 

318 ) 

319 for filename, expected in test_data: 

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

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

322 

323 def test_comCamSim_translator(self): 

324 test_data = (("comCamSim-IM_P_20240117_000000_R22_S00.yaml", 

325 dict(telescope="Simonyi Survey Telescope", 

326 instrument="LSSTComCamSim", 

327 boresight_rotation_coord="unknown", 

328 dark_time=0.0*u.s, 

329 detector_group="R22", 

330 detector_name="S00", 

331 detector_num=0, 

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

333 exposure_id=5024011700000, 

334 exposure_group="5024011700000", 

335 exposure_time=0.0*u.s, 

336 focus_z=0.0 * u.mm, 

337 group_counter_end=5024011700000, 

338 group_counter_start=5024011700000, 

339 has_simulated_content=True, 

340 object="UNKNOWN", 

341 observation_counter=0, 

342 observation_id="IM_P_20240117_000000", 

343 observation_type="bias", 

344 observation_reason="calibration", 

345 observing_day=20240117, 

346 physical_filter="r_03", 

347 pressure=None, 

348 relative_humidity=None, 

349 science_program="calibration", 

350 temperature=None, 

351 visit_id=5024011700000, 

352 )), 

353 ("comCamSim-CC_S_20240321_000093_R22_S22.yaml", 

354 dict(telescope="Simonyi Survey Telescope", 

355 instrument="LSSTComCamSim", 

356 boresight_rotation_coord="sky", 

357 dark_time=33.0546 * u.s, 

358 detector_group="R22", 

359 detector_name="S22", 

360 detector_num=8, 

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

362 exposure_id=7024032100093, 

363 exposure_group="2024-03-22T03:41:54.994", 

364 exposure_time=30.0 * u.s, 

365 focus_z=0.0 * u.mm, 

366 group_counter_end=93, 

367 group_counter_start=93, 

368 has_simulated_content=True, 

369 object="TEST", 

370 observation_counter=93, 

371 observation_id="CC_S_20240321_000093", 

372 observation_type="science", 

373 observation_reason="object", 

374 observing_day=20240321, 

375 physical_filter="r_03", 

376 pressure=None, 

377 relative_humidity=None, 

378 science_program="unknown", 

379 temperature=None, 

380 visit_id=2910085149940000, 

381 )), 

382 ) 

383 for filename, expected in test_data: 

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

385 self.assertObservationInfoFromYaml( 

386 filename, dir=self.datadir, check_wcs=False, **expected 

387 ) 

388 

389 def test_phoSimComCam_translator(self): 

390 test_data = (("comCam-CC_H_20100217_006001_R22_S00.yaml", 

391 dict(telescope="Simonyi Survey Telescope", 

392 instrument="LSSTComCam", 

393 boresight_rotation_coord="sky", 

394 dark_time=1.0*u.s, 

395 detector_exposure_id=0x4017977100, 

396 detector_group="R22", 

397 detector_name="S00", 

398 detector_num=0, 

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

400 exposure_id=4010021706001, 

401 exposure_group="4010021706001", 

402 exposure_time=1.0*u.s, 

403 focus_z=0.0*u.mm, 

404 group_counter_end=6001, 

405 group_counter_start=6001, 

406 has_simulated_content=True, 

407 object="UNKNOWN", 

408 observation_counter=6001, 

409 observation_id="CC_H_20100217_006001", 

410 observation_type="science", 

411 observation_reason="test", 

412 observing_day=20100217, 

413 physical_filter="g_01", 

414 pressure=None, 

415 relative_humidity=None, 

416 science_program="9006001", 

417 temperature=None, 

418 visit_id=4010021706001)), 

419 ) 

420 for filename, expected in test_data: 

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

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

423 check_wcs=False, **expected) 

424 

425 def test_phosim_translator(self): 

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

427 dict(telescope="Simonyi Survey Telescope", 

428 instrument="LSSTCam-PhoSim", 

429 boresight_rotation_coord="sky", 

430 dark_time=30.0*u.s, 

431 detector_exposure_id=204595038, 

432 detector_group="R11", 

433 detector_name="S02", 

434 detector_num=38, 

435 detector_serial="R11_S02", 

436 exposure_id=204595, 

437 exposure_group="204595", 

438 exposure_time=30.0*u.s, 

439 focus_z=0.0*u.mm, 

440 group_counter_end=204595, 

441 group_counter_start=204595, 

442 has_simulated_content=True, 

443 object="UNKNOWN", 

444 observation_counter=0, 

445 observation_id="204595", 

446 observation_type="science", 

447 observation_reason="phosim", 

448 observing_day=20221005, 

449 physical_filter="i", 

450 pressure=520.0*cds.mmHg, 

451 relative_humidity=40.0, 

452 science_program="204595", 

453 temperature=20.0*u.deg_C, 

454 visit_id=204595, 

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

456 ) 

457 for filename, expected in test_data: 

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

459 with warnings.catch_warnings(): 

460 # Avoid warnings from too-long FITS header keys. 

461 warnings.simplefilter("ignore", VerifyWarning) 

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

463 

464 def test_latiss_translator(self): 

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

466 dict(telescope="Rubin Auxiliary Telescope", 

467 instrument="LATISS", 

468 boresight_rotation_coord="unknown", 

469 dark_time=27.0*u.s, 

470 detector_exposure_id=0x2638004100, 

471 detector_group="RXX", 

472 detector_name="S00", 

473 detector_num=0, 

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

475 exposure_id=3018092000065, 

476 exposure_group="3018092000065", 

477 exposure_time=27.0*u.s, 

478 focus_z=0.0*u.mm, 

479 group_counter_end=65, 

480 group_counter_start=65, 

481 has_simulated_content=False, 

482 object="UNKNOWN", 

483 observation_counter=65, 

484 observation_id="AT_C_20180920_000065", 

485 observation_type="unknown", 

486 observation_reason="unknown", 

487 observing_day=20180920, 

488 physical_filter="unknown~unknown", 

489 pressure=None, 

490 relative_humidity=None, 

491 science_program="unknown", 

492 temperature=None, 

493 visit_id=3018092000065, 

494 )), 

495 ("latiss-AT_O_20190306_000014.yaml", 

496 dict(telescope="Rubin Auxiliary Telescope", 

497 instrument="LATISS", 

498 boresight_rotation_coord="unknown", 

499 dark_time=1.06*u.s, 

500 detector_exposure_id=0x68b800e00, 

501 detector_group="RXX", 

502 detector_name="S00", 

503 detector_num=0, 

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

505 exposure_id=2019030600014, 

506 exposure_group="2019030600014", 

507 exposure_time=1.06*u.s, 

508 focus_z=0.0*u.mm, 

509 group_counter_end=14, 

510 group_counter_start=14, 

511 has_simulated_content=False, 

512 object="UNKNOWN", 

513 observation_counter=14, 

514 observation_id="AT_O_20190306_000014", 

515 observation_type="unknown", 

516 observation_reason="unknown", 

517 observing_day=20190306, 

518 physical_filter="unknown~unknown", 

519 pressure=None, 

520 relative_humidity=None, 

521 science_program="unknown", 

522 temperature=None, 

523 visit_id=2019030600014, 

524 )), 

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

526 dict(telescope="Rubin Auxiliary Telescope", 

527 instrument="LATISS", 

528 boresight_rotation_coord="unknown", 

529 dark_time=0.0*u.s, 

530 detector_exposure_id=0x697001600, 

531 detector_group="RXX", 

532 detector_name="S00", 

533 detector_num=0, 

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

535 exposure_id=2019032900022, 

536 exposure_group="2019032900022", 

537 exposure_time=0.0*u.s, 

538 focus_z=0.0*u.mm, 

539 group_counter_end=22, 

540 group_counter_start=22, 

541 has_simulated_content=False, 

542 object="UNKNOWN", 

543 observation_counter=22, 

544 observation_id="AT_O_20190329_000022", 

545 observation_type="bias", 

546 observation_reason="unknown", 

547 observing_day=20190329, 

548 physical_filter="unknown~unknown", 

549 pressure=None, 

550 relative_humidity=None, 

551 science_program="unknown", 

552 temperature=None, 

553 visit_id=2019032900022, 

554 )), 

555 ("latiss-future.yaml", 

556 dict(telescope="Rubin Auxiliary Telescope", 

557 instrument="LATISS", 

558 boresight_rotation_coord="unknown", 

559 dark_time=0.0*u.s, 

560 detector_exposure_id=0x74e001600, 

561 detector_group="RXX", 

562 detector_name="S00", 

563 detector_num=0, 

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

565 exposure_id=2020032900022, 

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

567 exposure_time=0.0*u.s, 

568 focus_z=0.0*u.mm, 

569 group_counter_end=22, 

570 group_counter_start=22, 

571 has_simulated_content=False, 

572 object="UNKNOWN", 

573 observation_counter=22, 

574 observation_id="AT_X_20200329_000022", 

575 observation_type="bias", 

576 observation_reason="unknown", 

577 observing_day=20200329, 

578 physical_filter="unknown~unknown", 

579 pressure=None, 

580 relative_humidity=None, 

581 science_program="unknown", 

582 temperature=None, 

583 visit_id=1654305000120024, 

584 )), 

585 ("latiss-AT_O_20190915_000037.yaml", 

586 dict(telescope="Rubin Auxiliary Telescope", 

587 instrument="LATISS", 

588 boresight_rotation_coord="unknown", 

589 dark_time=0.0*u.s, 

590 detector_exposure_id=0x6ec002500, 

591 detector_group="RXX", 

592 detector_name="S00", 

593 detector_num=0, 

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

595 exposure_id=2019091500037, 

596 exposure_group="bias_0027_0100", 

597 exposure_time=0.0*u.s, 

598 focus_z=0.0*u.mm, 

599 group_counter_end=37, 

600 group_counter_start=37, 

601 has_simulated_content=False, 

602 object="UNKNOWN", 

603 observation_counter=37, 

604 observation_id="AT_O_20190915_000037", 

605 observation_type="bias", 

606 observation_reason="unknown", 

607 observing_day=20190915, 

608 physical_filter="unknown~unknown", 

609 pressure=None, 

610 relative_humidity=None, 

611 science_program="unknown", 

612 temperature=None, 

613 visit_id=3575576933793566714, 

614 )), 

615 ("latiss-AT_O_20191031_000004.yaml", 

616 dict(telescope="Rubin Auxiliary Telescope", 

617 instrument="LATISS", 

618 boresight_rotation_coord="unknown", 

619 dark_time=3.0*u.s, 

620 detector_exposure_id=0x703000400, 

621 detector_group="RXX", 

622 detector_name="S00", 

623 detector_num=0, 

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

625 exposure_id=2019103100004, 

626 exposure_group="TEST01", 

627 exposure_time=3.0*u.s, 

628 focus_z=0.0*u.mm, 

629 group_counter_end=4, 

630 group_counter_start=4, 

631 has_simulated_content=False, 

632 object="UNKNOWN", 

633 observation_counter=4, 

634 observation_id="AT_O_20191031_000004", 

635 observation_type="engtest", 

636 observation_reason="unknown", 

637 observing_day=20191031, 

638 physical_filter="unknown~unknown", 

639 pressure=None, 

640 relative_humidity=None, 

641 science_program="unknown", 

642 temperature=None, 

643 visit_id=1123819875881954006, 

644 )), 

645 ("latiss-AT_O_20191104_000003.yaml", 

646 dict(telescope="Rubin Auxiliary Telescope", 

647 instrument="LATISS", 

648 boresight_rotation_coord="unknown", 

649 dark_time=3.0*u.s, 

650 detector_exposure_id=0x705000300, 

651 detector_group="RXX", 

652 detector_name="S00", 

653 detector_num=0, 

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

655 exposure_id=2019110400003, 

656 exposure_group="TEST01", 

657 exposure_time=3.0*u.s, 

658 focus_z=0.0*u.mm, 

659 group_counter_end=3, 

660 group_counter_start=3, 

661 has_simulated_content=False, 

662 object="UNKNOWN", 

663 observation_counter=3, 

664 observation_id="AT_O_20191104_000003", 

665 observation_type="engtest", 

666 observation_reason="unknown", 

667 observing_day=20191104, 

668 physical_filter="unknown~unknown", 

669 pressure=None, 

670 relative_humidity=None, 

671 science_program="unknown", 

672 temperature=None, 

673 visit_id=1123819875881954006, 

674 )), 

675 ("latiss-AT_O_20191113_000061.yaml", 

676 dict(telescope="Rubin Auxiliary Telescope", 

677 instrument="LATISS", 

678 boresight_rotation_coord="unknown", 

679 dark_time=0.5*u.s, 

680 detector_exposure_id=0x709803d00, 

681 detector_group="RXX", 

682 detector_name="S00", 

683 detector_num=0, 

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

685 exposure_id=2019111300061, 

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

687 exposure_time=0.5*u.s, 

688 focus_z=0.0*u.mm, 

689 group_counter_end=61, 

690 group_counter_start=61, 

691 has_simulated_content=False, 

692 object="UNKNOWN", 

693 observation_counter=61, 

694 observation_id="AT_O_20191113_000061", 

695 observation_type="engtest", 

696 observation_reason="unknown", 

697 observing_day=20191113, 

698 physical_filter="empty~ronchi90lpmm", 

699 pressure=None, 

700 relative_humidity=None, 

701 science_program="unknown", 

702 temperature=None, 

703 visit_id=1892608703001301325, 

704 )), 

705 ("latiss-AT_O_20191118_000011.yaml", 

706 dict(telescope="Rubin Auxiliary Telescope", 

707 instrument="LATISS", 

708 boresight_rotation_coord="unknown", 

709 dark_time=15.0*u.s, 

710 detector_exposure_id=0x70c000b00, 

711 detector_group="RXX", 

712 detector_name="S00", 

713 detector_num=0, 

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

715 exposure_id=2019111800011, 

716 exposure_group="dark_0002_0005", 

717 exposure_time=15.0*u.s, 

718 focus_z=0.0*u.mm, 

719 group_counter_end=11, 

720 group_counter_start=11, 

721 has_simulated_content=False, 

722 object="UNKNOWN", 

723 observation_counter=11, 

724 observation_id="AT_O_20191118_000011", 

725 observation_type="dark", 

726 observation_reason="unknown", 

727 observing_day=20191118, 

728 physical_filter="diffuser~ronchi170lpmm", 

729 pressure=None, 

730 relative_humidity=None, 

731 science_program="unknown", 

732 temperature=None, 

733 visit_id=6861884254113212214, 

734 )), 

735 ("latiss-AT_O_20200121_000045.yaml", 

736 dict(telescope="Rubin Auxiliary Telescope", 

737 instrument="LATISS", 

738 boresight_rotation_coord="sky", 

739 dark_time=100.0*u.s, 

740 detector_exposure_id=0x72c002d00, 

741 detector_group="RXX", 

742 detector_name="S00", 

743 detector_num=0, 

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

745 exposure_id=2020012100045, 

746 exposure_group="test", 

747 exposure_time=100.0*u.s, 

748 focus_z=0.560002659202*u.mm, 

749 group_counter_end=45, 

750 group_counter_start=45, 

751 has_simulated_content=False, 

752 object="UNKNOWN", 

753 observation_counter=45, 

754 observation_id="AT_O_20200121_000045", 

755 observation_type="engtest", 

756 observation_reason="unknown", 

757 observing_day=20200121, 

758 physical_filter="blank_bk7_wg05~empty", 

759 pressure=None, 

760 relative_humidity=None, 

761 science_program="unknown", 

762 temperature=None, 

763 visit_id=4702443654717948604, 

764 check_altaz=True, 

765 )), 

766 ("latiss-AT_O_20200128_000379.yaml", 

767 dict(telescope="Rubin Auxiliary Telescope", 

768 instrument="LATISS", 

769 boresight_rotation_coord="sky", 

770 dark_time=5.0*u.s, 

771 detector_exposure_id=0x72f817b00, 

772 detector_group="RXX", 

773 detector_name="S00", 

774 detector_num=0, 

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

776 exposure_id=2020012800379, 

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

778 exposure_time=5.0*u.s, 

779 focus_z=0.35416568455*u.mm, 

780 group_counter_end=379, 

781 group_counter_start=379, 

782 has_simulated_content=False, 

783 object="HD107696", 

784 observation_counter=379, 

785 observation_id="AT_O_20200128_000379", 

786 observation_type="science", 

787 observation_reason="science", 

788 observing_day=20200128, 

789 physical_filter="KPNO_406_828nm~empty", 

790 pressure=None, 

791 relative_humidity=None, 

792 science_program="unknown", 

793 temperature=None, 

794 visit_id=1602123521660000, 

795 # We have some timing discrepancies in the headers 

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

797 # the recorded AZ/EL/TIME. 

798 wcs_params=dict(max_sep=7.), 

799 )), 

800 ("latiss-AT_O_20220405_000348.yaml", 

801 dict(telescope="Rubin Auxiliary Telescope", 

802 instrument="LATISS", 

803 boresight_rotation_coord="sky", 

804 dark_time=30.3176279067993*u.s, 

805 detector_exposure_id=0x8be815c00, 

806 detector_group="RXX", 

807 detector_name="S00", 

808 detector_num=0, 

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

810 exposure_id=2022040500348, 

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

812 exposure_time=30.0*u.s, 

813 focus_z=0.0697081759572029*u.mm, 

814 group_counter_end=349, 

815 group_counter_start=348, 

816 has_simulated_content=False, 

817 object="LATISS_E6A_00000040", 

818 observation_counter=348, 

819 observation_id="AT_O_20220405_000348", 

820 observation_type="science", 

821 observation_reason="object", 

822 observing_day=20220405, 

823 physical_filter="SDSSr~empty", 

824 pressure=744.3*u.hPa, 

825 relative_humidity=19.0, 

826 science_program="LATISS_E6A", 

827 temperature=12.3*u.deg_C, 

828 visit_id=2291434871810000, 

829 # We have some timing discrepancies in the headers 

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

831 # the recorded AZ/EL/TIME. 

832 wcs_params=dict(max_sep=7.), 

833 )), 

834 ("latiss-AT_O_20220405_000349.yaml", 

835 dict(telescope="Rubin Auxiliary Telescope", 

836 instrument="LATISS", 

837 boresight_rotation_coord="sky", 

838 dark_time=30.2387452125549*u.s, 

839 detector_exposure_id=0x8be815d00, 

840 detector_group="RXX", 

841 detector_name="S00", 

842 detector_num=0, 

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

844 exposure_id=2022040500349, 

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

846 exposure_time=30.0*u.s, 

847 focus_z=0.0697081759572029*u.mm, 

848 group_counter_end=349, 

849 group_counter_start=348, 

850 has_simulated_content=False, 

851 object="LATISS_E6A_00000040", 

852 observation_counter=349, 

853 observation_id="AT_O_20220405_000349", 

854 observation_type="science", 

855 observation_reason="object", 

856 observing_day=20220405, 

857 physical_filter="SDSSr~empty", 

858 pressure=744.3*u.hPa, 

859 relative_humidity=19.0, 

860 science_program="LATISS_E6A", 

861 temperature=12.3*u.deg_C, 

862 visit_id=2291434871810000, 

863 # We have some timing discrepancies in the headers 

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

865 # the recorded AZ/EL/TIME. 

866 wcs_params=dict(max_sep=7.), 

867 )), 

868 ("latiss-AT_C_20220426_000004_R00_S00.yaml", 

869 dict(telescope="Rubin Auxiliary Telescope", 

870 instrument="LATISS", 

871 boresight_rotation_coord="unknown", 

872 dark_time=537.406*u.s, 

873 detector_exposure_id=0x28c9000400, 

874 detector_group="RXX", 

875 detector_name="S00", 

876 detector_num=0, 

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

878 exposure_id=3022042600004, 

879 exposure_group="3022042600004", 

880 exposure_time=-1.0*u.s, 

881 focus_z=0.0*u.mm, 

882 group_counter_end=4, 

883 group_counter_start=4, 

884 has_simulated_content=False, 

885 object="UNKNOWN", 

886 observation_counter=4, 

887 observation_id="AT_C_20220426_000004", 

888 observation_type="unknown", 

889 observation_reason="unknown", 

890 observing_day=20220426, 

891 physical_filter="unknown~unknown", 

892 pressure=None, 

893 relative_humidity=None, 

894 science_program="unknown", 

895 temperature=None, 

896 visit_id=3022042600004, 

897 )), 

898 ("latiss-AT_O_20230321_000053.yaml", 

899 dict(telescope="Rubin Auxiliary Telescope", 

900 instrument="LATISS", 

901 boresight_rotation_coord="unknown", 

902 dark_time=30.0126*u.s, 

903 detector_exposure_id=0x96d803500, 

904 detector_group="RXX", 

905 detector_name="S00", 

906 detector_num=0, 

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

908 exposure_id=2023032100053, 

909 exposure_group="2023-03-21T16:11:07.633", 

910 exposure_time=30.0*u.s, 

911 focus_z=0.0*u.mm, 

912 group_counter_end=53, 

913 group_counter_start=53, 

914 has_simulated_content=False, 

915 object="slew_icrs", 

916 observation_counter=53, 

917 observation_id="AT_O_20230321_000053", 

918 observation_type="dark", 

919 observation_reason="dark", 

920 observing_day=20230321, 

921 physical_filter="empty~empty", 

922 pressure=None, 

923 relative_humidity=None, 

924 science_program="unknown", 

925 temperature=None, 

926 visit_id=2593446676330000, 

927 check_altaz=True, 

928 )), 

929 ("latiss-AT_O_20230705_000379_R00_S00.json", 

930 dict(telescope="Rubin Auxiliary Telescope", 

931 instrument="LATISS", 

932 boresight_rotation_coord="sky", 

933 dark_time=30.2418*u.s, 

934 detector_exposure_id=0x9a2817b00, 

935 detector_group="RXX", 

936 detector_name="S00", 

937 detector_num=0, 

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

939 exposure_id=2023070500379, 

940 exposure_group="2023-07-06T04:53:15.609", 

941 exposure_time=30.0*u.s, 

942 focus_z=-0.008921561762690544*u.mm, 

943 group_counter_end=379, 

944 group_counter_start=379, 

945 has_simulated_content=False, 

946 object="HD165763", 

947 observation_counter=379, 

948 observation_id="AT_O_20230705_000379", 

949 observation_type="science", 

950 observation_reason="sitcom-857", 

951 observing_day=20230705, 

952 physical_filter="empty~holo4_003", 

953 pressure=777.80*u.hPa, 

954 relative_humidity=15.149999618530273, 

955 science_program="BLOCK-59", 

956 temperature=5.775000095367432*u.deg_C, 

957 visit_id=2685487956090000, 

958 check_altaz=True, 

959 )), 

960 ) 

961 with warnings.catch_warnings(): 

962 # Avoid warnings from too-long FITS header keys. 

963 warnings.simplefilter("ignore", VerifyWarning) 

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

965 for filename, expected in test_data: 

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

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

968 

969 # This translation should fail 

970 with self.assertRaises(KeyError): 

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

972 

973 def test_imsim_translator(self): 

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

975 dict(telescope="Simonyi Survey Telescope", 

976 instrument="LSSTCam-imSim", 

977 boresight_rotation_coord="sky", 

978 dark_time=0.0*u.s, 

979 detector_exposure_id=3010002036, 

980 detector_group="R11", 

981 detector_name="S00", 

982 detector_num=36, 

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

984 exposure_id=3010002, 

985 exposure_group="3010002", 

986 exposure_time=0.0*u.s, 

987 focus_z=0.0*u.mm, 

988 group_counter_end=3010002, 

989 group_counter_start=3010002, 

990 has_simulated_content=True, 

991 object="UNKNOWN", 

992 observation_counter=0, 

993 observation_id="3010002", 

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

995 observation_reason="imsim", 

996 observing_day=20220101, 

997 physical_filter="i", 

998 pressure=None, 

999 relative_humidity=40.0, 

1000 science_program="42", 

1001 temperature=None, 

1002 visit_id=3010002, 

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

1004 )), 

1005 ("imsim-lsst_a_204595_R11_S02_i.yaml", 

1006 dict(telescope="Simonyi Survey Telescope", 

1007 instrument="LSSTCam-imSim", 

1008 boresight_rotation_coord="sky", 

1009 dark_time=30.0*u.s, 

1010 detector_exposure_id=204595038, 

1011 detector_group="R11", 

1012 detector_name="S02", 

1013 detector_num=38, 

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

1015 exposure_id=204595, 

1016 exposure_group="204595", 

1017 exposure_time=30.0*u.s, 

1018 focus_z=0.0*u.mm, 

1019 group_counter_end=204595, 

1020 group_counter_start=204595, 

1021 has_simulated_content=True, 

1022 object="UNKNOWN", 

1023 observation_counter=0, 

1024 observation_id="204595", 

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

1026 observation_reason="imsim", 

1027 observing_day=20221005, 

1028 physical_filter="i_sim_1.4", 

1029 pressure=None, 

1030 relative_humidity=40.0, 

1031 science_program="204595", 

1032 temperature=None, 

1033 visit_id=204595, 

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

1035 )), 

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

1037 dict(telescope="Simonyi Survey Telescope", 

1038 instrument="LSSTCam-imSim", 

1039 boresight_rotation_coord="sky", 

1040 dark_time=30.0*u.s, 

1041 detector_exposure_id=5000007042, 

1042 detector_group="R11", 

1043 detector_name="S20", 

1044 detector_num=42, 

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

1046 exposure_id=5000007, 

1047 exposure_group="5000007", 

1048 exposure_time=30.0*u.s, 

1049 focus_z=0.0*u.mm, 

1050 group_counter_end=5000007, 

1051 group_counter_start=5000007, 

1052 has_simulated_content=True, 

1053 object="UNKNOWN", 

1054 observation_counter=0, 

1055 observation_id="5000007", 

1056 observation_type="flat", 

1057 observation_reason="imsim", 

1058 observing_day=20220806, 

1059 physical_filter="i", 

1060 pressure=None, 

1061 relative_humidity=40.0, 

1062 science_program="5000007", 

1063 temperature=None, 

1064 visit_id=5000007, 

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

1066 )), 

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

1068 dict(telescope="Simonyi Survey Telescope", 

1069 instrument="LSSTCam-imSim", 

1070 boresight_rotation_coord="sky", 

1071 dark_time=500.0*u.s, 

1072 detector_exposure_id=4010003040, 

1073 detector_group="R11", 

1074 detector_name="S11", 

1075 detector_num=40, 

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

1077 exposure_id=4010003, 

1078 exposure_group="4010003", 

1079 exposure_time=500.0*u.s, 

1080 focus_z=0.0*u.mm, 

1081 group_counter_end=4010003, 

1082 group_counter_start=4010003, 

1083 has_simulated_content=True, 

1084 object="UNKNOWN", 

1085 observation_counter=0, 

1086 observation_id="4010003", 

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

1088 observation_reason="imsim", 

1089 observing_day=20220101, 

1090 physical_filter="i", 

1091 pressure=None, 

1092 relative_humidity=40.0, 

1093 science_program="42", 

1094 temperature=None, 

1095 visit_id=4010003, 

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

1097 )), 

1098 ) 

1099 for filename, expected in test_data: 

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

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

1102 

1103 def test_ts3_translator(self): 

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

1105 dict(telescope=None, 

1106 instrument="LSST-TS3", 

1107 dark_time=44.631*u.s, 

1108 detector_exposure_id=201811151255111433, 

1109 detector_group="R433", 

1110 detector_name="S00", 

1111 detector_num=433, 

1112 detector_serial="E2V-CCD250-411", 

1113 exposure_id=201811151255111, 

1114 exposure_group="201811151255111", 

1115 exposure_time=44.631*u.s, 

1116 focus_z=0.0*u.mm, 

1117 group_counter_end=25, 

1118 group_counter_start=25, 

1119 has_simulated_content=False, 

1120 observation_counter=25, 

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

1122 observation_type="flat", 

1123 observation_reason="lambda", 

1124 observing_day=20181115, 

1125 physical_filter="550CutOn", 

1126 science_program="2018-11-15", 

1127 visit_id=201811151255111)), 

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

1129 dict(telescope=None, 

1130 instrument="LSST-TS3", 

1131 dark_time=30.611*u.s, 

1132 detector_exposure_id=201607220607067071, 

1133 detector_group="R071", 

1134 detector_name="S00", 

1135 detector_num=71, 

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

1137 exposure_id=201607220607067, 

1138 exposure_group="201607220607067", 

1139 exposure_time=30.611*u.s, 

1140 focus_z=0.0*u.mm, 

1141 group_counter_end=67, 

1142 group_counter_start=67, 

1143 has_simulated_content=False, 

1144 observation_counter=67, 

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

1146 observation_type="flat", 

1147 observation_reason="lambda", 

1148 observing_day=20160721, 

1149 physical_filter="550CutOn", 

1150 science_program="2016-07-22", 

1151 visit_id=201607220607067)), 

1152 ) 

1153 for filename, expected in test_data: 

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

1155 with warnings.catch_warnings(): 

1156 # Avoid warnings from too-long FITS header keys. 

1157 warnings.simplefilter("ignore", VerifyWarning) 

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

1159 

1160 def test_ts8_translator(self): 

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

1162 dict(telescope=None, 

1163 instrument="LSST-TS8", 

1164 dark_time=0.0*u.s, 

1165 detector_exposure_id=201807241041568067, 

1166 detector_group="RTM-010", 

1167 detector_name="S11", 

1168 detector_num=67, 

1169 detector_serial="E2V-CCD250-179", 

1170 exposure_id=201807241041568, 

1171 exposure_group="201807241041568", 

1172 exposure_time=0.0*u.s, 

1173 focus_z=0.0*u.mm, 

1174 group_counter_end=24, 

1175 group_counter_start=24, 

1176 has_simulated_content=False, 

1177 observation_counter=24, 

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

1179 observation_type="bias", 

1180 observation_reason="lambda", 

1181 observing_day=20180724, 

1182 physical_filter="y", 

1183 science_program="6006D", 

1184 visit_id=201807241041568)), 

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

1186 dict(telescope=None, 

1187 instrument="LSST-TS8", 

1188 dark_time=21.913*u.s, 

1189 detector_exposure_id=201807241028453065, 

1190 detector_group="RTM-010", 

1191 detector_name="S02", 

1192 detector_num=65, 

1193 detector_serial="E2V-CCD250-200", 

1194 exposure_id=201807241028453, 

1195 exposure_group="201807241028453", 

1196 exposure_time=21.913*u.s, 

1197 focus_z=0.0*u.mm, 

1198 group_counter_end=17, 

1199 group_counter_start=17, 

1200 has_simulated_content=False, 

1201 observation_counter=17, 

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

1203 observation_type="flat", 

1204 observation_reason="lambda", 

1205 observing_day=20180724, 

1206 physical_filter="z", 

1207 science_program="6006D", 

1208 visit_id=201807241028453)), 

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

1210 dict(telescope=None, 

1211 instrument="LSST-TS8", 

1212 dark_time=300.0*u.s, 

1213 detector_exposure_id=201712151140062027, 

1214 detector_group="RTM-005", 

1215 detector_name="S00", 

1216 detector_num=27, 

1217 detector_serial="E2V-CCD250-220", 

1218 exposure_id=201712151140062, 

1219 exposure_group="201712151140062", 

1220 exposure_time=300.0*u.s, 

1221 focus_z=0.0*u.mm, 

1222 group_counter_end=94, 

1223 group_counter_start=94, 

1224 has_simulated_content=False, 

1225 observation_counter=94, 

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

1227 observation_type="fe55", 

1228 observation_reason="fe55", 

1229 observing_day=20171215, 

1230 physical_filter="i", 

1231 science_program="6288", 

1232 visit_id=201712151140062)), 

1233 ("ts8-TS_C_20220711_000174_R22_S00.yaml", 

1234 dict(telescope=None, 

1235 instrument="LSST-TS8", 

1236 dark_time=210.315*u.s, 

1237 detector_exposure_id=202207111714459018, 

1238 detector_group="RTM-004", 

1239 detector_name="S00", 

1240 detector_num=18, 

1241 detector_serial="ITL-3800C-372", 

1242 exposure_id=202207111714459, 

1243 exposure_group="202207111714459", 

1244 exposure_time=210.0*u.s, 

1245 focus_z=0.0*u.mm, 

1246 group_counter_end=174, 

1247 group_counter_start=174, 

1248 has_simulated_content=False, 

1249 observation_counter=174, 

1250 observation_id="TS_C_20220711_000174", 

1251 observation_type="spot", 

1252 observation_reason="spot_flat", 

1253 observing_day=20220711, 

1254 physical_filter="unknown", 

1255 science_program="7074D", 

1256 visit_id=202207111714459)), 

1257 ("ts8-TS_C_20230512_000021_R22_S02.yaml", 

1258 dict(telescope=None, 

1259 instrument="LSST-TS8", 

1260 dark_time=15.165*u.s, 

1261 detector_exposure_id=202305121917591020, 

1262 detector_group="RTM-004", 

1263 detector_name="S02", 

1264 detector_num=20, 

1265 detector_serial="ITL-3800C-380", 

1266 exposure_id=202305121917591, 

1267 exposure_group="202305121917591", 

1268 exposure_time=15.0*u.s, 

1269 focus_z=0.0*u.mm, 

1270 group_counter_end=21, 

1271 group_counter_start=21, 

1272 has_simulated_content=False, 

1273 observation_counter=21, 

1274 observation_id="TS_C_20230512_000021", 

1275 observation_type="flat", 

1276 observation_reason="sflat_hi", 

1277 observing_day=20230512, 

1278 physical_filter="HIGH", 

1279 science_program="7187D", 

1280 visit_id=202305121917591)), 

1281 ("ts8-TS_C_20230512_000021_R22_S02-fixed.yaml", # Will not apply header fixups 

1282 dict(telescope=None, 

1283 instrument="LSST-TS8", 

1284 dark_time=15.165*u.s, 

1285 detector_exposure_id=202305121917591020, 

1286 detector_group="RTM-004", 

1287 detector_name="S02", 

1288 detector_num=20, 

1289 detector_serial="ITL-3800C-380", 

1290 exposure_id=202305121917591, 

1291 exposure_group="202305121917591", 

1292 exposure_time=15.0*u.s, 

1293 focus_z=0.0*u.mm, 

1294 group_counter_end=21, 

1295 group_counter_start=21, 

1296 has_simulated_content=False, 

1297 observation_counter=21, 

1298 observation_id="TS_C_20230512_000021", 

1299 observation_type="flat", 

1300 observation_reason="sflat_hi", 

1301 observing_day=20230512, 

1302 physical_filter="HIGH", 

1303 science_program="7187D", 

1304 visit_id=202305121917591)), 

1305 ("ts8-TS_C_20230523_000127_R22_S00.yaml", 

1306 dict(telescope=None, 

1307 instrument="LSST-TS8", 

1308 dark_time=15.16*u.s, 

1309 detector_exposure_id=202305231936194018, 

1310 detector_group="RTM-004", 

1311 detector_name="S00", 

1312 detector_num=18, 

1313 detector_serial="ITL-3800C-372", 

1314 exposure_id=202305231936194, 

1315 exposure_group="202305231936194", 

1316 exposure_time=15.0*u.s, 

1317 focus_z=0.0*u.mm, 

1318 group_counter_end=127, 

1319 group_counter_start=127, 

1320 has_simulated_content=False, 

1321 observation_counter=127, 

1322 observation_id="TS_C_20230523_000127", 

1323 observation_type="flat", 

1324 observation_reason="flat", 

1325 observing_day=20230523, 

1326 physical_filter="unknown", 

1327 science_program="7220D", 

1328 visit_id=202305231936194)), 

1329 ("ts8-TS_C_20230525_000041_R22_S00.yaml", 

1330 dict(telescope=None, 

1331 instrument="LSST-TS8", 

1332 dark_time=30.151*u.s, 

1333 detector_exposure_id=3023052500041018, 

1334 detector_group="RTM-004", 

1335 detector_name="S00", 

1336 detector_num=18, 

1337 detector_serial="ITL-3800C-372", 

1338 exposure_id=3023052500041, 

1339 exposure_group="3023052500041", 

1340 exposure_time=30.0*u.s, 

1341 focus_z=0.0*u.mm, 

1342 group_counter_end=41, 

1343 group_counter_start=41, 

1344 has_simulated_content=False, 

1345 observation_counter=41, 

1346 observation_id="TS_C_20230525_000041", 

1347 observation_type="flat", 

1348 observation_reason="flat", 

1349 observing_day=20230525, 

1350 physical_filter="unknown", 

1351 science_program="7227D", 

1352 visit_id=3023052500041)), 

1353 ) 

1354 for filename, expected in test_data: 

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

1356 with warnings.catch_warnings(): 

1357 # Avoid warnings from too-long FITS header keys. 

1358 warnings.simplefilter("ignore", VerifyWarning) 

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

1360 

1361 def test_ucdcam_translator(self): 

1362 test_data = (("UCD-E2V-CCD250-TS_C_20231031_000227_R21_S01.yaml", 

1363 dict(telescope=None, 

1364 instrument="LSST-UCDCam", 

1365 dark_time=2.07859*u.s, 

1366 detector_exposure_id=42370917130, 

1367 detector_group="R21", 

1368 detector_name="S01", 

1369 detector_num=10, 

1370 detector_serial="E2V-CCD250-112-09", 

1371 exposure_id=2023103100227, 

1372 exposure_group="2023103100227", 

1373 exposure_time=1.0*u.s, 

1374 focus_z=0.0*u.mm, 

1375 group_counter_end=227, 

1376 group_counter_start=227, 

1377 has_simulated_content=False, 

1378 observation_counter=227, 

1379 observation_id="TS_C_20231031_000227", 

1380 observation_type="flat", 

1381 observation_reason="flat", 

1382 observing_day=20231031, 

1383 physical_filter="r", 

1384 science_program="unknown", 

1385 visit_id=2023103100227)), 

1386 ("UCD-ITL-3800C-TS_C_20230730_000237_R22_S01.yaml", 

1387 dict(telescope=None, 

1388 instrument="LSST-UCDCam", 

1389 dark_time=3.082*u.s, 

1390 detector_exposure_id=179029732609, 

1391 detector_group="R22", 

1392 detector_name="S01", 

1393 detector_num=1, 

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

1395 exposure_id=3023073000237, 

1396 exposure_group="3023073000237", 

1397 exposure_time=2.0*u.s, 

1398 focus_z=0.0*u.mm, 

1399 group_counter_end=237, 

1400 group_counter_start=237, 

1401 has_simulated_content=False, 

1402 observation_counter=237, 

1403 observation_id="TS_C_20230730_000237", 

1404 observation_type="flat", 

1405 observation_reason="flat", 

1406 observing_day=20230730, 

1407 physical_filter="r", 

1408 science_program="unknown", 

1409 visit_id=3023073000237)), 

1410 ) 

1411 for filename, expected in test_data: 

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

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

1414 

1415 def test_checker(self): 

1416 filename = "latiss-future.yaml" 

1417 from astro_metadata_translator.tests import read_test_file 

1418 from astro_metadata_translator import ObservationInfo 

1419 header = read_test_file(filename, self.datadir) 

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

1421 self.assertTrue(obsInfo) 

1422 

1423 def test_fix_header(self): 

1424 from astro_metadata_translator import fix_header 

1425 from astro_metadata_translator.tests import read_test_file 

1426 # Test that header fix up is working 

1427 # Not all headers are used in metadata translation 

1428 test_data = ( 

1429 ("latiss-AT_O_20210212_000006.yaml", 

1430 dict(RASTART=260.024385071917)), 

1431 ("latiss-AT_O_20210210_000011.yaml", 

1432 dict(RASTART=355.41750341182313)), 

1433 ) 

1434 for filename, expected in test_data: 

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

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

1437 modified = fix_header(header) 

1438 self.assertTrue(modified) 

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

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

1441 

1442 

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

1444 unittest.main()