Coverage for tests/test_translator.py: 16%

102 statements  

« prev     ^ index     » next       coverage.py v7.5.0, created at 2024-04-26 04:02 -0700

1# This file is part of obs_lsst. 

2# 

3# Developed for the LSST Data Management System. 

4# This product includes software developed by the LSST Project 

5# (http://www.lsst.org). 

6# See the COPYRIGHT file at the top-level directory of this distribution 

7# for details of code ownership. 

8# 

9# This program is free software: you can redistribute it and/or modify 

10# it under the terms of the GNU General Public License as published by 

11# the Free Software Foundation, either version 3 of the License, or 

12# (at your option) any later version. 

13# 

14# This program is distributed in the hope that it will be useful, 

15# but WITHOUT ANY WARRANTY; without even the implied warranty of 

16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

17# GNU General Public License for more details. 

18# 

19# You should have received a copy of the GNU General Public License 

20# along with this program. If not, see <http://www.gnu.org/licenses/>. 

21 

22import os.path 

23import unittest 

24import warnings 

25import astropy.units as u 

26import astropy.units.cds as cds 

27from astropy.io.fits.verify import VerifyWarning 

28 

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

30from astro_metadata_translator.tests import MetadataAssertHelper 

31 

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

33 

34 

35class LsstMetadataTranslatorTestCase(unittest.TestCase, MetadataAssertHelper): 

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

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

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

39 

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

41 

42 def test_lsstCam_translator(self): 

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

44 dict(telescope="Simonyi Survey Telescope", 

45 instrument="LSSTCam", 

46 boresight_rotation_coord="unknown", 

47 dark_time=0.0*u.s, 

48 detector_exposure_id=0x269200011d, 

49 detector_group="R10", 

50 detector_name="S02", 

51 detector_num=29, 

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

53 exposure_id=3019031900001, 

54 exposure_group="3019031900001", 

55 exposure_time=0.0*u.s, 

56 focus_z=0.0*u.mm, 

57 group_counter_end=1, 

58 group_counter_start=1, 

59 has_simulated_content=False, 

60 object="UNKNOWN", 

61 observation_counter=1, 

62 observation_id="MC_C_20190319_000001", 

63 observation_type="bias", 

64 observation_reason="bias", 

65 observing_day=20190319, 

66 physical_filter="unknown", 

67 pressure=None, 

68 relative_humidity=None, 

69 science_program="unknown", 

70 temperature=None, 

71 visit_id=3019031900001)), 

72 ("lsstCam-MC_C_20190319_000001_R22_S21.yaml", 

73 dict(telescope="Simonyi Survey Telescope", 

74 instrument="LSSTCam", 

75 boresight_rotation_coord="unknown", 

76 dark_time=0.0*u.s, 

77 detector_exposure_id=0x2692000161, 

78 detector_group="R22", 

79 detector_name="S21", 

80 detector_num=97, 

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

82 exposure_id=3019031900001, 

83 exposure_group="3019031900001", 

84 exposure_time=0.0*u.s, 

85 focus_z=0.0*u.mm, 

86 group_counter_end=1, 

87 group_counter_start=1, 

88 has_simulated_content=False, 

89 object="UNKNOWN", 

90 observation_counter=1, 

91 observation_id="MC_C_20190319_000001", 

92 observation_type="bias", 

93 observation_reason="bias", 

94 observing_day=20190319, 

95 physical_filter="unknown", 

96 pressure=None, 

97 relative_humidity=None, 

98 science_program="unknown", 

99 temperature=None, 

100 visit_id=3019031900001)), 

101 ("lsstCam-MC_C_20190322_000002_R10_S22.yaml", 

102 dict(telescope="Simonyi Survey Telescope", 

103 instrument="LSSTCam", 

104 boresight_rotation_coord="unknown", 

105 dark_time=1.0*u.s, 

106 detector_exposure_id=0x2693800223, 

107 detector_group="R10", 

108 detector_name="S22", 

109 detector_num=35, 

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

111 exposure_id=3019032200002, 

112 exposure_group="3019032200002", 

113 exposure_time=1.0*u.s, 

114 focus_z=0.0*u.mm, 

115 group_counter_end=2, 

116 group_counter_start=2, 

117 has_simulated_content=False, 

118 object="UNKNOWN", 

119 observation_counter=2, 

120 observation_id="MC_C_20190322_000002", 

121 observation_type="flat", 

122 observation_reason="flat", 

123 observing_day=20190322, 

124 physical_filter="SDSSi~ND_OD0.5", 

125 pressure=None, 

126 relative_humidity=None, 

127 science_program="6489D", 

128 temperature=None, 

129 visit_id=3019032200002)), 

130 ("lsstCam-MC_C_20190406_000643_R10_S00.yaml", 

131 dict(telescope="Simonyi Survey Telescope", 

132 instrument="LSSTCam", 

133 boresight_rotation_coord="unknown", 

134 dark_time=1007.422*u.s, 

135 detector_exposure_id=0x269b02831b, 

136 detector_group="R10", 

137 detector_name="S00", 

138 detector_num=27, 

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

140 exposure_id=3019040600643, 

141 exposure_group="3019040600643", 

142 exposure_time=999.99*u.s, 

143 focus_z=0.0*u.mm, 

144 group_counter_end=643, 

145 group_counter_start=643, 

146 has_simulated_content=False, 

147 object="UNKNOWN", 

148 observation_counter=643, 

149 observation_id="MC_C_20190406_000643", 

150 observation_type="flat", 

151 observation_reason="lambda", 

152 observing_day=20190406, 

153 physical_filter="950nm", 

154 pressure=None, 

155 relative_humidity=None, 

156 science_program="6549D", 

157 temperature=None, 

158 visit_id=3019040600643)), 

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

160 dict(telescope="Simonyi Survey Telescope", 

161 instrument="LSSTCam", 

162 boresight_rotation_coord="unknown", 

163 dark_time=0.0*u.s, 

164 detector_exposure_id=0xdb480011d, 

165 detector_group="R10", 

166 detector_name="S02", 

167 detector_num=29, 

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

169 exposure_id=2029031900001, 

170 exposure_group="2029031900001", 

171 exposure_time=0.0*u.s, 

172 focus_z=0.0*u.mm, 

173 group_counter_end=1, 

174 group_counter_start=1, 

175 has_simulated_content=False, 

176 object="UNKNOWN", 

177 observation_counter=1, 

178 observation_id="MC_C_20190319_000001", 

179 observation_type="bias", 

180 observation_reason="bias", 

181 observing_day=20290319, 

182 physical_filter="unknown", 

183 pressure=None, 

184 relative_humidity=None, 

185 science_program="unknown", 

186 temperature=None, 

187 visit_id=2029031900001)), 

188 ("lsstCam-MC_C_20231107_000078_R01_S01.json", 

189 dict(telescope="Simonyi Survey Telescope", 

190 instrument="LSSTCam", 

191 boresight_rotation_coord="unknown", 

192 dark_time=0.092*u.s, 

193 detector_exposure_id=0x9e1004e01, 

194 detector_group="R01", 

195 detector_name="S01", 

196 detector_num=1, 

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

198 exposure_id=2023110700078, 

199 exposure_group="2023110700078", 

200 exposure_time=0.0*u.s, 

201 focus_z=0.0*u.mm, 

202 group_counter_end=78, 

203 group_counter_start=78, 

204 has_simulated_content=False, 

205 object="UNKNOWN", 

206 observation_counter=78, 

207 observation_id="MC_C_20231107_000078", 

208 observation_type="bias", 

209 observation_reason="bot_persistence", 

210 observing_day=20231107, 

211 physical_filter="ph_5", 

212 pressure=None, 

213 relative_humidity=None, 

214 science_program="13518", 

215 temperature=None, 

216 visit_id=2023110700078)), 

217 ) 

218 for filename, expected in test_data: 

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

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

221 

222 def test_phoSimLsstCam_translator(self): 

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

224 dict(telescope="Simonyi Survey Telescope", 

225 instrument="LSSTCam", 

226 boresight_rotation_coord="sky", 

227 dark_time=15.0*u.s, 

228 detector_exposure_id=0x401780205a, 

229 detector_group="R22", 

230 detector_name="S00", 

231 detector_num=90, 

232 detector_serial="E2V-CCD250-369", 

233 detector_unique_name="R22_S00", 

234 exposure_group="4010021700032", 

235 exposure_id=4010021700032, 

236 exposure_time=15.0*u.s, 

237 focus_z=0.0*u.mm, 

238 group_counter_end=32, 

239 group_counter_start=32, 

240 has_simulated_content=True, 

241 object="UNKNOWN", 

242 observation_counter=32, 

243 observation_id="MC_H_20100217_000032", 

244 observation_reason="phosim", 

245 observation_type="science", 

246 observing_day=20100217, 

247 physical_filter="g", 

248 pressure=None, 

249 relative_humidity=None, 

250 science_program="9006001", 

251 temperature=None, 

252 visit_id=4010021700032)), 

253 ) 

254 for filename, expected in test_data: 

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

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

257 check_wcs=False, **expected) 

258 

259 def test_lsstCamSim_translator(self): 

260 test_data = (("lsstCamSim-MC_S_20240321_000720_R22_S11.yaml", 

261 dict(telescope="Simonyi Survey Telescope", 

262 instrument="LSSTCamSim", 

263 boresight_rotation_coord="sky", 

264 dark_time=30.0*u.s, 

265 detector_exposure_id=730756993118, 

266 detector_group="R22", 

267 detector_name="S11", 

268 detector_num=94, 

269 detector_serial="E2V-CCD250-382", 

270 detector_unique_name="R22_S11", 

271 exposure_group="7024032100720", 

272 exposure_id=7024032100720, 

273 exposure_time=30.0*u.s, 

274 focus_z=0.0*u.mm, 

275 group_counter_end=720, 

276 group_counter_start=720, 

277 has_simulated_content=True, 

278 object="UNKNOWN", 

279 observation_counter=720, 

280 observation_id="MC_S_20240321_000720", 

281 observation_reason="survey", 

282 observation_type="science", 

283 observing_day=20240321, 

284 physical_filter="r_57", 

285 pressure=None, 

286 relative_humidity=None, 

287 science_program="720", 

288 temperature=None, 

289 visit_id=7024032100720)), 

290 ) 

291 for filename, expected in test_data: 

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

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

294 check_wcs=False, **expected) 

295 

296 def test_comCam_translator(self): 

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

298 dict(telescope="Simonyi Survey Telescope", 

299 instrument="LSSTComCam", 

300 boresight_rotation_coord="unknown", 

301 dark_time=0.398*u.s, 

302 detector_exposure_id=0x26b6000100, 

303 detector_group="R22", 

304 detector_name="S00", 

305 detector_num=0, 

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

307 exposure_id=3019053000001, 

308 exposure_group="3019053000001", 

309 exposure_time=0.0*u.s, 

310 focus_z=0.0*u.mm, 

311 group_counter_end=1, 

312 group_counter_start=1, 

313 has_simulated_content=False, 

314 object="UNKNOWN", 

315 observation_counter=1, 

316 observation_id="CC_C_20190530_000001", 

317 observation_type="bias", 

318 observation_reason="bias", 

319 observing_day=20190530, 

320 physical_filter="unknown", 

321 pressure=None, 

322 relative_humidity=None, 

323 science_program="unknown", 

324 temperature=None, 

325 visit_id=3019053000001)), 

326 ("comCam-CC_C_20190526_000223_R22_S01.yaml", 

327 dict(telescope="Simonyi Survey Telescope", 

328 instrument="LSSTComCam", 

329 boresight_rotation_coord="unknown", 

330 dark_time=0.034*u.s, 

331 detector_exposure_id=0x26b400df01, 

332 detector_group="R22", 

333 detector_name="S01", 

334 detector_num=1, 

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

336 exposure_id=3019052600223, 

337 exposure_group="3019052600223", 

338 exposure_time=0.0*u.s, 

339 focus_z=0.0*u.mm, 

340 group_counter_end=223, 

341 group_counter_start=223, 

342 has_simulated_content=False, 

343 object="UNKNOWN", 

344 observation_counter=223, 

345 observation_id="CC_C_20190526_000223", 

346 observation_type="bias", 

347 observation_reason="dark", 

348 observing_day=20190526, 

349 physical_filter="unknown", 

350 pressure=None, 

351 relative_humidity=None, 

352 science_program="unknown", 

353 temperature=None, 

354 visit_id=3019052600223)), 

355 ) 

356 for filename, expected in test_data: 

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

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

359 

360 def test_comCamSim_translator(self): 

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

362 dict(telescope="Simonyi Survey Telescope", 

363 instrument="LSSTComCamSim", 

364 boresight_rotation_coord="unknown", 

365 dark_time=0.0*u.s, 

366 detector_group="R22", 

367 detector_name="S00", 

368 detector_num=0, 

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

370 exposure_id=5024011700000, 

371 exposure_group="5024011700000", 

372 exposure_time=0.0*u.s, 

373 focus_z=0.0 * u.mm, 

374 group_counter_end=5024011700000, 

375 group_counter_start=5024011700000, 

376 has_simulated_content=True, 

377 object="UNKNOWN", 

378 observation_counter=0, 

379 observation_id="IM_P_20240117_000000", 

380 observation_type="bias", 

381 observation_reason="calibration", 

382 observing_day=20240117, 

383 physical_filter="r_03", 

384 pressure=None, 

385 relative_humidity=None, 

386 science_program="calibration", 

387 temperature=None, 

388 visit_id=5024011700000, 

389 )), 

390 ("comCamSim-CC_S_20240321_000093_R22_S22.yaml", 

391 dict(telescope="Simonyi Survey Telescope", 

392 instrument="LSSTComCamSim", 

393 boresight_rotation_coord="sky", 

394 dark_time=33.0546 * u.s, 

395 detector_group="R22", 

396 detector_name="S22", 

397 detector_num=8, 

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

399 exposure_id=7024032100093, 

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

401 exposure_time=30.0 * u.s, 

402 focus_z=0.0 * u.mm, 

403 group_counter_end=93, 

404 group_counter_start=93, 

405 has_simulated_content=True, 

406 object="TEST", 

407 observation_counter=93, 

408 observation_id="CC_S_20240321_000093", 

409 observation_type="science", 

410 observation_reason="object", 

411 observing_day=20240321, 

412 physical_filter="r_03", 

413 pressure=None, 

414 relative_humidity=None, 

415 science_program="unknown", 

416 temperature=None, 

417 visit_id=2910085149940000, 

418 )), 

419 ) 

420 for filename, expected in test_data: 

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

422 self.assertObservationInfoFromYaml( 

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

424 ) 

425 

426 def test_phoSimComCam_translator(self): 

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

428 dict(telescope="Simonyi Survey Telescope", 

429 instrument="LSSTComCam", 

430 boresight_rotation_coord="sky", 

431 dark_time=1.0*u.s, 

432 detector_exposure_id=0x4017977100, 

433 detector_group="R22", 

434 detector_name="S00", 

435 detector_num=0, 

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

437 exposure_id=4010021706001, 

438 exposure_group="4010021706001", 

439 exposure_time=1.0*u.s, 

440 focus_z=0.0*u.mm, 

441 group_counter_end=6001, 

442 group_counter_start=6001, 

443 has_simulated_content=True, 

444 object="UNKNOWN", 

445 observation_counter=6001, 

446 observation_id="CC_H_20100217_006001", 

447 observation_type="science", 

448 observation_reason="test", 

449 observing_day=20100217, 

450 physical_filter="g_01", 

451 pressure=None, 

452 relative_humidity=None, 

453 science_program="9006001", 

454 temperature=None, 

455 visit_id=4010021706001)), 

456 ) 

457 for filename, expected in test_data: 

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

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

460 check_wcs=False, **expected) 

461 

462 def test_phosim_translator(self): 

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

464 dict(telescope="Simonyi Survey Telescope", 

465 instrument="LSSTCam-PhoSim", 

466 boresight_rotation_coord="sky", 

467 dark_time=30.0*u.s, 

468 detector_exposure_id=204595038, 

469 detector_group="R11", 

470 detector_name="S02", 

471 detector_num=38, 

472 detector_serial="R11_S02", 

473 exposure_id=204595, 

474 exposure_group="204595", 

475 exposure_time=30.0*u.s, 

476 focus_z=0.0*u.mm, 

477 group_counter_end=204595, 

478 group_counter_start=204595, 

479 has_simulated_content=True, 

480 object="UNKNOWN", 

481 observation_counter=0, 

482 observation_id="204595", 

483 observation_type="science", 

484 observation_reason="phosim", 

485 observing_day=20221005, 

486 physical_filter="i", 

487 pressure=520.0*cds.mmHg, 

488 relative_humidity=40.0, 

489 science_program="204595", 

490 temperature=20.0*u.deg_C, 

491 visit_id=204595, 

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

493 ) 

494 for filename, expected in test_data: 

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

496 with warnings.catch_warnings(): 

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

498 warnings.simplefilter("ignore", VerifyWarning) 

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

500 

501 def test_latiss_translator(self): 

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

503 dict(telescope="Rubin Auxiliary Telescope", 

504 instrument="LATISS", 

505 boresight_rotation_coord="unknown", 

506 dark_time=27.0*u.s, 

507 detector_exposure_id=0x2638004100, 

508 detector_group="RXX", 

509 detector_name="S00", 

510 detector_num=0, 

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

512 exposure_id=3018092000065, 

513 exposure_group="3018092000065", 

514 exposure_time=27.0*u.s, 

515 focus_z=0.0*u.mm, 

516 group_counter_end=65, 

517 group_counter_start=65, 

518 has_simulated_content=False, 

519 object="UNKNOWN", 

520 observation_counter=65, 

521 observation_id="AT_C_20180920_000065", 

522 observation_type="unknown", 

523 observation_reason="unknown", 

524 observing_day=20180920, 

525 physical_filter="unknown~unknown", 

526 pressure=None, 

527 relative_humidity=None, 

528 science_program="unknown", 

529 temperature=None, 

530 visit_id=3018092000065, 

531 )), 

532 ("latiss-AT_O_20190306_000014.yaml", 

533 dict(telescope="Rubin Auxiliary Telescope", 

534 instrument="LATISS", 

535 boresight_rotation_coord="unknown", 

536 dark_time=1.06*u.s, 

537 detector_exposure_id=0x68b800e00, 

538 detector_group="RXX", 

539 detector_name="S00", 

540 detector_num=0, 

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

542 exposure_id=2019030600014, 

543 exposure_group="2019030600014", 

544 exposure_time=1.06*u.s, 

545 focus_z=0.0*u.mm, 

546 group_counter_end=14, 

547 group_counter_start=14, 

548 has_simulated_content=False, 

549 object="UNKNOWN", 

550 observation_counter=14, 

551 observation_id="AT_O_20190306_000014", 

552 observation_type="unknown", 

553 observation_reason="unknown", 

554 observing_day=20190306, 

555 physical_filter="unknown~unknown", 

556 pressure=None, 

557 relative_humidity=None, 

558 science_program="unknown", 

559 temperature=None, 

560 visit_id=2019030600014, 

561 )), 

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

563 dict(telescope="Rubin Auxiliary Telescope", 

564 instrument="LATISS", 

565 boresight_rotation_coord="unknown", 

566 dark_time=0.0*u.s, 

567 detector_exposure_id=0x697001600, 

568 detector_group="RXX", 

569 detector_name="S00", 

570 detector_num=0, 

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

572 exposure_id=2019032900022, 

573 exposure_group="2019032900022", 

574 exposure_time=0.0*u.s, 

575 focus_z=0.0*u.mm, 

576 group_counter_end=22, 

577 group_counter_start=22, 

578 has_simulated_content=False, 

579 object="UNKNOWN", 

580 observation_counter=22, 

581 observation_id="AT_O_20190329_000022", 

582 observation_type="bias", 

583 observation_reason="unknown", 

584 observing_day=20190329, 

585 physical_filter="unknown~unknown", 

586 pressure=None, 

587 relative_humidity=None, 

588 science_program="unknown", 

589 temperature=None, 

590 visit_id=2019032900022, 

591 )), 

592 ("latiss-future.yaml", 

593 dict(telescope="Rubin Auxiliary Telescope", 

594 instrument="LATISS", 

595 boresight_rotation_coord="unknown", 

596 dark_time=0.0*u.s, 

597 detector_exposure_id=0x74e001600, 

598 detector_group="RXX", 

599 detector_name="S00", 

600 detector_num=0, 

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

602 exposure_id=2020032900022, 

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

604 exposure_time=0.0*u.s, 

605 focus_z=0.0*u.mm, 

606 group_counter_end=22, 

607 group_counter_start=22, 

608 has_simulated_content=False, 

609 object="UNKNOWN", 

610 observation_counter=22, 

611 observation_id="AT_X_20200329_000022", 

612 observation_type="bias", 

613 observation_reason="unknown", 

614 observing_day=20200329, 

615 physical_filter="unknown~unknown", 

616 pressure=None, 

617 relative_humidity=None, 

618 science_program="unknown", 

619 temperature=None, 

620 visit_id=1654305000120024, 

621 )), 

622 ("latiss-AT_O_20190915_000037.yaml", 

623 dict(telescope="Rubin Auxiliary Telescope", 

624 instrument="LATISS", 

625 boresight_rotation_coord="unknown", 

626 dark_time=0.0*u.s, 

627 detector_exposure_id=0x6ec002500, 

628 detector_group="RXX", 

629 detector_name="S00", 

630 detector_num=0, 

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

632 exposure_id=2019091500037, 

633 exposure_group="bias_0027_0100", 

634 exposure_time=0.0*u.s, 

635 focus_z=0.0*u.mm, 

636 group_counter_end=37, 

637 group_counter_start=37, 

638 has_simulated_content=False, 

639 object="UNKNOWN", 

640 observation_counter=37, 

641 observation_id="AT_O_20190915_000037", 

642 observation_type="bias", 

643 observation_reason="unknown", 

644 observing_day=20190915, 

645 physical_filter="unknown~unknown", 

646 pressure=None, 

647 relative_humidity=None, 

648 science_program="unknown", 

649 temperature=None, 

650 visit_id=3575576933793566714, 

651 )), 

652 ("latiss-AT_O_20191031_000004.yaml", 

653 dict(telescope="Rubin Auxiliary Telescope", 

654 instrument="LATISS", 

655 boresight_rotation_coord="unknown", 

656 dark_time=3.0*u.s, 

657 detector_exposure_id=0x703000400, 

658 detector_group="RXX", 

659 detector_name="S00", 

660 detector_num=0, 

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

662 exposure_id=2019103100004, 

663 exposure_group="TEST01", 

664 exposure_time=3.0*u.s, 

665 focus_z=0.0*u.mm, 

666 group_counter_end=4, 

667 group_counter_start=4, 

668 has_simulated_content=False, 

669 object="UNKNOWN", 

670 observation_counter=4, 

671 observation_id="AT_O_20191031_000004", 

672 observation_type="engtest", 

673 observation_reason="unknown", 

674 observing_day=20191031, 

675 physical_filter="unknown~unknown", 

676 pressure=None, 

677 relative_humidity=None, 

678 science_program="unknown", 

679 temperature=None, 

680 visit_id=1123819875881954006, 

681 )), 

682 ("latiss-AT_O_20191104_000003.yaml", 

683 dict(telescope="Rubin Auxiliary Telescope", 

684 instrument="LATISS", 

685 boresight_rotation_coord="unknown", 

686 dark_time=3.0*u.s, 

687 detector_exposure_id=0x705000300, 

688 detector_group="RXX", 

689 detector_name="S00", 

690 detector_num=0, 

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

692 exposure_id=2019110400003, 

693 exposure_group="TEST01", 

694 exposure_time=3.0*u.s, 

695 focus_z=0.0*u.mm, 

696 group_counter_end=3, 

697 group_counter_start=3, 

698 has_simulated_content=False, 

699 object="UNKNOWN", 

700 observation_counter=3, 

701 observation_id="AT_O_20191104_000003", 

702 observation_type="engtest", 

703 observation_reason="unknown", 

704 observing_day=20191104, 

705 physical_filter="unknown~unknown", 

706 pressure=None, 

707 relative_humidity=None, 

708 science_program="unknown", 

709 temperature=None, 

710 visit_id=1123819875881954006, 

711 )), 

712 ("latiss-AT_O_20191113_000061.yaml", 

713 dict(telescope="Rubin Auxiliary Telescope", 

714 instrument="LATISS", 

715 boresight_rotation_coord="unknown", 

716 dark_time=0.5*u.s, 

717 detector_exposure_id=0x709803d00, 

718 detector_group="RXX", 

719 detector_name="S00", 

720 detector_num=0, 

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

722 exposure_id=2019111300061, 

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

724 exposure_time=0.5*u.s, 

725 focus_z=0.0*u.mm, 

726 group_counter_end=61, 

727 group_counter_start=61, 

728 has_simulated_content=False, 

729 object="UNKNOWN", 

730 observation_counter=61, 

731 observation_id="AT_O_20191113_000061", 

732 observation_type="engtest", 

733 observation_reason="unknown", 

734 observing_day=20191113, 

735 physical_filter="empty~ronchi90lpmm", 

736 pressure=None, 

737 relative_humidity=None, 

738 science_program="unknown", 

739 temperature=None, 

740 visit_id=1892608703001301325, 

741 )), 

742 ("latiss-AT_O_20191118_000011.yaml", 

743 dict(telescope="Rubin Auxiliary Telescope", 

744 instrument="LATISS", 

745 boresight_rotation_coord="unknown", 

746 dark_time=15.0*u.s, 

747 detector_exposure_id=0x70c000b00, 

748 detector_group="RXX", 

749 detector_name="S00", 

750 detector_num=0, 

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

752 exposure_id=2019111800011, 

753 exposure_group="dark_0002_0005", 

754 exposure_time=15.0*u.s, 

755 focus_z=0.0*u.mm, 

756 group_counter_end=11, 

757 group_counter_start=11, 

758 has_simulated_content=False, 

759 object="UNKNOWN", 

760 observation_counter=11, 

761 observation_id="AT_O_20191118_000011", 

762 observation_type="dark", 

763 observation_reason="unknown", 

764 observing_day=20191118, 

765 physical_filter="diffuser~ronchi170lpmm", 

766 pressure=None, 

767 relative_humidity=None, 

768 science_program="unknown", 

769 temperature=None, 

770 visit_id=6861884254113212214, 

771 )), 

772 ("latiss-AT_O_20200121_000045.yaml", 

773 dict(telescope="Rubin Auxiliary Telescope", 

774 instrument="LATISS", 

775 boresight_rotation_coord="sky", 

776 dark_time=100.0*u.s, 

777 detector_exposure_id=0x72c002d00, 

778 detector_group="RXX", 

779 detector_name="S00", 

780 detector_num=0, 

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

782 exposure_id=2020012100045, 

783 exposure_group="test", 

784 exposure_time=100.0*u.s, 

785 focus_z=0.560002659202*u.mm, 

786 group_counter_end=45, 

787 group_counter_start=45, 

788 has_simulated_content=False, 

789 object="UNKNOWN", 

790 observation_counter=45, 

791 observation_id="AT_O_20200121_000045", 

792 observation_type="engtest", 

793 observation_reason="unknown", 

794 observing_day=20200121, 

795 physical_filter="blank_bk7_wg05~empty", 

796 pressure=None, 

797 relative_humidity=None, 

798 science_program="unknown", 

799 temperature=None, 

800 visit_id=4702443654717948604, 

801 check_altaz=True, 

802 )), 

803 ("latiss-AT_O_20200128_000379.yaml", 

804 dict(telescope="Rubin Auxiliary Telescope", 

805 instrument="LATISS", 

806 boresight_rotation_coord="sky", 

807 dark_time=5.0*u.s, 

808 detector_exposure_id=0x72f817b00, 

809 detector_group="RXX", 

810 detector_name="S00", 

811 detector_num=0, 

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

813 exposure_id=2020012800379, 

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

815 exposure_time=5.0*u.s, 

816 focus_z=0.35416568455*u.mm, 

817 group_counter_end=379, 

818 group_counter_start=379, 

819 has_simulated_content=False, 

820 object="HD107696", 

821 observation_counter=379, 

822 observation_id="AT_O_20200128_000379", 

823 observation_type="science", 

824 observation_reason="science", 

825 observing_day=20200128, 

826 physical_filter="KPNO_406_828nm~empty", 

827 pressure=None, 

828 relative_humidity=None, 

829 science_program="unknown", 

830 temperature=None, 

831 visit_id=1602123521660000, 

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

838 dict(telescope="Rubin Auxiliary Telescope", 

839 instrument="LATISS", 

840 boresight_rotation_coord="sky", 

841 dark_time=30.3176279067993*u.s, 

842 detector_exposure_id=0x8be815c00, 

843 detector_group="RXX", 

844 detector_name="S00", 

845 detector_num=0, 

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

847 exposure_id=2022040500348, 

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

849 exposure_time=30.0*u.s, 

850 focus_z=0.0697081759572029*u.mm, 

851 group_counter_end=349, 

852 group_counter_start=348, 

853 has_simulated_content=False, 

854 object="LATISS_E6A_00000040", 

855 observation_counter=348, 

856 observation_id="AT_O_20220405_000348", 

857 observation_type="science", 

858 observation_reason="object", 

859 observing_day=20220405, 

860 physical_filter="SDSSr~empty", 

861 pressure=744.3*u.hPa, 

862 relative_humidity=19.0, 

863 science_program="LATISS_E6A", 

864 temperature=12.3*u.deg_C, 

865 visit_id=2291434871810000, 

866 # We have some timing discrepancies in the headers 

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

868 # the recorded AZ/EL/TIME. 

869 wcs_params=dict(max_sep=7.), 

870 )), 

871 ("latiss-AT_O_20220405_000349.yaml", 

872 dict(telescope="Rubin Auxiliary Telescope", 

873 instrument="LATISS", 

874 boresight_rotation_coord="sky", 

875 dark_time=30.2387452125549*u.s, 

876 detector_exposure_id=0x8be815d00, 

877 detector_group="RXX", 

878 detector_name="S00", 

879 detector_num=0, 

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

881 exposure_id=2022040500349, 

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

883 exposure_time=30.0*u.s, 

884 focus_z=0.0697081759572029*u.mm, 

885 group_counter_end=349, 

886 group_counter_start=348, 

887 has_simulated_content=False, 

888 object="LATISS_E6A_00000040", 

889 observation_counter=349, 

890 observation_id="AT_O_20220405_000349", 

891 observation_type="science", 

892 observation_reason="object", 

893 observing_day=20220405, 

894 physical_filter="SDSSr~empty", 

895 pressure=744.3*u.hPa, 

896 relative_humidity=19.0, 

897 science_program="LATISS_E6A", 

898 temperature=12.3*u.deg_C, 

899 visit_id=2291434871810000, 

900 # We have some timing discrepancies in the headers 

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

902 # the recorded AZ/EL/TIME. 

903 wcs_params=dict(max_sep=7.), 

904 )), 

905 ("latiss-AT_C_20220426_000004_R00_S00.yaml", 

906 dict(telescope="Rubin Auxiliary Telescope", 

907 instrument="LATISS", 

908 boresight_rotation_coord="unknown", 

909 dark_time=537.406*u.s, 

910 detector_exposure_id=0x28c9000400, 

911 detector_group="RXX", 

912 detector_name="S00", 

913 detector_num=0, 

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

915 exposure_id=3022042600004, 

916 exposure_group="3022042600004", 

917 exposure_time=-1.0*u.s, 

918 focus_z=0.0*u.mm, 

919 group_counter_end=4, 

920 group_counter_start=4, 

921 has_simulated_content=False, 

922 object="UNKNOWN", 

923 observation_counter=4, 

924 observation_id="AT_C_20220426_000004", 

925 observation_type="unknown", 

926 observation_reason="unknown", 

927 observing_day=20220426, 

928 physical_filter="unknown~unknown", 

929 pressure=None, 

930 relative_humidity=None, 

931 science_program="unknown", 

932 temperature=None, 

933 visit_id=3022042600004, 

934 )), 

935 ("latiss-AT_O_20230321_000053.yaml", 

936 dict(telescope="Rubin Auxiliary Telescope", 

937 instrument="LATISS", 

938 boresight_rotation_coord="unknown", 

939 dark_time=30.0126*u.s, 

940 detector_exposure_id=0x96d803500, 

941 detector_group="RXX", 

942 detector_name="S00", 

943 detector_num=0, 

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

945 exposure_id=2023032100053, 

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

947 exposure_time=30.0*u.s, 

948 focus_z=0.0*u.mm, 

949 group_counter_end=53, 

950 group_counter_start=53, 

951 has_simulated_content=False, 

952 object="slew_icrs", 

953 observation_counter=53, 

954 observation_id="AT_O_20230321_000053", 

955 observation_type="dark", 

956 observation_reason="dark", 

957 observing_day=20230321, 

958 physical_filter="empty~empty", 

959 pressure=None, 

960 relative_humidity=None, 

961 science_program="unknown", 

962 temperature=None, 

963 visit_id=2593446676330000, 

964 check_altaz=True, 

965 )), 

966 ("latiss-AT_O_20230705_000379_R00_S00.json", 

967 dict(telescope="Rubin Auxiliary Telescope", 

968 instrument="LATISS", 

969 boresight_rotation_coord="sky", 

970 dark_time=30.2418*u.s, 

971 detector_exposure_id=0x9a2817b00, 

972 detector_group="RXX", 

973 detector_name="S00", 

974 detector_num=0, 

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

976 exposure_id=2023070500379, 

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

978 exposure_time=30.0*u.s, 

979 focus_z=-0.008921561762690544*u.mm, 

980 group_counter_end=379, 

981 group_counter_start=379, 

982 has_simulated_content=False, 

983 object="HD165763", 

984 observation_counter=379, 

985 observation_id="AT_O_20230705_000379", 

986 observation_type="science", 

987 observation_reason="sitcom-857", 

988 observing_day=20230705, 

989 physical_filter="empty~holo4_003", 

990 pressure=777.80*u.hPa, 

991 relative_humidity=15.149999618530273, 

992 science_program="BLOCK-59", 

993 temperature=5.775000095367432*u.deg_C, 

994 visit_id=2685487956090000, 

995 check_altaz=True, 

996 )), 

997 ) 

998 with warnings.catch_warnings(): 

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

1000 warnings.simplefilter("ignore", VerifyWarning) 

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

1002 for filename, expected in test_data: 

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

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

1005 

1006 # This translation should fail 

1007 with self.assertRaises(KeyError): 

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

1009 

1010 def test_imsim_translator(self): 

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

1012 dict(telescope="Simonyi Survey Telescope", 

1013 instrument="LSSTCam-imSim", 

1014 boresight_rotation_coord="sky", 

1015 dark_time=0.0*u.s, 

1016 detector_exposure_id=3010002036, 

1017 detector_group="R11", 

1018 detector_name="S00", 

1019 detector_num=36, 

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

1021 exposure_id=3010002, 

1022 exposure_group="3010002", 

1023 exposure_time=0.0*u.s, 

1024 focus_z=0.0*u.mm, 

1025 group_counter_end=3010002, 

1026 group_counter_start=3010002, 

1027 has_simulated_content=True, 

1028 object="UNKNOWN", 

1029 observation_counter=0, 

1030 observation_id="3010002", 

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

1032 observation_reason="imsim", 

1033 observing_day=20220101, 

1034 physical_filter="i", 

1035 pressure=None, 

1036 relative_humidity=40.0, 

1037 science_program="42", 

1038 temperature=None, 

1039 visit_id=3010002, 

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

1041 )), 

1042 ("imsim-lsst_a_204595_R11_S02_i.yaml", 

1043 dict(telescope="Simonyi Survey Telescope", 

1044 instrument="LSSTCam-imSim", 

1045 boresight_rotation_coord="sky", 

1046 dark_time=30.0*u.s, 

1047 detector_exposure_id=204595038, 

1048 detector_group="R11", 

1049 detector_name="S02", 

1050 detector_num=38, 

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

1052 exposure_id=204595, 

1053 exposure_group="204595", 

1054 exposure_time=30.0*u.s, 

1055 focus_z=0.0*u.mm, 

1056 group_counter_end=204595, 

1057 group_counter_start=204595, 

1058 has_simulated_content=True, 

1059 object="UNKNOWN", 

1060 observation_counter=0, 

1061 observation_id="204595", 

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

1063 observation_reason="imsim", 

1064 observing_day=20221005, 

1065 physical_filter="i_sim_1.4", 

1066 pressure=None, 

1067 relative_humidity=40.0, 

1068 science_program="204595", 

1069 temperature=None, 

1070 visit_id=204595, 

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

1072 )), 

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

1074 dict(telescope="Simonyi Survey Telescope", 

1075 instrument="LSSTCam-imSim", 

1076 boresight_rotation_coord="sky", 

1077 dark_time=30.0*u.s, 

1078 detector_exposure_id=5000007042, 

1079 detector_group="R11", 

1080 detector_name="S20", 

1081 detector_num=42, 

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

1083 exposure_id=5000007, 

1084 exposure_group="5000007", 

1085 exposure_time=30.0*u.s, 

1086 focus_z=0.0*u.mm, 

1087 group_counter_end=5000007, 

1088 group_counter_start=5000007, 

1089 has_simulated_content=True, 

1090 object="UNKNOWN", 

1091 observation_counter=0, 

1092 observation_id="5000007", 

1093 observation_type="flat", 

1094 observation_reason="imsim", 

1095 observing_day=20220806, 

1096 physical_filter="i", 

1097 pressure=None, 

1098 relative_humidity=40.0, 

1099 science_program="5000007", 

1100 temperature=None, 

1101 visit_id=5000007, 

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

1103 )), 

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

1105 dict(telescope="Simonyi Survey Telescope", 

1106 instrument="LSSTCam-imSim", 

1107 boresight_rotation_coord="sky", 

1108 dark_time=500.0*u.s, 

1109 detector_exposure_id=4010003040, 

1110 detector_group="R11", 

1111 detector_name="S11", 

1112 detector_num=40, 

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

1114 exposure_id=4010003, 

1115 exposure_group="4010003", 

1116 exposure_time=500.0*u.s, 

1117 focus_z=0.0*u.mm, 

1118 group_counter_end=4010003, 

1119 group_counter_start=4010003, 

1120 has_simulated_content=True, 

1121 object="UNKNOWN", 

1122 observation_counter=0, 

1123 observation_id="4010003", 

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

1125 observation_reason="imsim", 

1126 observing_day=20220101, 

1127 physical_filter="i", 

1128 pressure=None, 

1129 relative_humidity=40.0, 

1130 science_program="42", 

1131 temperature=None, 

1132 visit_id=4010003, 

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

1134 )), 

1135 ) 

1136 for filename, expected in test_data: 

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

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

1139 

1140 def test_ts3_translator(self): 

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

1142 dict(telescope=None, 

1143 instrument="LSST-TS3", 

1144 dark_time=44.631*u.s, 

1145 detector_exposure_id=201811151255111433, 

1146 detector_group="R433", 

1147 detector_name="S00", 

1148 detector_num=433, 

1149 detector_serial="E2V-CCD250-411", 

1150 exposure_id=201811151255111, 

1151 exposure_group="201811151255111", 

1152 exposure_time=44.631*u.s, 

1153 focus_z=0.0*u.mm, 

1154 group_counter_end=25, 

1155 group_counter_start=25, 

1156 has_simulated_content=False, 

1157 observation_counter=25, 

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

1159 observation_type="flat", 

1160 observation_reason="lambda", 

1161 observing_day=20181115, 

1162 physical_filter="550CutOn", 

1163 science_program="2018-11-15", 

1164 visit_id=201811151255111)), 

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

1166 dict(telescope=None, 

1167 instrument="LSST-TS3", 

1168 dark_time=30.611*u.s, 

1169 detector_exposure_id=201607220607067071, 

1170 detector_group="R071", 

1171 detector_name="S00", 

1172 detector_num=71, 

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

1174 exposure_id=201607220607067, 

1175 exposure_group="201607220607067", 

1176 exposure_time=30.611*u.s, 

1177 focus_z=0.0*u.mm, 

1178 group_counter_end=67, 

1179 group_counter_start=67, 

1180 has_simulated_content=False, 

1181 observation_counter=67, 

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

1183 observation_type="flat", 

1184 observation_reason="lambda", 

1185 observing_day=20160721, 

1186 physical_filter="550CutOn", 

1187 science_program="2016-07-22", 

1188 visit_id=201607220607067)), 

1189 ) 

1190 for filename, expected in test_data: 

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

1192 with warnings.catch_warnings(): 

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

1194 warnings.simplefilter("ignore", VerifyWarning) 

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

1196 

1197 def test_ts8_translator(self): 

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

1199 dict(telescope=None, 

1200 instrument="LSST-TS8", 

1201 dark_time=0.0*u.s, 

1202 detector_exposure_id=201807241041568067, 

1203 detector_group="RTM-010", 

1204 detector_name="S11", 

1205 detector_num=67, 

1206 detector_serial="E2V-CCD250-179", 

1207 exposure_id=201807241041568, 

1208 exposure_group="201807241041568", 

1209 exposure_time=0.0*u.s, 

1210 focus_z=0.0*u.mm, 

1211 group_counter_end=24, 

1212 group_counter_start=24, 

1213 has_simulated_content=False, 

1214 observation_counter=24, 

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

1216 observation_type="bias", 

1217 observation_reason="lambda", 

1218 observing_day=20180724, 

1219 physical_filter="y", 

1220 science_program="6006D", 

1221 visit_id=201807241041568)), 

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

1223 dict(telescope=None, 

1224 instrument="LSST-TS8", 

1225 dark_time=21.913*u.s, 

1226 detector_exposure_id=201807241028453065, 

1227 detector_group="RTM-010", 

1228 detector_name="S02", 

1229 detector_num=65, 

1230 detector_serial="E2V-CCD250-200", 

1231 exposure_id=201807241028453, 

1232 exposure_group="201807241028453", 

1233 exposure_time=21.913*u.s, 

1234 focus_z=0.0*u.mm, 

1235 group_counter_end=17, 

1236 group_counter_start=17, 

1237 has_simulated_content=False, 

1238 observation_counter=17, 

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

1240 observation_type="flat", 

1241 observation_reason="lambda", 

1242 observing_day=20180724, 

1243 physical_filter="z", 

1244 science_program="6006D", 

1245 visit_id=201807241028453)), 

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

1247 dict(telescope=None, 

1248 instrument="LSST-TS8", 

1249 dark_time=300.0*u.s, 

1250 detector_exposure_id=201712151140062027, 

1251 detector_group="RTM-005", 

1252 detector_name="S00", 

1253 detector_num=27, 

1254 detector_serial="E2V-CCD250-220", 

1255 exposure_id=201712151140062, 

1256 exposure_group="201712151140062", 

1257 exposure_time=300.0*u.s, 

1258 focus_z=0.0*u.mm, 

1259 group_counter_end=94, 

1260 group_counter_start=94, 

1261 has_simulated_content=False, 

1262 observation_counter=94, 

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

1264 observation_type="fe55", 

1265 observation_reason="fe55", 

1266 observing_day=20171215, 

1267 physical_filter="i", 

1268 science_program="6288", 

1269 visit_id=201712151140062)), 

1270 ("ts8-TS_C_20220711_000174_R22_S00.yaml", 

1271 dict(telescope=None, 

1272 instrument="LSST-TS8", 

1273 dark_time=210.315*u.s, 

1274 detector_exposure_id=202207111714459018, 

1275 detector_group="RTM-004", 

1276 detector_name="S00", 

1277 detector_num=18, 

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

1279 exposure_id=202207111714459, 

1280 exposure_group="202207111714459", 

1281 exposure_time=210.0*u.s, 

1282 focus_z=0.0*u.mm, 

1283 group_counter_end=174, 

1284 group_counter_start=174, 

1285 has_simulated_content=False, 

1286 observation_counter=174, 

1287 observation_id="TS_C_20220711_000174", 

1288 observation_type="spot", 

1289 observation_reason="spot_flat", 

1290 observing_day=20220711, 

1291 physical_filter="unknown", 

1292 science_program="7074D", 

1293 visit_id=202207111714459)), 

1294 ("ts8-TS_C_20230512_000021_R22_S02.yaml", 

1295 dict(telescope=None, 

1296 instrument="LSST-TS8", 

1297 dark_time=15.165*u.s, 

1298 detector_exposure_id=202305121917591020, 

1299 detector_group="RTM-004", 

1300 detector_name="S02", 

1301 detector_num=20, 

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

1303 exposure_id=202305121917591, 

1304 exposure_group="202305121917591", 

1305 exposure_time=15.0*u.s, 

1306 focus_z=0.0*u.mm, 

1307 group_counter_end=21, 

1308 group_counter_start=21, 

1309 has_simulated_content=False, 

1310 observation_counter=21, 

1311 observation_id="TS_C_20230512_000021", 

1312 observation_type="flat", 

1313 observation_reason="sflat_hi", 

1314 observing_day=20230512, 

1315 physical_filter="HIGH", 

1316 science_program="7187D", 

1317 visit_id=202305121917591)), 

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

1319 dict(telescope=None, 

1320 instrument="LSST-TS8", 

1321 dark_time=15.165*u.s, 

1322 detector_exposure_id=202305121917591020, 

1323 detector_group="RTM-004", 

1324 detector_name="S02", 

1325 detector_num=20, 

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

1327 exposure_id=202305121917591, 

1328 exposure_group="202305121917591", 

1329 exposure_time=15.0*u.s, 

1330 focus_z=0.0*u.mm, 

1331 group_counter_end=21, 

1332 group_counter_start=21, 

1333 has_simulated_content=False, 

1334 observation_counter=21, 

1335 observation_id="TS_C_20230512_000021", 

1336 observation_type="flat", 

1337 observation_reason="sflat_hi", 

1338 observing_day=20230512, 

1339 physical_filter="HIGH", 

1340 science_program="7187D", 

1341 visit_id=202305121917591)), 

1342 ("ts8-TS_C_20230523_000127_R22_S00.yaml", 

1343 dict(telescope=None, 

1344 instrument="LSST-TS8", 

1345 dark_time=15.16*u.s, 

1346 detector_exposure_id=202305231936194018, 

1347 detector_group="RTM-004", 

1348 detector_name="S00", 

1349 detector_num=18, 

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

1351 exposure_id=202305231936194, 

1352 exposure_group="202305231936194", 

1353 exposure_time=15.0*u.s, 

1354 focus_z=0.0*u.mm, 

1355 group_counter_end=127, 

1356 group_counter_start=127, 

1357 has_simulated_content=False, 

1358 observation_counter=127, 

1359 observation_id="TS_C_20230523_000127", 

1360 observation_type="flat", 

1361 observation_reason="flat", 

1362 observing_day=20230523, 

1363 physical_filter="unknown", 

1364 science_program="7220D", 

1365 visit_id=202305231936194)), 

1366 ("ts8-TS_C_20230525_000041_R22_S00.yaml", 

1367 dict(telescope=None, 

1368 instrument="LSST-TS8", 

1369 dark_time=30.151*u.s, 

1370 detector_exposure_id=3023052500041018, 

1371 detector_group="RTM-004", 

1372 detector_name="S00", 

1373 detector_num=18, 

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

1375 exposure_id=3023052500041, 

1376 exposure_group="3023052500041", 

1377 exposure_time=30.0*u.s, 

1378 focus_z=0.0*u.mm, 

1379 group_counter_end=41, 

1380 group_counter_start=41, 

1381 has_simulated_content=False, 

1382 observation_counter=41, 

1383 observation_id="TS_C_20230525_000041", 

1384 observation_type="flat", 

1385 observation_reason="flat", 

1386 observing_day=20230525, 

1387 physical_filter="unknown", 

1388 science_program="7227D", 

1389 visit_id=3023052500041)), 

1390 ) 

1391 for filename, expected in test_data: 

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

1393 with warnings.catch_warnings(): 

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

1395 warnings.simplefilter("ignore", VerifyWarning) 

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

1397 

1398 def test_ucdcam_translator(self): 

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

1400 dict(telescope=None, 

1401 instrument="LSST-UCDCam", 

1402 dark_time=2.07859*u.s, 

1403 detector_exposure_id=42370917130, 

1404 detector_group="R21", 

1405 detector_name="S01", 

1406 detector_num=10, 

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

1408 exposure_id=2023103100227, 

1409 exposure_group="2023103100227", 

1410 exposure_time=1.0*u.s, 

1411 focus_z=0.0*u.mm, 

1412 group_counter_end=227, 

1413 group_counter_start=227, 

1414 has_simulated_content=False, 

1415 observation_counter=227, 

1416 observation_id="TS_C_20231031_000227", 

1417 observation_type="flat", 

1418 observation_reason="flat", 

1419 observing_day=20231031, 

1420 physical_filter="r", 

1421 science_program="unknown", 

1422 visit_id=2023103100227)), 

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

1424 dict(telescope=None, 

1425 instrument="LSST-UCDCam", 

1426 dark_time=3.082*u.s, 

1427 detector_exposure_id=179029732609, 

1428 detector_group="R22", 

1429 detector_name="S01", 

1430 detector_num=1, 

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

1432 exposure_id=3023073000237, 

1433 exposure_group="3023073000237", 

1434 exposure_time=2.0*u.s, 

1435 focus_z=0.0*u.mm, 

1436 group_counter_end=237, 

1437 group_counter_start=237, 

1438 has_simulated_content=False, 

1439 observation_counter=237, 

1440 observation_id="TS_C_20230730_000237", 

1441 observation_type="flat", 

1442 observation_reason="flat", 

1443 observing_day=20230730, 

1444 physical_filter="r", 

1445 science_program="unknown", 

1446 visit_id=3023073000237)), 

1447 ) 

1448 for filename, expected in test_data: 

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

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

1451 

1452 def test_checker(self): 

1453 filename = "latiss-future.yaml" 

1454 from astro_metadata_translator.tests import read_test_file 

1455 from astro_metadata_translator import ObservationInfo 

1456 header = read_test_file(filename, self.datadir) 

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

1458 self.assertTrue(obsInfo) 

1459 

1460 def test_fix_header(self): 

1461 from astro_metadata_translator import fix_header 

1462 from astro_metadata_translator.tests import read_test_file 

1463 # Test that header fix up is working 

1464 # Not all headers are used in metadata translation 

1465 test_data = ( 

1466 ("latiss-AT_O_20210212_000006.yaml", 

1467 dict(RASTART=260.024385071917)), 

1468 ("latiss-AT_O_20210210_000011.yaml", 

1469 dict(RASTART=355.41750341182313)), 

1470 ) 

1471 for filename, expected in test_data: 

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

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

1474 modified = fix_header(header) 

1475 self.assertTrue(modified) 

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

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

1478 

1479 

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

1481 unittest.main()