Coverage for tests/test_translator.py: 16%

97 statements  

« prev     ^ index     » next       coverage.py v7.4.3, created at 2024-02-25 09:36 +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=20221004, 

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_O_20230321_000053.yaml", 

838 dict(telescope="Rubin Auxiliary Telescope", 

839 instrument="LATISS", 

840 boresight_rotation_coord="unknown", 

841 dark_time=30.0126*u.s, 

842 detector_exposure_id=0x96d803500, 

843 detector_group="RXX", 

844 detector_name="S00", 

845 detector_num=0, 

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

847 exposure_id=2023032100053, 

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

849 exposure_time=30.0*u.s, 

850 focus_z=0.0*u.mm, 

851 group_counter_end=53, 

852 group_counter_start=53, 

853 has_simulated_content=False, 

854 object="slew_icrs", 

855 observation_counter=53, 

856 observation_id="AT_O_20230321_000053", 

857 observation_type="dark", 

858 observation_reason="dark", 

859 observing_day=20230321, 

860 physical_filter="empty~empty", 

861 pressure=None, 

862 relative_humidity=None, 

863 science_program="unknown", 

864 temperature=None, 

865 visit_id=2593446676330000, 

866 check_altaz=True, 

867 )), 

868 ("latiss-AT_O_20230705_000379_R00_S00.json", 

869 dict(telescope="Rubin Auxiliary Telescope", 

870 instrument="LATISS", 

871 boresight_rotation_coord="sky", 

872 dark_time=30.2418*u.s, 

873 detector_exposure_id=0x9a2817b00, 

874 detector_group="RXX", 

875 detector_name="S00", 

876 detector_num=0, 

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

878 exposure_id=2023070500379, 

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

880 exposure_time=30.0*u.s, 

881 focus_z=-0.008921561762690544*u.mm, 

882 group_counter_end=379, 

883 group_counter_start=379, 

884 has_simulated_content=False, 

885 object="HD165763", 

886 observation_counter=379, 

887 observation_id="AT_O_20230705_000379", 

888 observation_type="science", 

889 observation_reason="sitcom-857", 

890 observing_day=20230705, 

891 physical_filter="empty~holo4_003", 

892 pressure=777.80*u.hPa, 

893 relative_humidity=15.149999618530273, 

894 science_program="BLOCK-59", 

895 temperature=5.775000095367432*u.deg_C, 

896 visit_id=2685487956090000, 

897 check_altaz=True, 

898 )), 

899 ) 

900 with warnings.catch_warnings(): 

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

902 warnings.simplefilter("ignore", VerifyWarning) 

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

904 for filename, expected in test_data: 

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

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

907 

908 # This translation should fail 

909 with self.assertRaises(KeyError): 

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

911 

912 def test_imsim_translator(self): 

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

914 dict(telescope="Simonyi Survey Telescope", 

915 instrument="LSSTCam-imSim", 

916 boresight_rotation_coord="sky", 

917 dark_time=0.0*u.s, 

918 detector_exposure_id=3010002036, 

919 detector_group="R11", 

920 detector_name="S00", 

921 detector_num=36, 

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

923 exposure_id=3010002, 

924 exposure_group="3010002", 

925 exposure_time=0.0*u.s, 

926 focus_z=0.0*u.mm, 

927 group_counter_end=3010002, 

928 group_counter_start=3010002, 

929 has_simulated_content=True, 

930 object="UNKNOWN", 

931 observation_counter=0, 

932 observation_id="3010002", 

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

934 observation_reason="imsim", 

935 observing_day=20211231, 

936 physical_filter="i", 

937 pressure=None, 

938 relative_humidity=40.0, 

939 science_program="42", 

940 temperature=None, 

941 visit_id=3010002, 

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

943 )), 

944 ("imsim-lsst_a_204595_R11_S02_i.yaml", 

945 dict(telescope="Simonyi Survey Telescope", 

946 instrument="LSSTCam-imSim", 

947 boresight_rotation_coord="sky", 

948 dark_time=30.0*u.s, 

949 detector_exposure_id=204595038, 

950 detector_group="R11", 

951 detector_name="S02", 

952 detector_num=38, 

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

954 exposure_id=204595, 

955 exposure_group="204595", 

956 exposure_time=30.0*u.s, 

957 focus_z=0.0*u.mm, 

958 group_counter_end=204595, 

959 group_counter_start=204595, 

960 has_simulated_content=True, 

961 object="UNKNOWN", 

962 observation_counter=0, 

963 observation_id="204595", 

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

965 observation_reason="imsim", 

966 observing_day=20221004, 

967 physical_filter="i_sim_1.4", 

968 pressure=None, 

969 relative_humidity=40.0, 

970 science_program="204595", 

971 temperature=None, 

972 visit_id=204595, 

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

974 )), 

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

976 dict(telescope="Simonyi Survey Telescope", 

977 instrument="LSSTCam-imSim", 

978 boresight_rotation_coord="sky", 

979 dark_time=30.0*u.s, 

980 detector_exposure_id=5000007042, 

981 detector_group="R11", 

982 detector_name="S20", 

983 detector_num=42, 

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

985 exposure_id=5000007, 

986 exposure_group="5000007", 

987 exposure_time=30.0*u.s, 

988 focus_z=0.0*u.mm, 

989 group_counter_end=5000007, 

990 group_counter_start=5000007, 

991 has_simulated_content=True, 

992 object="UNKNOWN", 

993 observation_counter=0, 

994 observation_id="5000007", 

995 observation_type="flat", 

996 observation_reason="imsim", 

997 observing_day=20220805, 

998 physical_filter="i", 

999 pressure=None, 

1000 relative_humidity=40.0, 

1001 science_program="5000007", 

1002 temperature=None, 

1003 visit_id=5000007, 

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

1005 )), 

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

1007 dict(telescope="Simonyi Survey Telescope", 

1008 instrument="LSSTCam-imSim", 

1009 boresight_rotation_coord="sky", 

1010 dark_time=500.0*u.s, 

1011 detector_exposure_id=4010003040, 

1012 detector_group="R11", 

1013 detector_name="S11", 

1014 detector_num=40, 

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

1016 exposure_id=4010003, 

1017 exposure_group="4010003", 

1018 exposure_time=500.0*u.s, 

1019 focus_z=0.0*u.mm, 

1020 group_counter_end=4010003, 

1021 group_counter_start=4010003, 

1022 has_simulated_content=True, 

1023 object="UNKNOWN", 

1024 observation_counter=0, 

1025 observation_id="4010003", 

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

1027 observation_reason="imsim", 

1028 observing_day=20211231, 

1029 physical_filter="i", 

1030 pressure=None, 

1031 relative_humidity=40.0, 

1032 science_program="42", 

1033 temperature=None, 

1034 visit_id=4010003, 

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

1036 )), 

1037 ) 

1038 for filename, expected in test_data: 

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

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

1041 

1042 def test_ts3_translator(self): 

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

1044 dict(telescope=None, 

1045 instrument="LSST-TS3", 

1046 dark_time=44.631*u.s, 

1047 detector_exposure_id=201811151255111433, 

1048 detector_group="R433", 

1049 detector_name="S00", 

1050 detector_num=433, 

1051 detector_serial="E2V-CCD250-411", 

1052 exposure_id=201811151255111, 

1053 exposure_group="201811151255111", 

1054 exposure_time=44.631*u.s, 

1055 focus_z=0.0*u.mm, 

1056 group_counter_end=25, 

1057 group_counter_start=25, 

1058 has_simulated_content=False, 

1059 observation_counter=25, 

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

1061 observation_type="flat", 

1062 observation_reason="lambda", 

1063 observing_day=20181115, 

1064 physical_filter="550CutOn", 

1065 science_program="2018-11-15", 

1066 visit_id=201811151255111)), 

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

1068 dict(telescope=None, 

1069 instrument="LSST-TS3", 

1070 dark_time=30.611*u.s, 

1071 detector_exposure_id=201607220607067071, 

1072 detector_group="R071", 

1073 detector_name="S00", 

1074 detector_num=71, 

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

1076 exposure_id=201607220607067, 

1077 exposure_group="201607220607067", 

1078 exposure_time=30.611*u.s, 

1079 focus_z=0.0*u.mm, 

1080 group_counter_end=67, 

1081 group_counter_start=67, 

1082 has_simulated_content=False, 

1083 observation_counter=67, 

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

1085 observation_type="flat", 

1086 observation_reason="lambda", 

1087 observing_day=20160721, 

1088 physical_filter="550CutOn", 

1089 science_program="2016-07-22", 

1090 visit_id=201607220607067)), 

1091 ) 

1092 for filename, expected in test_data: 

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

1094 with warnings.catch_warnings(): 

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

1096 warnings.simplefilter("ignore", VerifyWarning) 

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

1098 

1099 def test_ts8_translator(self): 

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

1101 dict(telescope=None, 

1102 instrument="LSST-TS8", 

1103 dark_time=0.0*u.s, 

1104 detector_exposure_id=201807241041568067, 

1105 detector_group="RTM-010", 

1106 detector_name="S11", 

1107 detector_num=67, 

1108 detector_serial="E2V-CCD250-179", 

1109 exposure_id=201807241041568, 

1110 exposure_group="201807241041568", 

1111 exposure_time=0.0*u.s, 

1112 focus_z=0.0*u.mm, 

1113 group_counter_end=24, 

1114 group_counter_start=24, 

1115 has_simulated_content=False, 

1116 observation_counter=24, 

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

1118 observation_type="bias", 

1119 observation_reason="lambda", 

1120 observing_day=20180724, 

1121 physical_filter="y", 

1122 science_program="6006D", 

1123 visit_id=201807241041568)), 

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

1125 dict(telescope=None, 

1126 instrument="LSST-TS8", 

1127 dark_time=21.913*u.s, 

1128 detector_exposure_id=201807241028453065, 

1129 detector_group="RTM-010", 

1130 detector_name="S02", 

1131 detector_num=65, 

1132 detector_serial="E2V-CCD250-200", 

1133 exposure_id=201807241028453, 

1134 exposure_group="201807241028453", 

1135 exposure_time=21.913*u.s, 

1136 focus_z=0.0*u.mm, 

1137 group_counter_end=17, 

1138 group_counter_start=17, 

1139 has_simulated_content=False, 

1140 observation_counter=17, 

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

1142 observation_type="flat", 

1143 observation_reason="lambda", 

1144 observing_day=20180724, 

1145 physical_filter="z", 

1146 science_program="6006D", 

1147 visit_id=201807241028453)), 

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

1149 dict(telescope=None, 

1150 instrument="LSST-TS8", 

1151 dark_time=300.0*u.s, 

1152 detector_exposure_id=201712151140062027, 

1153 detector_group="RTM-005", 

1154 detector_name="S00", 

1155 detector_num=27, 

1156 detector_serial="E2V-CCD250-220", 

1157 exposure_id=201712151140062, 

1158 exposure_group="201712151140062", 

1159 exposure_time=300.0*u.s, 

1160 focus_z=0.0*u.mm, 

1161 group_counter_end=94, 

1162 group_counter_start=94, 

1163 has_simulated_content=False, 

1164 observation_counter=94, 

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

1166 observation_type="fe55", 

1167 observation_reason="fe55", 

1168 observing_day=20171215, 

1169 physical_filter="i", 

1170 science_program="6288", 

1171 visit_id=201712151140062)), 

1172 ("ts8-TS_C_20220711_000174_R22_S00.yaml", 

1173 dict(telescope=None, 

1174 instrument="LSST-TS8", 

1175 dark_time=210.315*u.s, 

1176 detector_exposure_id=202207111714459018, 

1177 detector_group="RTM-004", 

1178 detector_name="S00", 

1179 detector_num=18, 

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

1181 exposure_id=202207111714459, 

1182 exposure_group="202207111714459", 

1183 exposure_time=210.0*u.s, 

1184 focus_z=0.0*u.mm, 

1185 group_counter_end=174, 

1186 group_counter_start=174, 

1187 has_simulated_content=False, 

1188 observation_counter=174, 

1189 observation_id="TS_C_20220711_000174", 

1190 observation_type="spot", 

1191 observation_reason="spot_flat", 

1192 observing_day=20220711, 

1193 physical_filter="unknown", 

1194 science_program="7074D", 

1195 visit_id=202207111714459)), 

1196 ("ts8-TS_C_20230512_000021_R22_S02.yaml", 

1197 dict(telescope=None, 

1198 instrument="LSST-TS8", 

1199 dark_time=15.165*u.s, 

1200 detector_exposure_id=202305121917591020, 

1201 detector_group="RTM-004", 

1202 detector_name="S02", 

1203 detector_num=20, 

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

1205 exposure_id=202305121917591, 

1206 exposure_group="202305121917591", 

1207 exposure_time=15.0*u.s, 

1208 focus_z=0.0*u.mm, 

1209 group_counter_end=21, 

1210 group_counter_start=21, 

1211 has_simulated_content=False, 

1212 observation_counter=21, 

1213 observation_id="TS_C_20230512_000021", 

1214 observation_type="flat", 

1215 observation_reason="sflat_hi", 

1216 observing_day=20230512, 

1217 physical_filter="HIGH", 

1218 science_program="7187D", 

1219 visit_id=202305121917591)), 

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

1221 dict(telescope=None, 

1222 instrument="LSST-TS8", 

1223 dark_time=15.165*u.s, 

1224 detector_exposure_id=202305121917591020, 

1225 detector_group="RTM-004", 

1226 detector_name="S02", 

1227 detector_num=20, 

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

1229 exposure_id=202305121917591, 

1230 exposure_group="202305121917591", 

1231 exposure_time=15.0*u.s, 

1232 focus_z=0.0*u.mm, 

1233 group_counter_end=21, 

1234 group_counter_start=21, 

1235 has_simulated_content=False, 

1236 observation_counter=21, 

1237 observation_id="TS_C_20230512_000021", 

1238 observation_type="flat", 

1239 observation_reason="sflat_hi", 

1240 observing_day=20230512, 

1241 physical_filter="HIGH", 

1242 science_program="7187D", 

1243 visit_id=202305121917591)), 

1244 ("ts8-TS_C_20230523_000127_R22_S00.yaml", 

1245 dict(telescope=None, 

1246 instrument="LSST-TS8", 

1247 dark_time=15.16*u.s, 

1248 detector_exposure_id=202305231936194018, 

1249 detector_group="RTM-004", 

1250 detector_name="S00", 

1251 detector_num=18, 

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

1253 exposure_id=202305231936194, 

1254 exposure_group="202305231936194", 

1255 exposure_time=15.0*u.s, 

1256 focus_z=0.0*u.mm, 

1257 group_counter_end=127, 

1258 group_counter_start=127, 

1259 has_simulated_content=False, 

1260 observation_counter=127, 

1261 observation_id="TS_C_20230523_000127", 

1262 observation_type="flat", 

1263 observation_reason="flat", 

1264 observing_day=20230523, 

1265 physical_filter="unknown", 

1266 science_program="7220D", 

1267 visit_id=202305231936194)), 

1268 ("ts8-TS_C_20230525_000041_R22_S00.yaml", 

1269 dict(telescope=None, 

1270 instrument="LSST-TS8", 

1271 dark_time=30.151*u.s, 

1272 detector_exposure_id=3023052500041018, 

1273 detector_group="RTM-004", 

1274 detector_name="S00", 

1275 detector_num=18, 

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

1277 exposure_id=3023052500041, 

1278 exposure_group="3023052500041", 

1279 exposure_time=30.0*u.s, 

1280 focus_z=0.0*u.mm, 

1281 group_counter_end=41, 

1282 group_counter_start=41, 

1283 has_simulated_content=False, 

1284 observation_counter=41, 

1285 observation_id="TS_C_20230525_000041", 

1286 observation_type="flat", 

1287 observation_reason="flat", 

1288 observing_day=20230525, 

1289 physical_filter="unknown", 

1290 science_program="7227D", 

1291 visit_id=3023052500041)), 

1292 ) 

1293 for filename, expected in test_data: 

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

1295 with warnings.catch_warnings(): 

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

1297 warnings.simplefilter("ignore", VerifyWarning) 

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

1299 

1300 def test_ucdcam_translator(self): 

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

1302 dict(telescope=None, 

1303 instrument="LSST-UCDCam", 

1304 dark_time=2.07859*u.s, 

1305 detector_exposure_id=42370917130, 

1306 detector_group="R21", 

1307 detector_name="S01", 

1308 detector_num=10, 

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

1310 exposure_id=2023103100227, 

1311 exposure_group="2023103100227", 

1312 exposure_time=1.0*u.s, 

1313 focus_z=0.0*u.mm, 

1314 group_counter_end=227, 

1315 group_counter_start=227, 

1316 has_simulated_content=False, 

1317 observation_counter=227, 

1318 observation_id="TS_C_20231031_000227", 

1319 observation_type="flat", 

1320 observation_reason="flat", 

1321 observing_day=20231031, 

1322 physical_filter="r", 

1323 science_program="unknown", 

1324 visit_id=2023103100227)), 

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

1326 dict(telescope=None, 

1327 instrument="LSST-UCDCam", 

1328 dark_time=3.082*u.s, 

1329 detector_exposure_id=179029732609, 

1330 detector_group="R22", 

1331 detector_name="S01", 

1332 detector_num=1, 

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

1334 exposure_id=3023073000237, 

1335 exposure_group="3023073000237", 

1336 exposure_time=2.0*u.s, 

1337 focus_z=0.0*u.mm, 

1338 group_counter_end=237, 

1339 group_counter_start=237, 

1340 has_simulated_content=False, 

1341 observation_counter=237, 

1342 observation_id="TS_C_20230730_000237", 

1343 observation_type="flat", 

1344 observation_reason="flat", 

1345 observing_day=20230730, 

1346 physical_filter="r", 

1347 science_program="unknown", 

1348 visit_id=3023073000237)), 

1349 ) 

1350 for filename, expected in test_data: 

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

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

1353 

1354 def test_checker(self): 

1355 filename = "latiss-future.yaml" 

1356 from astro_metadata_translator.tests import read_test_file 

1357 from astro_metadata_translator import ObservationInfo 

1358 header = read_test_file(filename, self.datadir) 

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

1360 self.assertTrue(obsInfo) 

1361 

1362 def test_fix_header(self): 

1363 from astro_metadata_translator import fix_header 

1364 from astro_metadata_translator.tests import read_test_file 

1365 # Test that header fix up is working 

1366 # Not all headers are used in metadata translation 

1367 test_data = ( 

1368 ("latiss-AT_O_20210212_000006.yaml", 

1369 dict(RASTART=260.024385071917)), 

1370 ("latiss-AT_O_20210210_000011.yaml", 

1371 dict(RASTART=355.41750341182313)), 

1372 ) 

1373 for filename, expected in test_data: 

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

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

1376 modified = fix_header(header) 

1377 self.assertTrue(modified) 

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

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

1380 

1381 

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

1383 unittest.main()