Coverage for tests/test_translator.py: 16%

97 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-03-16 10:13 +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 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 ) 

354 for filename, expected in test_data: 

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

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

357 

358 def test_phoSimComCam_translator(self): 

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

360 dict(telescope="Simonyi Survey Telescope", 

361 instrument="LSSTComCam", 

362 boresight_rotation_coord="sky", 

363 dark_time=1.0*u.s, 

364 detector_exposure_id=0x4017977100, 

365 detector_group="R22", 

366 detector_name="S00", 

367 detector_num=0, 

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

369 exposure_id=4010021706001, 

370 exposure_group="4010021706001", 

371 exposure_time=1.0*u.s, 

372 focus_z=0.0*u.mm, 

373 group_counter_end=6001, 

374 group_counter_start=6001, 

375 has_simulated_content=True, 

376 object="UNKNOWN", 

377 observation_counter=6001, 

378 observation_id="CC_H_20100217_006001", 

379 observation_type="science", 

380 observation_reason="test", 

381 observing_day=20100217, 

382 physical_filter="g_01", 

383 pressure=None, 

384 relative_humidity=None, 

385 science_program="9006001", 

386 temperature=None, 

387 visit_id=4010021706001)), 

388 ) 

389 for filename, expected in test_data: 

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

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

392 check_wcs=False, **expected) 

393 

394 def test_phosim_translator(self): 

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

396 dict(telescope="Simonyi Survey Telescope", 

397 instrument="LSSTCam-PhoSim", 

398 boresight_rotation_coord="sky", 

399 dark_time=30.0*u.s, 

400 detector_exposure_id=204595038, 

401 detector_group="R11", 

402 detector_name="S02", 

403 detector_num=38, 

404 detector_serial="R11_S02", 

405 exposure_id=204595, 

406 exposure_group="204595", 

407 exposure_time=30.0*u.s, 

408 focus_z=0.0*u.mm, 

409 group_counter_end=204595, 

410 group_counter_start=204595, 

411 has_simulated_content=True, 

412 object="UNKNOWN", 

413 observation_counter=0, 

414 observation_id="204595", 

415 observation_type="science", 

416 observation_reason="phosim", 

417 observing_day=20221005, 

418 physical_filter="i", 

419 pressure=520.0*cds.mmHg, 

420 relative_humidity=40.0, 

421 science_program="204595", 

422 temperature=20.0*u.deg_C, 

423 visit_id=204595, 

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

425 ) 

426 for filename, expected in test_data: 

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

428 with warnings.catch_warnings(): 

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

430 warnings.simplefilter("ignore", VerifyWarning) 

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

432 

433 def test_latiss_translator(self): 

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

435 dict(telescope="Rubin Auxiliary Telescope", 

436 instrument="LATISS", 

437 boresight_rotation_coord="unknown", 

438 dark_time=27.0*u.s, 

439 detector_exposure_id=0x2638004100, 

440 detector_group="RXX", 

441 detector_name="S00", 

442 detector_num=0, 

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

444 exposure_id=3018092000065, 

445 exposure_group="3018092000065", 

446 exposure_time=27.0*u.s, 

447 focus_z=0.0*u.mm, 

448 group_counter_end=65, 

449 group_counter_start=65, 

450 has_simulated_content=False, 

451 object="UNKNOWN", 

452 observation_counter=65, 

453 observation_id="AT_C_20180920_000065", 

454 observation_type="unknown", 

455 observation_reason="unknown", 

456 observing_day=20180920, 

457 physical_filter="unknown~unknown", 

458 pressure=None, 

459 relative_humidity=None, 

460 science_program="unknown", 

461 temperature=None, 

462 visit_id=3018092000065, 

463 )), 

464 ("latiss-AT_O_20190306_000014.yaml", 

465 dict(telescope="Rubin Auxiliary Telescope", 

466 instrument="LATISS", 

467 boresight_rotation_coord="unknown", 

468 dark_time=1.06*u.s, 

469 detector_exposure_id=0x68b800e00, 

470 detector_group="RXX", 

471 detector_name="S00", 

472 detector_num=0, 

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

474 exposure_id=2019030600014, 

475 exposure_group="2019030600014", 

476 exposure_time=1.06*u.s, 

477 focus_z=0.0*u.mm, 

478 group_counter_end=14, 

479 group_counter_start=14, 

480 has_simulated_content=False, 

481 object="UNKNOWN", 

482 observation_counter=14, 

483 observation_id="AT_O_20190306_000014", 

484 observation_type="unknown", 

485 observation_reason="unknown", 

486 observing_day=20190306, 

487 physical_filter="unknown~unknown", 

488 pressure=None, 

489 relative_humidity=None, 

490 science_program="unknown", 

491 temperature=None, 

492 visit_id=2019030600014, 

493 )), 

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

495 dict(telescope="Rubin Auxiliary Telescope", 

496 instrument="LATISS", 

497 boresight_rotation_coord="unknown", 

498 dark_time=0.0*u.s, 

499 detector_exposure_id=0x697001600, 

500 detector_group="RXX", 

501 detector_name="S00", 

502 detector_num=0, 

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

504 exposure_id=2019032900022, 

505 exposure_group="2019032900022", 

506 exposure_time=0.0*u.s, 

507 focus_z=0.0*u.mm, 

508 group_counter_end=22, 

509 group_counter_start=22, 

510 has_simulated_content=False, 

511 object="UNKNOWN", 

512 observation_counter=22, 

513 observation_id="AT_O_20190329_000022", 

514 observation_type="bias", 

515 observation_reason="unknown", 

516 observing_day=20190329, 

517 physical_filter="unknown~unknown", 

518 pressure=None, 

519 relative_humidity=None, 

520 science_program="unknown", 

521 temperature=None, 

522 visit_id=2019032900022, 

523 )), 

524 ("latiss-future.yaml", 

525 dict(telescope="Rubin Auxiliary Telescope", 

526 instrument="LATISS", 

527 boresight_rotation_coord="unknown", 

528 dark_time=0.0*u.s, 

529 detector_exposure_id=0x74e001600, 

530 detector_group="RXX", 

531 detector_name="S00", 

532 detector_num=0, 

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

534 exposure_id=2020032900022, 

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

536 exposure_time=0.0*u.s, 

537 focus_z=0.0*u.mm, 

538 group_counter_end=22, 

539 group_counter_start=22, 

540 has_simulated_content=False, 

541 object="UNKNOWN", 

542 observation_counter=22, 

543 observation_id="AT_X_20200329_000022", 

544 observation_type="bias", 

545 observation_reason="unknown", 

546 observing_day=20200329, 

547 physical_filter="unknown~unknown", 

548 pressure=None, 

549 relative_humidity=None, 

550 science_program="unknown", 

551 temperature=None, 

552 visit_id=1654305000120024, 

553 )), 

554 ("latiss-AT_O_20190915_000037.yaml", 

555 dict(telescope="Rubin Auxiliary Telescope", 

556 instrument="LATISS", 

557 boresight_rotation_coord="unknown", 

558 dark_time=0.0*u.s, 

559 detector_exposure_id=0x6ec002500, 

560 detector_group="RXX", 

561 detector_name="S00", 

562 detector_num=0, 

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

564 exposure_id=2019091500037, 

565 exposure_group="bias_0027_0100", 

566 exposure_time=0.0*u.s, 

567 focus_z=0.0*u.mm, 

568 group_counter_end=37, 

569 group_counter_start=37, 

570 has_simulated_content=False, 

571 object="UNKNOWN", 

572 observation_counter=37, 

573 observation_id="AT_O_20190915_000037", 

574 observation_type="bias", 

575 observation_reason="unknown", 

576 observing_day=20190915, 

577 physical_filter="unknown~unknown", 

578 pressure=None, 

579 relative_humidity=None, 

580 science_program="unknown", 

581 temperature=None, 

582 visit_id=3575576933793566714, 

583 )), 

584 ("latiss-AT_O_20191031_000004.yaml", 

585 dict(telescope="Rubin Auxiliary Telescope", 

586 instrument="LATISS", 

587 boresight_rotation_coord="unknown", 

588 dark_time=3.0*u.s, 

589 detector_exposure_id=0x703000400, 

590 detector_group="RXX", 

591 detector_name="S00", 

592 detector_num=0, 

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

594 exposure_id=2019103100004, 

595 exposure_group="TEST01", 

596 exposure_time=3.0*u.s, 

597 focus_z=0.0*u.mm, 

598 group_counter_end=4, 

599 group_counter_start=4, 

600 has_simulated_content=False, 

601 object="UNKNOWN", 

602 observation_counter=4, 

603 observation_id="AT_O_20191031_000004", 

604 observation_type="engtest", 

605 observation_reason="unknown", 

606 observing_day=20191031, 

607 physical_filter="unknown~unknown", 

608 pressure=None, 

609 relative_humidity=None, 

610 science_program="unknown", 

611 temperature=None, 

612 visit_id=1123819875881954006, 

613 )), 

614 ("latiss-AT_O_20191104_000003.yaml", 

615 dict(telescope="Rubin Auxiliary Telescope", 

616 instrument="LATISS", 

617 boresight_rotation_coord="unknown", 

618 dark_time=3.0*u.s, 

619 detector_exposure_id=0x705000300, 

620 detector_group="RXX", 

621 detector_name="S00", 

622 detector_num=0, 

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

624 exposure_id=2019110400003, 

625 exposure_group="TEST01", 

626 exposure_time=3.0*u.s, 

627 focus_z=0.0*u.mm, 

628 group_counter_end=3, 

629 group_counter_start=3, 

630 has_simulated_content=False, 

631 object="UNKNOWN", 

632 observation_counter=3, 

633 observation_id="AT_O_20191104_000003", 

634 observation_type="engtest", 

635 observation_reason="unknown", 

636 observing_day=20191104, 

637 physical_filter="unknown~unknown", 

638 pressure=None, 

639 relative_humidity=None, 

640 science_program="unknown", 

641 temperature=None, 

642 visit_id=1123819875881954006, 

643 )), 

644 ("latiss-AT_O_20191113_000061.yaml", 

645 dict(telescope="Rubin Auxiliary Telescope", 

646 instrument="LATISS", 

647 boresight_rotation_coord="unknown", 

648 dark_time=0.5*u.s, 

649 detector_exposure_id=0x709803d00, 

650 detector_group="RXX", 

651 detector_name="S00", 

652 detector_num=0, 

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

654 exposure_id=2019111300061, 

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

656 exposure_time=0.5*u.s, 

657 focus_z=0.0*u.mm, 

658 group_counter_end=61, 

659 group_counter_start=61, 

660 has_simulated_content=False, 

661 object="UNKNOWN", 

662 observation_counter=61, 

663 observation_id="AT_O_20191113_000061", 

664 observation_type="engtest", 

665 observation_reason="unknown", 

666 observing_day=20191113, 

667 physical_filter="empty~ronchi90lpmm", 

668 pressure=None, 

669 relative_humidity=None, 

670 science_program="unknown", 

671 temperature=None, 

672 visit_id=1892608703001301325, 

673 )), 

674 ("latiss-AT_O_20191118_000011.yaml", 

675 dict(telescope="Rubin Auxiliary Telescope", 

676 instrument="LATISS", 

677 boresight_rotation_coord="unknown", 

678 dark_time=15.0*u.s, 

679 detector_exposure_id=0x70c000b00, 

680 detector_group="RXX", 

681 detector_name="S00", 

682 detector_num=0, 

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

684 exposure_id=2019111800011, 

685 exposure_group="dark_0002_0005", 

686 exposure_time=15.0*u.s, 

687 focus_z=0.0*u.mm, 

688 group_counter_end=11, 

689 group_counter_start=11, 

690 has_simulated_content=False, 

691 object="UNKNOWN", 

692 observation_counter=11, 

693 observation_id="AT_O_20191118_000011", 

694 observation_type="dark", 

695 observation_reason="unknown", 

696 observing_day=20191118, 

697 physical_filter="diffuser~ronchi170lpmm", 

698 pressure=None, 

699 relative_humidity=None, 

700 science_program="unknown", 

701 temperature=None, 

702 visit_id=6861884254113212214, 

703 )), 

704 ("latiss-AT_O_20200121_000045.yaml", 

705 dict(telescope="Rubin Auxiliary Telescope", 

706 instrument="LATISS", 

707 boresight_rotation_coord="sky", 

708 dark_time=100.0*u.s, 

709 detector_exposure_id=0x72c002d00, 

710 detector_group="RXX", 

711 detector_name="S00", 

712 detector_num=0, 

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

714 exposure_id=2020012100045, 

715 exposure_group="test", 

716 exposure_time=100.0*u.s, 

717 focus_z=0.560002659202*u.mm, 

718 group_counter_end=45, 

719 group_counter_start=45, 

720 has_simulated_content=False, 

721 object="UNKNOWN", 

722 observation_counter=45, 

723 observation_id="AT_O_20200121_000045", 

724 observation_type="engtest", 

725 observation_reason="unknown", 

726 observing_day=20200121, 

727 physical_filter="blank_bk7_wg05~empty", 

728 pressure=None, 

729 relative_humidity=None, 

730 science_program="unknown", 

731 temperature=None, 

732 visit_id=4702443654717948604, 

733 check_altaz=True, 

734 )), 

735 ("latiss-AT_O_20200128_000379.yaml", 

736 dict(telescope="Rubin Auxiliary Telescope", 

737 instrument="LATISS", 

738 boresight_rotation_coord="sky", 

739 dark_time=5.0*u.s, 

740 detector_exposure_id=0x72f817b00, 

741 detector_group="RXX", 

742 detector_name="S00", 

743 detector_num=0, 

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

745 exposure_id=2020012800379, 

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

747 exposure_time=5.0*u.s, 

748 focus_z=0.35416568455*u.mm, 

749 group_counter_end=379, 

750 group_counter_start=379, 

751 has_simulated_content=False, 

752 object="HD107696", 

753 observation_counter=379, 

754 observation_id="AT_O_20200128_000379", 

755 observation_type="science", 

756 observation_reason="science", 

757 observing_day=20200128, 

758 physical_filter="KPNO_406_828nm~empty", 

759 pressure=None, 

760 relative_humidity=None, 

761 science_program="unknown", 

762 temperature=None, 

763 visit_id=1602123521660000, 

764 # We have some timing discrepancies in the headers 

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

766 # the recorded AZ/EL/TIME. 

767 wcs_params=dict(max_sep=7.), 

768 )), 

769 ("latiss-AT_O_20220405_000348.yaml", 

770 dict(telescope="Rubin Auxiliary Telescope", 

771 instrument="LATISS", 

772 boresight_rotation_coord="sky", 

773 dark_time=30.3176279067993*u.s, 

774 detector_exposure_id=0x8be815c00, 

775 detector_group="RXX", 

776 detector_name="S00", 

777 detector_num=0, 

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

779 exposure_id=2022040500348, 

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

781 exposure_time=30.0*u.s, 

782 focus_z=0.0697081759572029*u.mm, 

783 group_counter_end=349, 

784 group_counter_start=348, 

785 has_simulated_content=False, 

786 object="LATISS_E6A_00000040", 

787 observation_counter=348, 

788 observation_id="AT_O_20220405_000348", 

789 observation_type="science", 

790 observation_reason="object", 

791 observing_day=20220405, 

792 physical_filter="SDSSr~empty", 

793 pressure=744.3*u.hPa, 

794 relative_humidity=19.0, 

795 science_program="LATISS_E6A", 

796 temperature=12.3*u.deg_C, 

797 visit_id=2291434871810000, 

798 # We have some timing discrepancies in the headers 

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

800 # the recorded AZ/EL/TIME. 

801 wcs_params=dict(max_sep=7.), 

802 )), 

803 ("latiss-AT_O_20220405_000349.yaml", 

804 dict(telescope="Rubin Auxiliary Telescope", 

805 instrument="LATISS", 

806 boresight_rotation_coord="sky", 

807 dark_time=30.2387452125549*u.s, 

808 detector_exposure_id=0x8be815d00, 

809 detector_group="RXX", 

810 detector_name="S00", 

811 detector_num=0, 

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

813 exposure_id=2022040500349, 

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

815 exposure_time=30.0*u.s, 

816 focus_z=0.0697081759572029*u.mm, 

817 group_counter_end=349, 

818 group_counter_start=348, 

819 has_simulated_content=False, 

820 object="LATISS_E6A_00000040", 

821 observation_counter=349, 

822 observation_id="AT_O_20220405_000349", 

823 observation_type="science", 

824 observation_reason="object", 

825 observing_day=20220405, 

826 physical_filter="SDSSr~empty", 

827 pressure=744.3*u.hPa, 

828 relative_humidity=19.0, 

829 science_program="LATISS_E6A", 

830 temperature=12.3*u.deg_C, 

831 visit_id=2291434871810000, 

832 # We have some timing discrepancies in the headers 

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

834 # the recorded AZ/EL/TIME. 

835 wcs_params=dict(max_sep=7.), 

836 )), 

837 ("latiss-AT_C_20220426_000004_R00_S00.yaml", 

838 dict(telescope="Rubin Auxiliary Telescope", 

839 instrument="LATISS", 

840 boresight_rotation_coord="unknown", 

841 dark_time=537.406*u.s, 

842 detector_exposure_id=0x28c9000400, 

843 detector_group="RXX", 

844 detector_name="S00", 

845 detector_num=0, 

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

847 exposure_id=3022042600004, 

848 exposure_group="3022042600004", 

849 exposure_time=-1.0*u.s, 

850 focus_z=0.0*u.mm, 

851 group_counter_end=4, 

852 group_counter_start=4, 

853 has_simulated_content=False, 

854 object="UNKNOWN", 

855 observation_counter=4, 

856 observation_id="AT_C_20220426_000004", 

857 observation_type="unknown", 

858 observation_reason="unknown", 

859 observing_day=20220426, 

860 physical_filter="unknown~unknown", 

861 pressure=None, 

862 relative_humidity=None, 

863 science_program="unknown", 

864 temperature=None, 

865 visit_id=3022042600004, 

866 )), 

867 ("latiss-AT_O_20230321_000053.yaml", 

868 dict(telescope="Rubin Auxiliary Telescope", 

869 instrument="LATISS", 

870 boresight_rotation_coord="unknown", 

871 dark_time=30.0126*u.s, 

872 detector_exposure_id=0x96d803500, 

873 detector_group="RXX", 

874 detector_name="S00", 

875 detector_num=0, 

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

877 exposure_id=2023032100053, 

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

879 exposure_time=30.0*u.s, 

880 focus_z=0.0*u.mm, 

881 group_counter_end=53, 

882 group_counter_start=53, 

883 has_simulated_content=False, 

884 object="slew_icrs", 

885 observation_counter=53, 

886 observation_id="AT_O_20230321_000053", 

887 observation_type="dark", 

888 observation_reason="dark", 

889 observing_day=20230321, 

890 physical_filter="empty~empty", 

891 pressure=None, 

892 relative_humidity=None, 

893 science_program="unknown", 

894 temperature=None, 

895 visit_id=2593446676330000, 

896 check_altaz=True, 

897 )), 

898 ("latiss-AT_O_20230705_000379_R00_S00.json", 

899 dict(telescope="Rubin Auxiliary Telescope", 

900 instrument="LATISS", 

901 boresight_rotation_coord="sky", 

902 dark_time=30.2418*u.s, 

903 detector_exposure_id=0x9a2817b00, 

904 detector_group="RXX", 

905 detector_name="S00", 

906 detector_num=0, 

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

908 exposure_id=2023070500379, 

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

910 exposure_time=30.0*u.s, 

911 focus_z=-0.008921561762690544*u.mm, 

912 group_counter_end=379, 

913 group_counter_start=379, 

914 has_simulated_content=False, 

915 object="HD165763", 

916 observation_counter=379, 

917 observation_id="AT_O_20230705_000379", 

918 observation_type="science", 

919 observation_reason="sitcom-857", 

920 observing_day=20230705, 

921 physical_filter="empty~holo4_003", 

922 pressure=777.80*u.hPa, 

923 relative_humidity=15.149999618530273, 

924 science_program="BLOCK-59", 

925 temperature=5.775000095367432*u.deg_C, 

926 visit_id=2685487956090000, 

927 check_altaz=True, 

928 )), 

929 ) 

930 with warnings.catch_warnings(): 

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

932 warnings.simplefilter("ignore", VerifyWarning) 

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

934 for filename, expected in test_data: 

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

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

937 

938 # This translation should fail 

939 with self.assertRaises(KeyError): 

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

941 

942 def test_imsim_translator(self): 

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

944 dict(telescope="Simonyi Survey Telescope", 

945 instrument="LSSTCam-imSim", 

946 boresight_rotation_coord="sky", 

947 dark_time=0.0*u.s, 

948 detector_exposure_id=3010002036, 

949 detector_group="R11", 

950 detector_name="S00", 

951 detector_num=36, 

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

953 exposure_id=3010002, 

954 exposure_group="3010002", 

955 exposure_time=0.0*u.s, 

956 focus_z=0.0*u.mm, 

957 group_counter_end=3010002, 

958 group_counter_start=3010002, 

959 has_simulated_content=True, 

960 object="UNKNOWN", 

961 observation_counter=0, 

962 observation_id="3010002", 

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

964 observation_reason="imsim", 

965 observing_day=20220101, 

966 physical_filter="i", 

967 pressure=None, 

968 relative_humidity=40.0, 

969 science_program="42", 

970 temperature=None, 

971 visit_id=3010002, 

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

973 )), 

974 ("imsim-lsst_a_204595_R11_S02_i.yaml", 

975 dict(telescope="Simonyi Survey Telescope", 

976 instrument="LSSTCam-imSim", 

977 boresight_rotation_coord="sky", 

978 dark_time=30.0*u.s, 

979 detector_exposure_id=204595038, 

980 detector_group="R11", 

981 detector_name="S02", 

982 detector_num=38, 

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

984 exposure_id=204595, 

985 exposure_group="204595", 

986 exposure_time=30.0*u.s, 

987 focus_z=0.0*u.mm, 

988 group_counter_end=204595, 

989 group_counter_start=204595, 

990 has_simulated_content=True, 

991 object="UNKNOWN", 

992 observation_counter=0, 

993 observation_id="204595", 

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

995 observation_reason="imsim", 

996 observing_day=20221005, 

997 physical_filter="i_sim_1.4", 

998 pressure=None, 

999 relative_humidity=40.0, 

1000 science_program="204595", 

1001 temperature=None, 

1002 visit_id=204595, 

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

1004 )), 

1005 ("imsim-flats-lsst_a_5000007_R11_S20_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=5000007042, 

1011 detector_group="R11", 

1012 detector_name="S20", 

1013 detector_num=42, 

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

1015 exposure_id=5000007, 

1016 exposure_group="5000007", 

1017 exposure_time=30.0*u.s, 

1018 focus_z=0.0*u.mm, 

1019 group_counter_end=5000007, 

1020 group_counter_start=5000007, 

1021 has_simulated_content=True, 

1022 object="UNKNOWN", 

1023 observation_counter=0, 

1024 observation_id="5000007", 

1025 observation_type="flat", 

1026 observation_reason="imsim", 

1027 observing_day=20220806, 

1028 physical_filter="i", 

1029 pressure=None, 

1030 relative_humidity=40.0, 

1031 science_program="5000007", 

1032 temperature=None, 

1033 visit_id=5000007, 

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

1035 )), 

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

1037 dict(telescope="Simonyi Survey Telescope", 

1038 instrument="LSSTCam-imSim", 

1039 boresight_rotation_coord="sky", 

1040 dark_time=500.0*u.s, 

1041 detector_exposure_id=4010003040, 

1042 detector_group="R11", 

1043 detector_name="S11", 

1044 detector_num=40, 

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

1046 exposure_id=4010003, 

1047 exposure_group="4010003", 

1048 exposure_time=500.0*u.s, 

1049 focus_z=0.0*u.mm, 

1050 group_counter_end=4010003, 

1051 group_counter_start=4010003, 

1052 has_simulated_content=True, 

1053 object="UNKNOWN", 

1054 observation_counter=0, 

1055 observation_id="4010003", 

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

1057 observation_reason="imsim", 

1058 observing_day=20220101, 

1059 physical_filter="i", 

1060 pressure=None, 

1061 relative_humidity=40.0, 

1062 science_program="42", 

1063 temperature=None, 

1064 visit_id=4010003, 

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

1066 )), 

1067 ) 

1068 for filename, expected in test_data: 

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

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

1071 

1072 def test_ts3_translator(self): 

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

1074 dict(telescope=None, 

1075 instrument="LSST-TS3", 

1076 dark_time=44.631*u.s, 

1077 detector_exposure_id=201811151255111433, 

1078 detector_group="R433", 

1079 detector_name="S00", 

1080 detector_num=433, 

1081 detector_serial="E2V-CCD250-411", 

1082 exposure_id=201811151255111, 

1083 exposure_group="201811151255111", 

1084 exposure_time=44.631*u.s, 

1085 focus_z=0.0*u.mm, 

1086 group_counter_end=25, 

1087 group_counter_start=25, 

1088 has_simulated_content=False, 

1089 observation_counter=25, 

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

1091 observation_type="flat", 

1092 observation_reason="lambda", 

1093 observing_day=20181115, 

1094 physical_filter="550CutOn", 

1095 science_program="2018-11-15", 

1096 visit_id=201811151255111)), 

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

1098 dict(telescope=None, 

1099 instrument="LSST-TS3", 

1100 dark_time=30.611*u.s, 

1101 detector_exposure_id=201607220607067071, 

1102 detector_group="R071", 

1103 detector_name="S00", 

1104 detector_num=71, 

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

1106 exposure_id=201607220607067, 

1107 exposure_group="201607220607067", 

1108 exposure_time=30.611*u.s, 

1109 focus_z=0.0*u.mm, 

1110 group_counter_end=67, 

1111 group_counter_start=67, 

1112 has_simulated_content=False, 

1113 observation_counter=67, 

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

1115 observation_type="flat", 

1116 observation_reason="lambda", 

1117 observing_day=20160721, 

1118 physical_filter="550CutOn", 

1119 science_program="2016-07-22", 

1120 visit_id=201607220607067)), 

1121 ) 

1122 for filename, expected in test_data: 

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

1124 with warnings.catch_warnings(): 

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

1126 warnings.simplefilter("ignore", VerifyWarning) 

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

1128 

1129 def test_ts8_translator(self): 

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

1131 dict(telescope=None, 

1132 instrument="LSST-TS8", 

1133 dark_time=0.0*u.s, 

1134 detector_exposure_id=201807241041568067, 

1135 detector_group="RTM-010", 

1136 detector_name="S11", 

1137 detector_num=67, 

1138 detector_serial="E2V-CCD250-179", 

1139 exposure_id=201807241041568, 

1140 exposure_group="201807241041568", 

1141 exposure_time=0.0*u.s, 

1142 focus_z=0.0*u.mm, 

1143 group_counter_end=24, 

1144 group_counter_start=24, 

1145 has_simulated_content=False, 

1146 observation_counter=24, 

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

1148 observation_type="bias", 

1149 observation_reason="lambda", 

1150 observing_day=20180724, 

1151 physical_filter="y", 

1152 science_program="6006D", 

1153 visit_id=201807241041568)), 

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

1155 dict(telescope=None, 

1156 instrument="LSST-TS8", 

1157 dark_time=21.913*u.s, 

1158 detector_exposure_id=201807241028453065, 

1159 detector_group="RTM-010", 

1160 detector_name="S02", 

1161 detector_num=65, 

1162 detector_serial="E2V-CCD250-200", 

1163 exposure_id=201807241028453, 

1164 exposure_group="201807241028453", 

1165 exposure_time=21.913*u.s, 

1166 focus_z=0.0*u.mm, 

1167 group_counter_end=17, 

1168 group_counter_start=17, 

1169 has_simulated_content=False, 

1170 observation_counter=17, 

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

1172 observation_type="flat", 

1173 observation_reason="lambda", 

1174 observing_day=20180724, 

1175 physical_filter="z", 

1176 science_program="6006D", 

1177 visit_id=201807241028453)), 

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

1179 dict(telescope=None, 

1180 instrument="LSST-TS8", 

1181 dark_time=300.0*u.s, 

1182 detector_exposure_id=201712151140062027, 

1183 detector_group="RTM-005", 

1184 detector_name="S00", 

1185 detector_num=27, 

1186 detector_serial="E2V-CCD250-220", 

1187 exposure_id=201712151140062, 

1188 exposure_group="201712151140062", 

1189 exposure_time=300.0*u.s, 

1190 focus_z=0.0*u.mm, 

1191 group_counter_end=94, 

1192 group_counter_start=94, 

1193 has_simulated_content=False, 

1194 observation_counter=94, 

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

1196 observation_type="fe55", 

1197 observation_reason="fe55", 

1198 observing_day=20171215, 

1199 physical_filter="i", 

1200 science_program="6288", 

1201 visit_id=201712151140062)), 

1202 ("ts8-TS_C_20220711_000174_R22_S00.yaml", 

1203 dict(telescope=None, 

1204 instrument="LSST-TS8", 

1205 dark_time=210.315*u.s, 

1206 detector_exposure_id=202207111714459018, 

1207 detector_group="RTM-004", 

1208 detector_name="S00", 

1209 detector_num=18, 

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

1211 exposure_id=202207111714459, 

1212 exposure_group="202207111714459", 

1213 exposure_time=210.0*u.s, 

1214 focus_z=0.0*u.mm, 

1215 group_counter_end=174, 

1216 group_counter_start=174, 

1217 has_simulated_content=False, 

1218 observation_counter=174, 

1219 observation_id="TS_C_20220711_000174", 

1220 observation_type="spot", 

1221 observation_reason="spot_flat", 

1222 observing_day=20220711, 

1223 physical_filter="unknown", 

1224 science_program="7074D", 

1225 visit_id=202207111714459)), 

1226 ("ts8-TS_C_20230512_000021_R22_S02.yaml", 

1227 dict(telescope=None, 

1228 instrument="LSST-TS8", 

1229 dark_time=15.165*u.s, 

1230 detector_exposure_id=202305121917591020, 

1231 detector_group="RTM-004", 

1232 detector_name="S02", 

1233 detector_num=20, 

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

1235 exposure_id=202305121917591, 

1236 exposure_group="202305121917591", 

1237 exposure_time=15.0*u.s, 

1238 focus_z=0.0*u.mm, 

1239 group_counter_end=21, 

1240 group_counter_start=21, 

1241 has_simulated_content=False, 

1242 observation_counter=21, 

1243 observation_id="TS_C_20230512_000021", 

1244 observation_type="flat", 

1245 observation_reason="sflat_hi", 

1246 observing_day=20230512, 

1247 physical_filter="HIGH", 

1248 science_program="7187D", 

1249 visit_id=202305121917591)), 

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

1251 dict(telescope=None, 

1252 instrument="LSST-TS8", 

1253 dark_time=15.165*u.s, 

1254 detector_exposure_id=202305121917591020, 

1255 detector_group="RTM-004", 

1256 detector_name="S02", 

1257 detector_num=20, 

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

1259 exposure_id=202305121917591, 

1260 exposure_group="202305121917591", 

1261 exposure_time=15.0*u.s, 

1262 focus_z=0.0*u.mm, 

1263 group_counter_end=21, 

1264 group_counter_start=21, 

1265 has_simulated_content=False, 

1266 observation_counter=21, 

1267 observation_id="TS_C_20230512_000021", 

1268 observation_type="flat", 

1269 observation_reason="sflat_hi", 

1270 observing_day=20230512, 

1271 physical_filter="HIGH", 

1272 science_program="7187D", 

1273 visit_id=202305121917591)), 

1274 ("ts8-TS_C_20230523_000127_R22_S00.yaml", 

1275 dict(telescope=None, 

1276 instrument="LSST-TS8", 

1277 dark_time=15.16*u.s, 

1278 detector_exposure_id=202305231936194018, 

1279 detector_group="RTM-004", 

1280 detector_name="S00", 

1281 detector_num=18, 

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

1283 exposure_id=202305231936194, 

1284 exposure_group="202305231936194", 

1285 exposure_time=15.0*u.s, 

1286 focus_z=0.0*u.mm, 

1287 group_counter_end=127, 

1288 group_counter_start=127, 

1289 has_simulated_content=False, 

1290 observation_counter=127, 

1291 observation_id="TS_C_20230523_000127", 

1292 observation_type="flat", 

1293 observation_reason="flat", 

1294 observing_day=20230523, 

1295 physical_filter="unknown", 

1296 science_program="7220D", 

1297 visit_id=202305231936194)), 

1298 ("ts8-TS_C_20230525_000041_R22_S00.yaml", 

1299 dict(telescope=None, 

1300 instrument="LSST-TS8", 

1301 dark_time=30.151*u.s, 

1302 detector_exposure_id=3023052500041018, 

1303 detector_group="RTM-004", 

1304 detector_name="S00", 

1305 detector_num=18, 

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

1307 exposure_id=3023052500041, 

1308 exposure_group="3023052500041", 

1309 exposure_time=30.0*u.s, 

1310 focus_z=0.0*u.mm, 

1311 group_counter_end=41, 

1312 group_counter_start=41, 

1313 has_simulated_content=False, 

1314 observation_counter=41, 

1315 observation_id="TS_C_20230525_000041", 

1316 observation_type="flat", 

1317 observation_reason="flat", 

1318 observing_day=20230525, 

1319 physical_filter="unknown", 

1320 science_program="7227D", 

1321 visit_id=3023052500041)), 

1322 ) 

1323 for filename, expected in test_data: 

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

1325 with warnings.catch_warnings(): 

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

1327 warnings.simplefilter("ignore", VerifyWarning) 

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

1329 

1330 def test_ucdcam_translator(self): 

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

1332 dict(telescope=None, 

1333 instrument="LSST-UCDCam", 

1334 dark_time=2.07859*u.s, 

1335 detector_exposure_id=42370917130, 

1336 detector_group="R21", 

1337 detector_name="S01", 

1338 detector_num=10, 

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

1340 exposure_id=2023103100227, 

1341 exposure_group="2023103100227", 

1342 exposure_time=1.0*u.s, 

1343 focus_z=0.0*u.mm, 

1344 group_counter_end=227, 

1345 group_counter_start=227, 

1346 has_simulated_content=False, 

1347 observation_counter=227, 

1348 observation_id="TS_C_20231031_000227", 

1349 observation_type="flat", 

1350 observation_reason="flat", 

1351 observing_day=20231031, 

1352 physical_filter="r", 

1353 science_program="unknown", 

1354 visit_id=2023103100227)), 

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

1356 dict(telescope=None, 

1357 instrument="LSST-UCDCam", 

1358 dark_time=3.082*u.s, 

1359 detector_exposure_id=179029732609, 

1360 detector_group="R22", 

1361 detector_name="S01", 

1362 detector_num=1, 

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

1364 exposure_id=3023073000237, 

1365 exposure_group="3023073000237", 

1366 exposure_time=2.0*u.s, 

1367 focus_z=0.0*u.mm, 

1368 group_counter_end=237, 

1369 group_counter_start=237, 

1370 has_simulated_content=False, 

1371 observation_counter=237, 

1372 observation_id="TS_C_20230730_000237", 

1373 observation_type="flat", 

1374 observation_reason="flat", 

1375 observing_day=20230730, 

1376 physical_filter="r", 

1377 science_program="unknown", 

1378 visit_id=3023073000237)), 

1379 ) 

1380 for filename, expected in test_data: 

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

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

1383 

1384 def test_checker(self): 

1385 filename = "latiss-future.yaml" 

1386 from astro_metadata_translator.tests import read_test_file 

1387 from astro_metadata_translator import ObservationInfo 

1388 header = read_test_file(filename, self.datadir) 

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

1390 self.assertTrue(obsInfo) 

1391 

1392 def test_fix_header(self): 

1393 from astro_metadata_translator import fix_header 

1394 from astro_metadata_translator.tests import read_test_file 

1395 # Test that header fix up is working 

1396 # Not all headers are used in metadata translation 

1397 test_data = ( 

1398 ("latiss-AT_O_20210212_000006.yaml", 

1399 dict(RASTART=260.024385071917)), 

1400 ("latiss-AT_O_20210210_000011.yaml", 

1401 dict(RASTART=355.41750341182313)), 

1402 ) 

1403 for filename, expected in test_data: 

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

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

1406 modified = fix_header(header) 

1407 self.assertTrue(modified) 

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

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

1410 

1411 

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

1413 unittest.main()