Coverage for tests / test_translator.py: 21%

108 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-05-05 18:43 +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.time 

26import astropy.units as u 

27import astropy.units.cds as cds 

28from astropy.io.fits.verify import VerifyWarning 

29 

30import lsst.obs.lsst.translators # register the translators 

31from astro_metadata_translator.tests import MetadataAssertHelper 

32 

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

34 

35 

36class LsstMetadataTranslatorTestCase(unittest.TestCase, MetadataAssertHelper): 

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

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

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

40 

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

42 

43 def test_lsstCam_translator(self): 

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

45 dict(telescope="Simonyi Survey Telescope", 

46 instrument="LSSTCam", 

47 boresight_rotation_coord="unknown", 

48 can_see_sky=False, 

49 dark_time=0.0*u.s, 

50 detector_exposure_id=0x269200011d, 

51 detector_group="R10", 

52 detector_name="S02", 

53 detector_num=29, 

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

55 exposure_id=3019031900001, 

56 exposure_group="3019031900001", 

57 exposure_time=0.0*u.s, 

58 exposure_time_requested=0.0*u.s, 

59 focus_z=0.0*u.mm, 

60 group_counter_end=1, 

61 group_counter_start=1, 

62 has_simulated_content=False, 

63 object="UNKNOWN", 

64 observation_counter=1, 

65 observation_id="MC_C_20190319_000001", 

66 observation_type="bias", 

67 observation_reason="bias", 

68 observing_day=20190319, 

69 observing_day_offset=astropy.time.TimeDelta(25200.0, scale="tai", format="sec"), 

70 physical_filter="unknown", 

71 pressure=None, 

72 relative_humidity=None, 

73 science_program="unknown", 

74 temperature=None, 

75 visit_id=3019031900001)), 

76 ("lsstCam-MC_C_20190319_000001_R22_S21.yaml", 

77 dict(telescope="Simonyi Survey Telescope", 

78 instrument="LSSTCam", 

79 boresight_rotation_coord="unknown", 

80 can_see_sky=False, 

81 dark_time=0.0*u.s, 

82 detector_exposure_id=0x2692000161, 

83 detector_group="R22", 

84 detector_name="S21", 

85 detector_num=97, 

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

87 exposure_id=3019031900001, 

88 exposure_group="3019031900001", 

89 exposure_time=0.0*u.s, 

90 exposure_time_requested=0.0*u.s, 

91 focus_z=0.0*u.mm, 

92 group_counter_end=1, 

93 group_counter_start=1, 

94 has_simulated_content=False, 

95 object="UNKNOWN", 

96 observation_counter=1, 

97 observation_id="MC_C_20190319_000001", 

98 observation_type="bias", 

99 observation_reason="bias", 

100 observing_day=20190319, 

101 observing_day_offset=astropy.time.TimeDelta(25200.0, scale="tai", format="sec"), 

102 physical_filter="unknown", 

103 pressure=None, 

104 relative_humidity=None, 

105 science_program="unknown", 

106 temperature=None, 

107 visit_id=3019031900001)), 

108 ("lsstCam-MC_C_20190322_000002_R10_S22.yaml", 

109 dict(telescope="Simonyi Survey Telescope", 

110 instrument="LSSTCam", 

111 boresight_rotation_coord="unknown", 

112 can_see_sky=False, 

113 dark_time=1.0*u.s, 

114 detector_exposure_id=0x2693800223, 

115 detector_group="R10", 

116 detector_name="S22", 

117 detector_num=35, 

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

119 exposure_id=3019032200002, 

120 exposure_group="3019032200002", 

121 exposure_time=1.0*u.s, 

122 exposure_time_requested=1.0*u.s, 

123 focus_z=0.0*u.mm, 

124 group_counter_end=2, 

125 group_counter_start=2, 

126 has_simulated_content=False, 

127 object="UNKNOWN", 

128 observation_counter=2, 

129 observation_id="MC_C_20190322_000002", 

130 observation_type="flat", 

131 observation_reason="flat", 

132 observing_day=20190322, 

133 observing_day_offset=astropy.time.TimeDelta(25200.0, scale="tai", format="sec"), 

134 physical_filter="SDSSi~ND_OD0.5", 

135 pressure=None, 

136 relative_humidity=None, 

137 science_program="6489D", 

138 temperature=None, 

139 visit_id=3019032200002)), 

140 ("lsstCam-MC_C_20190406_000643_R10_S00.yaml", 

141 dict(telescope="Simonyi Survey Telescope", 

142 instrument="LSSTCam", 

143 boresight_rotation_coord="unknown", 

144 can_see_sky=False, 

145 dark_time=1007.422*u.s, 

146 detector_exposure_id=0x269b02831b, 

147 detector_group="R10", 

148 detector_name="S00", 

149 detector_num=27, 

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

151 exposure_id=3019040600643, 

152 exposure_group="3019040600643", 

153 exposure_time=999.99*u.s, 

154 exposure_time_requested=999.99*u.s, 

155 focus_z=0.0*u.mm, 

156 group_counter_end=643, 

157 group_counter_start=643, 

158 has_simulated_content=False, 

159 object="UNKNOWN", 

160 observation_counter=643, 

161 observation_id="MC_C_20190406_000643", 

162 observation_type="flat", 

163 observation_reason="lambda", 

164 observing_day=20190406, 

165 observing_day_offset=astropy.time.TimeDelta(25200.0, scale="tai", format="sec"), 

166 physical_filter="950nm", 

167 pressure=None, 

168 relative_humidity=None, 

169 science_program="6549D", 

170 temperature=None, 

171 visit_id=3019040600643)), 

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

173 dict(telescope="Simonyi Survey Telescope", 

174 instrument="LSSTCam", 

175 boresight_rotation_coord="unknown", 

176 can_see_sky=False, 

177 dark_time=0.0*u.s, 

178 detector_exposure_id=0xdb480011d, 

179 detector_group="R10", 

180 detector_name="S02", 

181 detector_num=29, 

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

183 exposure_id=2029031900001, 

184 exposure_group="2029031900001", 

185 exposure_time=0.0*u.s, 

186 exposure_time_requested=0.0*u.s, 

187 focus_z=0.0*u.mm, 

188 group_counter_end=1, 

189 group_counter_start=1, 

190 has_simulated_content=False, 

191 object="UNKNOWN", 

192 observation_counter=1, 

193 observation_id="MC_C_20190319_000001", 

194 observation_type="bias", 

195 observation_reason="bias", 

196 observing_day=20290319, 

197 observing_day_offset=astropy.time.TimeDelta(25200.0, scale="tai", format="sec"), 

198 physical_filter="unknown", 

199 pressure=None, 

200 relative_humidity=None, 

201 science_program="unknown", 

202 temperature=None, 

203 visit_id=2029031900001)), 

204 ("lsstCam-MC_C_20231107_000078_R01_S01.json", 

205 dict(telescope="Simonyi Survey Telescope", 

206 instrument="LSSTCam", 

207 boresight_rotation_coord="unknown", 

208 can_see_sky=False, 

209 dark_time=0.092*u.s, 

210 detector_exposure_id=0x9e1004e01, 

211 detector_group="R01", 

212 detector_name="S01", 

213 detector_num=1, 

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

215 exposure_id=2023110700078, 

216 exposure_group="2023110700078", 

217 exposure_time=0.0*u.s, 

218 exposure_time_requested=0.0*u.s, 

219 focus_z=0.0*u.mm, 

220 group_counter_end=78, 

221 group_counter_start=78, 

222 has_simulated_content=False, 

223 object="UNKNOWN", 

224 observation_counter=78, 

225 observation_id="MC_C_20231107_000078", 

226 observation_type="bias", 

227 observation_reason="bot_persistence", 

228 observing_day=20231107, 

229 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"), 

230 physical_filter="ph_5", 

231 pressure=None, 

232 relative_humidity=None, 

233 science_program="13518", 

234 temperature=None, 

235 visit_id=2023110700078)), 

236 ("lsstCam-MC_O_20250415_000060_R01_S01.yaml", 

237 dict(telescope="Simonyi Survey Telescope", 

238 instrument="LSSTCam", 

239 boresight_rotation_coord="sky", 

240 boresight_rotation_angle=-43.62470328866432*u.deg, 

241 can_see_sky=True, 

242 dark_time=15.9548*u.s, 

243 detector_exposure_id=0xae7803c01, 

244 detector_group="R01", 

245 detector_name="S01", 

246 detector_num=1, 

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

248 exposure_id=2025041500060, 

249 exposure_group="2025-04-16T00:53:10.143", 

250 exposure_time=15.000998497009277*u.s, 

251 exposure_time_requested=15.0*u.s, 

252 focus_z=-2.856403126427015*u.mm, 

253 group_counter_end=60, 

254 group_counter_start=60, 

255 has_simulated_content=False, 

256 object="Vela_SNR", 

257 observation_counter=60, 

258 observation_id="MC_O_20250415_000060", 

259 observation_type="acq", 

260 observation_reason="first_focus", 

261 observing_day=20250415, 

262 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

263 physical_filter="i_39", 

264 pressure=74390.0*u.Pa, 

265 relative_humidity=33.400001525878906, 

266 science_program="BLOCK-T434", 

267 temperature=11.024999618530273*u.deg_C, 

268 visit_id=3246943901430000)), 

269 ("lsstCam-MC_O_20250422_000250_R01_S01.yaml", 

270 dict(telescope="Simonyi Survey Telescope", 

271 instrument="LSSTCam", 

272 boresight_rotation_coord="sky", 

273 boresight_rotation_angle=138.6291409919304*u.deg, 

274 can_see_sky=True, 

275 dark_time=15.9482*u.s, 

276 detector_exposure_id=0xaeb00fa01, 

277 detector_group="R01", 

278 detector_name="S01", 

279 detector_num=1, 

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

281 exposure_id=2025042200250, 

282 exposure_group="2025-04-23T03:52:21.287", 

283 exposure_time=15.000065088272095*u.s, 

284 exposure_time_requested=15.0*u.s, 

285 focus_z=-4.0921929561356105*u.mm, 

286 group_counter_end=250, 

287 group_counter_start=250, 

288 has_simulated_content=False, 

289 object="Rubin_SV_216_-17", 

290 observation_counter=250, 

291 observation_id="MC_O_20250422_000250", 

292 observation_type="acq", 

293 observation_reason="infocus_clt-001", 

294 observing_day=20250422, 

295 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

296 physical_filter="r_57", 

297 pressure=74255.0*u.Pa, 

298 relative_humidity=29.475000381469727, 

299 science_program="BLOCK-T417", 

300 temperature=11.274999618530273*u.deg_C, 

301 visit_id=3253099412870000)), 

302 ("lsstCam-MC_C_20250425_000031_R01_S01.yaml", 

303 dict(telescope="Simonyi Survey Telescope", 

304 instrument="LSSTCam", 

305 boresight_rotation_coord="unknown", 

306 boresight_rotation_angle=0.0*u.deg, 

307 can_see_sky=None, 

308 dark_time=1469.57*u.s, 

309 detector_exposure_id=0xaec801f01, 

310 detector_group="R01", 

311 detector_name="S01", 

312 detector_num=1, 

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

314 exposure_id=2025042500031, 

315 exposure_group="2025042500031", 

316 exposure_time=2.767*u.s, 

317 exposure_time_requested=2.767*u.s, 

318 focus_z=0.0*u.mm, 

319 group_counter_end=31, 

320 group_counter_start=31, 

321 has_simulated_content=False, 

322 object="UNKNOWN", 

323 observation_counter=31, 

324 observation_id="MC_C_20250425_000031", 

325 observation_type="unknown", 

326 observation_reason="unknown", 

327 observing_day=20250425, 

328 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

329 physical_filter="unknown", 

330 pressure=None, 

331 relative_humidity=None, 

332 science_program="unknown", 

333 temperature=None, 

334 visit_id=2025042500031)), 

335 ("lsstCam-MC_O_20250609_000578_R01_S01.yaml", 

336 dict(telescope="Simonyi Survey Telescope", 

337 instrument="LSSTCam", 

338 boresight_rotation_coord="sky", 

339 boresight_rotation_angle=131.35723576573005*u.deg, 

340 can_see_sky=True, 

341 dark_time=30.9487*u.s, 

342 detector_exposure_id=0xb03024201, 

343 detector_group="R01", 

344 detector_name="S01", 

345 detector_num=1, 

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

347 exposure_id=2025060900578, 

348 exposure_group="2025-06-10T07:31:26.692", 

349 exposure_time=30.000904321670532*u.s, 

350 exposure_time_requested=30.0*u.s, 

351 focus_z=-3.200530845386125*u.mm, 

352 group_counter_end=578, 

353 group_counter_start=578, 

354 has_simulated_content=False, 

355 object="Rubin_SV_320_-15", 

356 observation_counter=578, 

357 observation_id="MC_O_20250609_000578", 

358 observation_type="science", 

359 observation_reason="field_survey_science", 

360 observing_day=20250609, 

361 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

362 physical_filter="z_20", 

363 pressure=74210.0*u.Pa, 

364 relative_humidity=11.175000190734863, 

365 science_program="BLOCK-365", 

366 temperature=9.699999809265137*u.deg_C, 

367 visit_id=3294702866920000)), 

368 ) 

369 for filename, expected in test_data: 

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

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

372 

373 def test_phoSimLsstCam_translator(self): 

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

375 dict(telescope="Simonyi Survey Telescope", 

376 instrument="LSSTCam", 

377 boresight_rotation_coord="sky", 

378 can_see_sky=True, 

379 dark_time=15.0*u.s, 

380 detector_exposure_id=0x401780205a, 

381 detector_group="R22", 

382 detector_name="S00", 

383 detector_num=90, 

384 detector_serial="E2V-CCD250-369", 

385 detector_unique_name="R22_S00", 

386 exposure_group="4010021700032", 

387 exposure_id=4010021700032, 

388 exposure_time=15.0*u.s, 

389 exposure_time_requested=15.0*u.s, 

390 focus_z=0.0*u.mm, 

391 group_counter_end=32, 

392 group_counter_start=32, 

393 has_simulated_content=True, 

394 object="UNKNOWN", 

395 observation_counter=32, 

396 observation_id="MC_H_20100217_000032", 

397 observation_reason="phosim", 

398 observation_type="science", 

399 observing_day=20100217, 

400 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"), 

401 physical_filter="g", 

402 pressure=None, 

403 relative_humidity=None, 

404 science_program="9006001", 

405 temperature=None, 

406 visit_id=4010021700032)), 

407 ) 

408 for filename, expected in test_data: 

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

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

411 check_wcs=False, **expected) 

412 

413 def test_lsstCamSim_translator(self): 

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

415 dict(telescope="Simonyi Survey Telescope", 

416 instrument="LSSTCamSim", 

417 boresight_rotation_coord="sky", 

418 boresight_rotation_angle=81.12326734428959 * u.deg, 

419 can_see_sky=True, 

420 dark_time=30.0*u.s, 

421 detector_exposure_id=730756993118, 

422 detector_group="R22", 

423 detector_name="S11", 

424 detector_num=94, 

425 detector_serial="E2V-CCD250-382", 

426 detector_unique_name="R22_S11", 

427 exposure_group="7024032100720", 

428 exposure_id=7024032100720, 

429 exposure_time=30.0*u.s, 

430 exposure_time_requested=30.0*u.s, 

431 focus_z=0.0*u.mm, 

432 group_counter_end=720, 

433 group_counter_start=720, 

434 has_simulated_content=True, 

435 object="UNKNOWN", 

436 observation_counter=720, 

437 observation_id="MC_S_20240321_000720", 

438 observation_reason="survey", 

439 observation_type="science", 

440 observing_day=20240321, 

441 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

442 physical_filter="r_57", 

443 pressure=None, 

444 relative_humidity=None, 

445 science_program="720", 

446 temperature=None, 

447 visit_id=7024032100720)), 

448 ) 

449 for filename, expected in test_data: 

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

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

452 check_wcs=False, **expected) 

453 

454 def test_comCam_translator(self): 

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

456 dict(telescope="Simonyi Survey Telescope", 

457 instrument="LSSTComCam", 

458 boresight_rotation_coord="unknown", 

459 can_see_sky=False, 

460 dark_time=0.398*u.s, 

461 detector_exposure_id=0x26b6000100, 

462 detector_group="R22", 

463 detector_name="S00", 

464 detector_num=0, 

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

466 exposure_id=3019053000001, 

467 exposure_group="3019053000001", 

468 exposure_time=0.0*u.s, 

469 exposure_time_requested=0.0*u.s, 

470 focus_z=0.0*u.mm, 

471 group_counter_end=1, 

472 group_counter_start=1, 

473 has_simulated_content=False, 

474 object="UNKNOWN", 

475 observation_counter=1, 

476 observation_id="CC_C_20190530_000001", 

477 observation_type="bias", 

478 observation_reason="bias", 

479 observing_day=20190530, 

480 observing_day_offset=astropy.time.TimeDelta(25200.0, scale="tai", format="sec"), 

481 physical_filter="unknown", 

482 pressure=None, 

483 relative_humidity=None, 

484 science_program="unknown", 

485 temperature=None, 

486 visit_id=3019053000001)), 

487 ("comCam-CC_C_20190526_000223_R22_S01.yaml", 

488 dict(telescope="Simonyi Survey Telescope", 

489 instrument="LSSTComCam", 

490 boresight_rotation_coord="unknown", 

491 can_see_sky=False, 

492 dark_time=0.034*u.s, 

493 detector_exposure_id=0x26b400df01, 

494 detector_group="R22", 

495 detector_name="S01", 

496 detector_num=1, 

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

498 exposure_id=3019052600223, 

499 exposure_group="3019052600223", 

500 exposure_time=0.0*u.s, 

501 exposure_time_requested=0.0*u.s, 

502 focus_z=0.0*u.mm, 

503 group_counter_end=223, 

504 group_counter_start=223, 

505 has_simulated_content=False, 

506 object="UNKNOWN", 

507 observation_counter=223, 

508 observation_id="CC_C_20190526_000223", 

509 observation_type="bias", 

510 observation_reason="dark", 

511 observing_day=20190526, 

512 observing_day_offset=astropy.time.TimeDelta(25200.0, scale="tai", format="sec"), 

513 physical_filter="unknown", 

514 pressure=None, 

515 relative_humidity=None, 

516 science_program="unknown", 

517 temperature=None, 

518 visit_id=3019052600223)), 

519 ("comCam-CC_O_20241108_000266_R22_S00.yaml", 

520 dict(telescope="Simonyi Survey Telescope", 

521 instrument="LSSTComCam", 

522 boresight_rotation_coord="sky", 

523 can_see_sky=True, 

524 boresight_rotation_angle=102.79926387330579 * u.deg, 

525 wcs_params=dict(max_sep=2.5), 

526 dark_time=30.4306*u.s, 

527 detector_exposure_id=45508266496, 

528 detector_group="R22", 

529 detector_name="S00", 

530 detector_num=0, 

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

532 exposure_id=2024110800266, 

533 exposure_group="2024-11-09T06:33:55.311", 

534 exposure_time=30.0*u.s, 

535 exposure_time_requested=30.0*u.s, 

536 focus_z=2.0585230644024572*u.mm, 

537 group_counter_end=266, 

538 group_counter_start=266, 

539 has_simulated_content=False, 

540 object="slew_icrs", 

541 observation_counter=266, 

542 observation_id="CC_O_20241108_000266", 

543 observation_type="science", 

544 observation_reason="science", 

545 observing_day=20241108, 

546 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

547 physical_filter="g_01", 

548 pressure=74120.0 * u.Pa, 

549 relative_humidity=22.299999237060547, 

550 science_program="PP-SURVEY", 

551 temperature=13.725000381469727 * u.deg_C, 

552 visit_id=3110636353110000)), 

553 ) 

554 for filename, expected in test_data: 

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

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

557 

558 def test_comCamSim_translator(self): 

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

560 dict(telescope="Simonyi Survey Telescope", 

561 instrument="LSSTComCamSim", 

562 boresight_rotation_coord="unknown", 

563 can_see_sky=False, 

564 dark_time=0.0*u.s, 

565 detector_group="R22", 

566 detector_name="S00", 

567 detector_num=0, 

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

569 exposure_id=5024011700000, 

570 exposure_group="5024011700000", 

571 exposure_time=0.0*u.s, 

572 focus_z=0.0 * u.mm, 

573 group_counter_end=5024011700000, 

574 group_counter_start=5024011700000, 

575 has_simulated_content=True, 

576 object="UNKNOWN", 

577 observation_counter=0, 

578 observation_id="IM_P_20240117_000000", 

579 observation_type="bias", 

580 observation_reason="calibration", 

581 observing_day=20240117, 

582 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

583 physical_filter="r_03", 

584 pressure=None, 

585 relative_humidity=None, 

586 science_program="calibration", 

587 temperature=None, 

588 visit_id=5024011700000, 

589 )), 

590 ("comCamSim-CC_S_20240321_000093_R22_S22.yaml", 

591 dict(telescope="Simonyi Survey Telescope", 

592 instrument="LSSTComCamSim", 

593 boresight_rotation_coord="sky", 

594 can_see_sky=True, 

595 dark_time=33.0546 * u.s, 

596 detector_group="R22", 

597 detector_name="S22", 

598 detector_num=8, 

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

600 exposure_id=2026032100093, 

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

602 exposure_time=30.0 * u.s, 

603 exposure_time_requested=30.0 * u.s, 

604 focus_z=0.0 * u.mm, 

605 group_counter_end=93, 

606 group_counter_start=93, 

607 has_simulated_content=True, 

608 object="TEST", 

609 observation_counter=93, 

610 observation_id="CC_S_20260321_000093", 

611 observation_type="science", 

612 observation_reason="object", 

613 observing_day=20260321, 

614 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

615 physical_filter="r_03", 

616 pressure=None, 

617 relative_humidity=None, 

618 science_program="unknown", 

619 temperature=None, 

620 visit_id=2910085149940000, 

621 )), 

622 ) 

623 for filename, expected in test_data: 

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

625 self.assertObservationInfoFromYaml( 

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

627 ) 

628 

629 def test_phoSimComCam_translator(self): 

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

631 dict(telescope="Simonyi Survey Telescope", 

632 instrument="LSSTComCam", 

633 boresight_rotation_coord="sky", 

634 can_see_sky=True, 

635 dark_time=1.0*u.s, 

636 detector_exposure_id=0x4017977100, 

637 detector_group="R22", 

638 detector_name="S00", 

639 detector_num=0, 

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

641 exposure_id=4010021706001, 

642 exposure_group="4010021706001", 

643 exposure_time=1.0*u.s, 

644 focus_z=0.0*u.mm, 

645 group_counter_end=6001, 

646 group_counter_start=6001, 

647 has_simulated_content=True, 

648 object="UNKNOWN", 

649 observation_counter=6001, 

650 observation_id="CC_H_20100217_006001", 

651 observation_type="science", 

652 observation_reason="test", 

653 observing_day=20100217, 

654 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"), 

655 physical_filter="g_01", 

656 pressure=None, 

657 relative_humidity=None, 

658 science_program="9006001", 

659 temperature=None, 

660 visit_id=4010021706001)), 

661 ) 

662 for filename, expected in test_data: 

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

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

665 check_wcs=False, **expected) 

666 

667 def test_phosim_translator(self): 

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

669 dict(telescope="Simonyi Survey Telescope", 

670 instrument="LSSTCam-PhoSim", 

671 boresight_rotation_coord="sky", 

672 can_see_sky=True, 

673 dark_time=30.0*u.s, 

674 detector_exposure_id=204595038, 

675 detector_group="R11", 

676 detector_name="S02", 

677 detector_num=38, 

678 detector_serial="R11_S02", 

679 exposure_id=204595, 

680 exposure_group="204595", 

681 exposure_time=30.0*u.s, 

682 focus_z=0.0*u.mm, 

683 group_counter_end=204595, 

684 group_counter_start=204595, 

685 has_simulated_content=True, 

686 object="UNKNOWN", 

687 observation_counter=0, 

688 observation_id="204595", 

689 observation_type="science", 

690 observation_reason="phosim", 

691 observing_day=20221005, 

692 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"), 

693 physical_filter="i", 

694 pressure=520.0*cds.mmHg, 

695 relative_humidity=40.0, 

696 science_program="204595", 

697 temperature=20.0*u.deg_C, 

698 visit_id=204595, 

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

700 ) 

701 for filename, expected in test_data: 

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

703 with warnings.catch_warnings(): 

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

705 warnings.simplefilter("ignore", VerifyWarning) 

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

707 

708 def test_latiss_translator(self): 

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

710 dict(telescope="Rubin Auxiliary Telescope", 

711 instrument="LATISS", 

712 boresight_rotation_coord="unknown", 

713 can_see_sky=None, 

714 dark_time=27.0*u.s, 

715 detector_exposure_id=0x2638004100, 

716 detector_group="RXX", 

717 detector_name="S00", 

718 detector_num=0, 

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

720 exposure_id=3018092000065, 

721 exposure_group="3018092000065", 

722 exposure_time=27.0*u.s, 

723 exposure_time_requested=27.0*u.s, 

724 focus_z=0.0*u.mm, 

725 group_counter_end=65, 

726 group_counter_start=65, 

727 has_simulated_content=False, 

728 object="UNKNOWN", 

729 observation_counter=65, 

730 observation_id="AT_C_20180920_000065", 

731 observation_type="unknown", 

732 observation_reason="unknown", 

733 observing_day=20180920, 

734 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

735 physical_filter="unknown~unknown", 

736 pressure=None, 

737 relative_humidity=None, 

738 science_program="unknown", 

739 temperature=None, 

740 visit_id=3018092000065, 

741 )), 

742 ("latiss-AT_O_20190306_000014.yaml", 

743 dict(telescope="Rubin Auxiliary Telescope", 

744 instrument="LATISS", 

745 boresight_rotation_coord="unknown", 

746 can_see_sky=None, 

747 dark_time=1.06*u.s, 

748 detector_exposure_id=0x68b800e00, 

749 detector_group="RXX", 

750 detector_name="S00", 

751 detector_num=0, 

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

753 exposure_id=2019030600014, 

754 exposure_group="2019030600014", 

755 exposure_time=1.06*u.s, 

756 exposure_time_requested=1.06*u.s, 

757 focus_z=0.0*u.mm, 

758 group_counter_end=14, 

759 group_counter_start=14, 

760 has_simulated_content=False, 

761 object="UNKNOWN", 

762 observation_counter=14, 

763 observation_id="AT_O_20190306_000014", 

764 observation_type="unknown", 

765 observation_reason="unknown", 

766 observing_day=20190306, 

767 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

768 physical_filter="unknown~unknown", 

769 pressure=None, 

770 relative_humidity=None, 

771 science_program="unknown", 

772 temperature=None, 

773 visit_id=2019030600014, 

774 )), 

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

776 dict(telescope="Rubin Auxiliary Telescope", 

777 instrument="LATISS", 

778 boresight_rotation_coord="unknown", 

779 can_see_sky=False, 

780 dark_time=0.0*u.s, 

781 detector_exposure_id=0x697001600, 

782 detector_group="RXX", 

783 detector_name="S00", 

784 detector_num=0, 

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

786 exposure_id=2019032900022, 

787 exposure_group="2019032900022", 

788 exposure_time=0.0*u.s, 

789 exposure_time_requested=0.0*u.s, 

790 focus_z=0.0*u.mm, 

791 group_counter_end=22, 

792 group_counter_start=22, 

793 has_simulated_content=False, 

794 object="UNKNOWN", 

795 observation_counter=22, 

796 observation_id="AT_O_20190329_000022", 

797 observation_type="bias", 

798 observation_reason="unknown", 

799 observing_day=20190329, 

800 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

801 physical_filter="unknown~unknown", 

802 pressure=None, 

803 relative_humidity=None, 

804 science_program="unknown", 

805 temperature=None, 

806 visit_id=2019032900022, 

807 )), 

808 ("latiss-future.yaml", 

809 dict(telescope="Rubin Auxiliary Telescope", 

810 instrument="LATISS", 

811 boresight_rotation_coord="unknown", 

812 can_see_sky=False, 

813 dark_time=0.0*u.s, 

814 detector_exposure_id=0x74e001600, 

815 detector_group="RXX", 

816 detector_name="S00", 

817 detector_num=0, 

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

819 exposure_id=2020032900022, 

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

821 exposure_time=0.0*u.s, 

822 exposure_time_requested=0.0*u.s, 

823 focus_z=0.0*u.mm, 

824 group_counter_end=22, 

825 group_counter_start=22, 

826 has_simulated_content=False, 

827 object="UNKNOWN", 

828 observation_counter=22, 

829 observation_id="AT_X_20200329_000022", 

830 observation_type="bias", 

831 observation_reason="unknown", 

832 observing_day=20200329, 

833 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

834 physical_filter="unknown~unknown", 

835 pressure=None, 

836 relative_humidity=None, 

837 science_program="unknown", 

838 temperature=None, 

839 visit_id=1654305000120024, 

840 )), 

841 ("latiss-AT_O_20190915_000037.yaml", 

842 dict(telescope="Rubin Auxiliary Telescope", 

843 instrument="LATISS", 

844 boresight_rotation_coord="unknown", 

845 can_see_sky=False, 

846 dark_time=0.0*u.s, 

847 detector_exposure_id=0x6ec002500, 

848 detector_group="RXX", 

849 detector_name="S00", 

850 detector_num=0, 

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

852 exposure_id=2019091500037, 

853 exposure_group="bias_0027_0100", 

854 exposure_time=0.0*u.s, 

855 exposure_time_requested=0.0*u.s, 

856 focus_z=0.0*u.mm, 

857 group_counter_end=37, 

858 group_counter_start=37, 

859 has_simulated_content=False, 

860 object="UNKNOWN", 

861 observation_counter=37, 

862 observation_id="AT_O_20190915_000037", 

863 observation_type="bias", 

864 observation_reason="unknown", 

865 observing_day=20190915, 

866 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

867 physical_filter="unknown~unknown", 

868 pressure=None, 

869 relative_humidity=None, 

870 science_program="unknown", 

871 temperature=None, 

872 visit_id=3575576933793566714, 

873 )), 

874 ("latiss-AT_O_20191031_000004.yaml", 

875 dict(telescope="Rubin Auxiliary Telescope", 

876 instrument="LATISS", 

877 boresight_rotation_coord="unknown", 

878 can_see_sky=None, 

879 dark_time=3.0*u.s, 

880 detector_exposure_id=0x703000400, 

881 detector_group="RXX", 

882 detector_name="S00", 

883 detector_num=0, 

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

885 exposure_id=2019103100004, 

886 exposure_group="TEST01", 

887 exposure_time=3.0*u.s, 

888 exposure_time_requested=3.0*u.s, 

889 focus_z=0.0*u.mm, 

890 group_counter_end=4, 

891 group_counter_start=4, 

892 has_simulated_content=False, 

893 object="UNKNOWN", 

894 observation_counter=4, 

895 observation_id="AT_O_20191031_000004", 

896 observation_type="engtest", 

897 observation_reason="unknown", 

898 observing_day=20191031, 

899 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

900 physical_filter="unknown~unknown", 

901 pressure=None, 

902 relative_humidity=None, 

903 science_program="unknown", 

904 temperature=None, 

905 visit_id=1123819875881954006, 

906 )), 

907 ("latiss-AT_O_20191104_000003.yaml", 

908 dict(telescope="Rubin Auxiliary Telescope", 

909 instrument="LATISS", 

910 boresight_rotation_coord="unknown", 

911 can_see_sky=None, 

912 dark_time=3.0*u.s, 

913 detector_exposure_id=0x705000300, 

914 detector_group="RXX", 

915 detector_name="S00", 

916 detector_num=0, 

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

918 exposure_id=2019110400003, 

919 exposure_group="TEST01", 

920 exposure_time=3.0*u.s, 

921 exposure_time_requested=3.0*u.s, 

922 focus_z=0.0*u.mm, 

923 group_counter_end=3, 

924 group_counter_start=3, 

925 has_simulated_content=False, 

926 object="UNKNOWN", 

927 observation_counter=3, 

928 observation_id="AT_O_20191104_000003", 

929 observation_type="engtest", 

930 observation_reason="unknown", 

931 observing_day=20191104, 

932 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

933 physical_filter="unknown~unknown", 

934 pressure=None, 

935 relative_humidity=None, 

936 science_program="unknown", 

937 temperature=None, 

938 visit_id=1123819875881954006, 

939 )), 

940 ("latiss-AT_O_20191113_000061.yaml", 

941 dict(telescope="Rubin Auxiliary Telescope", 

942 instrument="LATISS", 

943 boresight_rotation_coord="unknown", 

944 can_see_sky=None, 

945 dark_time=0.5*u.s, 

946 detector_exposure_id=0x709803d00, 

947 detector_group="RXX", 

948 detector_name="S00", 

949 detector_num=0, 

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

951 exposure_id=2019111300061, 

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

953 exposure_time=0.5*u.s, 

954 exposure_time_requested=0.5*u.s, 

955 focus_z=0.0*u.mm, 

956 group_counter_end=61, 

957 group_counter_start=61, 

958 has_simulated_content=False, 

959 object="UNKNOWN", 

960 observation_counter=61, 

961 observation_id="AT_O_20191113_000061", 

962 observation_type="engtest", 

963 observation_reason="unknown", 

964 observing_day=20191113, 

965 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

966 physical_filter="empty~ronchi90lpmm", 

967 pressure=None, 

968 relative_humidity=None, 

969 science_program="unknown", 

970 temperature=None, 

971 visit_id=1892608703001301325, 

972 )), 

973 ("latiss-AT_O_20191118_000011.yaml", 

974 dict(telescope="Rubin Auxiliary Telescope", 

975 instrument="LATISS", 

976 boresight_rotation_coord="unknown", 

977 can_see_sky=False, 

978 dark_time=15.0*u.s, 

979 detector_exposure_id=0x70c000b00, 

980 detector_group="RXX", 

981 detector_name="S00", 

982 detector_num=0, 

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

984 exposure_id=2019111800011, 

985 exposure_group="dark_0002_0005", 

986 exposure_time=15.0*u.s, 

987 exposure_time_requested=15.0*u.s, 

988 focus_z=0.0*u.mm, 

989 group_counter_end=11, 

990 group_counter_start=11, 

991 has_simulated_content=False, 

992 object="UNKNOWN", 

993 observation_counter=11, 

994 observation_id="AT_O_20191118_000011", 

995 observation_type="dark", 

996 observation_reason="unknown", 

997 observing_day=20191118, 

998 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

999 physical_filter="diffuser~ronchi170lpmm", 

1000 pressure=None, 

1001 relative_humidity=None, 

1002 science_program="unknown", 

1003 temperature=None, 

1004 visit_id=6861884254113212214, 

1005 )), 

1006 ("latiss-AT_O_20200121_000045.yaml", 

1007 dict(telescope="Rubin Auxiliary Telescope", 

1008 instrument="LATISS", 

1009 boresight_rotation_coord="sky", 

1010 can_see_sky=None, 

1011 dark_time=100.0*u.s, 

1012 detector_exposure_id=0x72c002d00, 

1013 detector_group="RXX", 

1014 detector_name="S00", 

1015 detector_num=0, 

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

1017 exposure_id=2020012100045, 

1018 exposure_group="test", 

1019 exposure_time=100.0*u.s, 

1020 exposure_time_requested=100.0*u.s, 

1021 focus_z=0.560002659202*u.mm, 

1022 group_counter_end=45, 

1023 group_counter_start=45, 

1024 has_simulated_content=False, 

1025 object="UNKNOWN", 

1026 observation_counter=45, 

1027 observation_id="AT_O_20200121_000045", 

1028 observation_type="engtest", 

1029 observation_reason="unknown", 

1030 observing_day=20200121, 

1031 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

1032 physical_filter="blank_bk7_wg05~empty", 

1033 pressure=None, 

1034 relative_humidity=None, 

1035 science_program="unknown", 

1036 temperature=None, 

1037 visit_id=4702443654717948604, 

1038 check_altaz=True, 

1039 )), 

1040 ("latiss-AT_O_20200128_000379.yaml", 

1041 dict(telescope="Rubin Auxiliary Telescope", 

1042 instrument="LATISS", 

1043 boresight_rotation_coord="sky", 

1044 can_see_sky=True, 

1045 dark_time=5.0*u.s, 

1046 detector_exposure_id=0x72f817b00, 

1047 detector_group="RXX", 

1048 detector_name="S00", 

1049 detector_num=0, 

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

1051 exposure_id=2020012800379, 

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

1053 exposure_time=5.0*u.s, 

1054 exposure_time_requested=5.0*u.s, 

1055 focus_z=0.35416568455*u.mm, 

1056 group_counter_end=379, 

1057 group_counter_start=379, 

1058 has_simulated_content=False, 

1059 object="HD107696", 

1060 observation_counter=379, 

1061 observation_id="AT_O_20200128_000379", 

1062 observation_type="science", 

1063 observation_reason="science", 

1064 observing_day=20200128, 

1065 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

1066 physical_filter="KPNO_406_828nm~empty", 

1067 pressure=None, 

1068 relative_humidity=None, 

1069 science_program="unknown", 

1070 temperature=None, 

1071 visit_id=1602123521660000, 

1072 # We have some timing discrepancies in the headers 

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

1074 # the recorded AZ/EL/TIME. 

1075 wcs_params=dict(max_sep=7.), 

1076 )), 

1077 ("latiss-AT_O_20220405_000348.yaml", 

1078 dict(telescope="Rubin Auxiliary Telescope", 

1079 instrument="LATISS", 

1080 boresight_rotation_coord="sky", 

1081 can_see_sky=True, 

1082 dark_time=30.3176279067993*u.s, 

1083 detector_exposure_id=0x8be815c00, 

1084 detector_group="RXX", 

1085 detector_name="S00", 

1086 detector_num=0, 

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

1088 exposure_id=2022040500348, 

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

1090 exposure_time=30.0*u.s, 

1091 exposure_time_requested=30.0*u.s, 

1092 focus_z=0.0697081759572029*u.mm, 

1093 group_counter_end=349, 

1094 group_counter_start=348, 

1095 has_simulated_content=False, 

1096 object="LATISS_E6A_00000040", 

1097 observation_counter=348, 

1098 observation_id="AT_O_20220405_000348", 

1099 observation_type="science", 

1100 observation_reason="object", 

1101 observing_day=20220405, 

1102 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

1103 physical_filter="SDSSr~empty", 

1104 pressure=744.3*u.hPa, 

1105 relative_humidity=19.0, 

1106 science_program="LATISS_E6A", 

1107 temperature=12.3*u.deg_C, 

1108 visit_id=2291434871810000, 

1109 # We have some timing discrepancies in the headers 

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

1111 # the recorded AZ/EL/TIME. 

1112 wcs_params=dict(max_sep=7.), 

1113 )), 

1114 ("latiss-AT_O_20220405_000349.yaml", 

1115 dict(telescope="Rubin Auxiliary Telescope", 

1116 instrument="LATISS", 

1117 boresight_rotation_coord="sky", 

1118 can_see_sky=True, 

1119 dark_time=30.2387452125549*u.s, 

1120 detector_exposure_id=0x8be815d00, 

1121 detector_group="RXX", 

1122 detector_name="S00", 

1123 detector_num=0, 

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

1125 exposure_id=2022040500349, 

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

1127 exposure_time=30.0*u.s, 

1128 exposure_time_requested=30.0*u.s, 

1129 focus_z=0.0697081759572029*u.mm, 

1130 group_counter_end=349, 

1131 group_counter_start=348, 

1132 has_simulated_content=False, 

1133 object="LATISS_E6A_00000040", 

1134 observation_counter=349, 

1135 observation_id="AT_O_20220405_000349", 

1136 observation_type="science", 

1137 observation_reason="object", 

1138 observing_day=20220405, 

1139 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

1140 physical_filter="SDSSr~empty", 

1141 pressure=744.3*u.hPa, 

1142 relative_humidity=19.0, 

1143 science_program="LATISS_E6A", 

1144 temperature=12.3*u.deg_C, 

1145 visit_id=2291434871810000, 

1146 # We have some timing discrepancies in the headers 

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

1148 # the recorded AZ/EL/TIME. 

1149 wcs_params=dict(max_sep=7.), 

1150 )), 

1151 ("latiss-AT_C_20220426_000004_R00_S00.yaml", 

1152 dict(telescope="Rubin Auxiliary Telescope", 

1153 instrument="LATISS", 

1154 boresight_rotation_coord="unknown", 

1155 can_see_sky=None, 

1156 dark_time=537.406*u.s, 

1157 detector_exposure_id=0x28c9000400, 

1158 detector_group="RXX", 

1159 detector_name="S00", 

1160 detector_num=0, 

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

1162 exposure_id=3022042600004, 

1163 exposure_group="3022042600004", 

1164 exposure_time=-1.0*u.s, 

1165 exposure_time_requested=-1.0*u.s, 

1166 focus_z=0.0*u.mm, 

1167 group_counter_end=4, 

1168 group_counter_start=4, 

1169 has_simulated_content=False, 

1170 object="UNKNOWN", 

1171 observation_counter=4, 

1172 observation_id="AT_C_20220426_000004", 

1173 observation_type="unknown", 

1174 observation_reason="unknown", 

1175 observing_day=20220426, 

1176 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

1177 physical_filter="unknown~unknown", 

1178 pressure=None, 

1179 relative_humidity=None, 

1180 science_program="unknown", 

1181 temperature=None, 

1182 visit_id=3022042600004, 

1183 )), 

1184 ("latiss-AT_O_20230321_000053.yaml", 

1185 dict(telescope="Rubin Auxiliary Telescope", 

1186 instrument="LATISS", 

1187 boresight_rotation_coord="unknown", 

1188 can_see_sky=False, 

1189 dark_time=30.0126*u.s, 

1190 detector_exposure_id=0x96d803500, 

1191 detector_group="RXX", 

1192 detector_name="S00", 

1193 detector_num=0, 

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

1195 exposure_id=2023032100053, 

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

1197 exposure_time=30.0*u.s, 

1198 exposure_time_requested=30.0*u.s, 

1199 focus_z=0.0*u.mm, 

1200 group_counter_end=53, 

1201 group_counter_start=53, 

1202 has_simulated_content=False, 

1203 object="slew_icrs", 

1204 observation_counter=53, 

1205 observation_id="AT_O_20230321_000053", 

1206 observation_type="dark", 

1207 observation_reason="dark", 

1208 observing_day=20230321, 

1209 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

1210 physical_filter="empty~empty", 

1211 pressure=None, 

1212 relative_humidity=None, 

1213 science_program="unknown", 

1214 temperature=None, 

1215 visit_id=2593446676330000, 

1216 check_altaz=True, 

1217 )), 

1218 ("latiss-AT_O_20230705_000379_R00_S00.json", 

1219 dict(telescope="Rubin Auxiliary Telescope", 

1220 instrument="LATISS", 

1221 boresight_rotation_coord="sky", 

1222 can_see_sky=True, 

1223 dark_time=30.2418*u.s, 

1224 detector_exposure_id=0x9a2817b00, 

1225 detector_group="RXX", 

1226 detector_name="S00", 

1227 detector_num=0, 

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

1229 exposure_id=2023070500379, 

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

1231 exposure_time=30.0*u.s, 

1232 exposure_time_requested=30.0*u.s, 

1233 focus_z=-0.008921561762690544*u.mm, 

1234 group_counter_end=379, 

1235 group_counter_start=379, 

1236 has_simulated_content=False, 

1237 object="HD165763", 

1238 observation_counter=379, 

1239 observation_id="AT_O_20230705_000379", 

1240 observation_type="science", 

1241 observation_reason="sitcom-857", 

1242 observing_day=20230705, 

1243 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

1244 physical_filter="empty~holo4_003", 

1245 pressure=777.80*u.hPa, 

1246 relative_humidity=15.149999618530273, 

1247 science_program="BLOCK-59", 

1248 temperature=5.775000095367432*u.deg_C, 

1249 visit_id=2685487956090000, 

1250 check_altaz=True, 

1251 )), 

1252 ("latiss-AT_O_20240624_000106_R00_S00.yaml", 

1253 dict(telescope="Rubin Auxiliary Telescope", 

1254 instrument="LATISS", 

1255 boresight_rotation_coord="sky", 

1256 can_see_sky=True, 

1257 dark_time=30.2407*u.s, 

1258 detector_exposure_id=44358986240, 

1259 detector_group="RXX", 

1260 detector_name="S00", 

1261 detector_num=0, 

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

1263 exposure_id=2024062400106, 

1264 exposure_group="2024-06-25T01:26:31.895#1", 

1265 exposure_time=30.0*u.s, 

1266 exposure_time_requested=30.0*u.s, 

1267 focus_z=0.742219865322113*u.mm, 

1268 group_counter_end=106, 

1269 group_counter_start=106, 

1270 has_simulated_content=False, 

1271 object="HD 131586", 

1272 observation_counter=106, 

1273 observation_id="AT_O_20240624_000106", 

1274 observation_type="cwfs", 

1275 observation_reason="intra", 

1276 observing_day=20240624, 

1277 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

1278 physical_filter="SDSSr_65mm~empty", 

1279 pressure=73880*u.Pa, 

1280 relative_humidity=40.650001525878906, 

1281 science_program="cwfs", 

1282 temperature=1.5750000476837158*u.deg_C, 

1283 visit_id=2992083918950001, 

1284 check_altaz=True, 

1285 )), 

1286 ("latiss-AT_O_20240624_000106_R00_S00-patched.yaml", 

1287 dict(telescope="Rubin Auxiliary Telescope", 

1288 instrument="LATISS", 

1289 boresight_rotation_coord="sky", 

1290 can_see_sky=False, 

1291 dark_time=30.2407*u.s, 

1292 detector_exposure_id=44358986240, 

1293 detector_group="RXX", 

1294 detector_name="S00", 

1295 detector_num=0, 

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

1297 exposure_id=2024062400106, 

1298 exposure_group="2024-06-25T01:26:31.895#1", 

1299 exposure_time=30.0*u.s, 

1300 exposure_time_requested=30.0*u.s, 

1301 focus_z=0.742219865322113*u.mm, 

1302 group_counter_end=106, 

1303 group_counter_start=106, 

1304 has_simulated_content=False, 

1305 object="HD 131586", 

1306 observation_counter=106, 

1307 observation_id="AT_O_20240624_000106", 

1308 observation_type="science", 

1309 observation_reason="intra", 

1310 observing_day=20240624, 

1311 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

1312 physical_filter="SDSSr_65mm~empty", 

1313 pressure=73880*u.Pa, 

1314 relative_humidity=40.650001525878906, 

1315 science_program="cwfs", 

1316 temperature=1.5750000476837158*u.deg_C, 

1317 visit_id=2992083918950001, 

1318 check_altaz=True, 

1319 )), 

1320 ("latiss-AT_O_20240624_000169_R00_S00.yaml", 

1321 dict(telescope="Rubin Auxiliary Telescope", 

1322 instrument="LATISS", 

1323 boresight_rotation_coord="unknown", 

1324 can_see_sky=False, 

1325 dark_time=30.0096*u.s, 

1326 detector_exposure_id=44359002368, 

1327 detector_group="RXX", 

1328 detector_name="S00", 

1329 detector_num=0, 

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

1331 exposure_id=2024062400169, 

1332 exposure_group="2024-06-25T07:10:40.297", 

1333 exposure_time=30.0*u.s, 

1334 exposure_time_requested=30.0*u.s, 

1335 focus_z=0.0*u.mm, 

1336 group_counter_end=169, 

1337 group_counter_start=169, 

1338 has_simulated_content=False, 

1339 object="FlatField position", 

1340 observation_counter=169, 

1341 observation_id="AT_O_20240624_000169", 

1342 observation_type="dark", 

1343 observation_reason="dark", 

1344 observing_day=20240624, 

1345 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"), 

1346 physical_filter="SDSSr_65mm~empty", 

1347 pressure=73760*u.Pa, 

1348 relative_humidity=44.42499923706055, 

1349 science_program="unknown", 

1350 temperature=0.02500000037252903*u.deg_C, 

1351 visit_id=2992290402970000, 

1352 check_altaz=True, 

1353 )), 

1354 ) 

1355 with warnings.catch_warnings(): 

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

1357 warnings.simplefilter("ignore", VerifyWarning) 

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

1359 for filename, expected in test_data: 

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

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

1362 

1363 # This translation should fail 

1364 with self.assertRaises(KeyError): 

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

1366 

1367 def test_imsim_translator(self): 

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

1369 dict(telescope="Simonyi Survey Telescope", 

1370 instrument="LSSTCam-imSim", 

1371 boresight_rotation_coord="sky", 

1372 can_see_sky=True, 

1373 dark_time=0.0*u.s, 

1374 detector_exposure_id=3010002036, 

1375 detector_group="R11", 

1376 detector_name="S00", 

1377 detector_num=36, 

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

1379 exposure_id=3010002, 

1380 exposure_group="3010002", 

1381 exposure_time=0.0*u.s, 

1382 focus_z=0.0*u.mm, 

1383 group_counter_end=3010002, 

1384 group_counter_start=3010002, 

1385 has_simulated_content=True, 

1386 object="UNKNOWN", 

1387 observation_counter=0, 

1388 observation_id="3010002", 

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

1390 observation_reason="imsim", 

1391 observing_day=20220101, 

1392 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"), 

1393 physical_filter="i", 

1394 pressure=None, 

1395 relative_humidity=40.0, 

1396 science_program="42", 

1397 temperature=None, 

1398 visit_id=3010002, 

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

1400 )), 

1401 ("imsim-lsst_a_204595_R11_S02_i.yaml", 

1402 dict(telescope="Simonyi Survey Telescope", 

1403 instrument="LSSTCam-imSim", 

1404 boresight_rotation_coord="sky", 

1405 can_see_sky=True, 

1406 dark_time=30.0*u.s, 

1407 detector_exposure_id=204595038, 

1408 detector_group="R11", 

1409 detector_name="S02", 

1410 detector_num=38, 

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

1412 exposure_id=204595, 

1413 exposure_group="204595", 

1414 exposure_time=30.0*u.s, 

1415 exposure_time_requested=30.0*u.s, 

1416 focus_z=0.0*u.mm, 

1417 group_counter_end=204595, 

1418 group_counter_start=204595, 

1419 has_simulated_content=True, 

1420 object="UNKNOWN", 

1421 observation_counter=0, 

1422 observation_id="204595", 

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

1424 observation_reason="imsim", 

1425 observing_day=20221005, 

1426 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"), 

1427 physical_filter="i_sim_1.4", 

1428 pressure=None, 

1429 relative_humidity=40.0, 

1430 science_program="204595", 

1431 temperature=None, 

1432 visit_id=204595, 

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

1434 )), 

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

1436 dict(telescope="Simonyi Survey Telescope", 

1437 instrument="LSSTCam-imSim", 

1438 boresight_rotation_coord="sky", 

1439 can_see_sky=False, 

1440 dark_time=30.0*u.s, 

1441 detector_exposure_id=5000007042, 

1442 detector_group="R11", 

1443 detector_name="S20", 

1444 detector_num=42, 

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

1446 exposure_id=5000007, 

1447 exposure_group="5000007", 

1448 exposure_time=30.0*u.s, 

1449 focus_z=0.0*u.mm, 

1450 group_counter_end=5000007, 

1451 group_counter_start=5000007, 

1452 has_simulated_content=True, 

1453 object="UNKNOWN", 

1454 observation_counter=0, 

1455 observation_id="5000007", 

1456 observation_type="flat", 

1457 observation_reason="imsim", 

1458 observing_day=20220806, 

1459 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"), 

1460 physical_filter="i", 

1461 pressure=None, 

1462 relative_humidity=40.0, 

1463 science_program="5000007", 

1464 temperature=None, 

1465 visit_id=5000007, 

1466 )), 

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

1468 dict(telescope="Simonyi Survey Telescope", 

1469 instrument="LSSTCam-imSim", 

1470 boresight_rotation_coord="sky", 

1471 can_see_sky=True, 

1472 dark_time=500.0*u.s, 

1473 detector_exposure_id=4010003040, 

1474 detector_group="R11", 

1475 detector_name="S11", 

1476 detector_num=40, 

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

1478 exposure_id=4010003, 

1479 exposure_group="4010003", 

1480 exposure_time=500.0*u.s, 

1481 focus_z=0.0*u.mm, 

1482 group_counter_end=4010003, 

1483 group_counter_start=4010003, 

1484 has_simulated_content=True, 

1485 object="UNKNOWN", 

1486 observation_counter=0, 

1487 observation_id="4010003", 

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

1489 observation_reason="imsim", 

1490 observing_day=20220101, 

1491 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"), 

1492 physical_filter="i", 

1493 pressure=None, 

1494 relative_humidity=40.0, 

1495 science_program="42", 

1496 temperature=None, 

1497 visit_id=4010003, 

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

1499 )), 

1500 ) 

1501 for filename, expected in test_data: 

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

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

1504 

1505 def test_ts3_translator(self): 

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

1507 dict(telescope=None, 

1508 instrument="LSST-TS3", 

1509 can_see_sky=False, 

1510 dark_time=44.631*u.s, 

1511 detector_exposure_id=201811151255111433, 

1512 detector_group="R433", 

1513 detector_name="S00", 

1514 detector_num=433, 

1515 detector_serial="E2V-CCD250-411", 

1516 exposure_id=201811151255111, 

1517 exposure_group="201811151255111", 

1518 exposure_time=44.631*u.s, 

1519 exposure_time_requested=44.631*u.s, 

1520 focus_z=0.0*u.mm, 

1521 group_counter_end=25, 

1522 group_counter_start=25, 

1523 has_simulated_content=False, 

1524 observation_counter=25, 

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

1526 observation_type="flat", 

1527 observation_reason="lambda", 

1528 observing_day=20181115, 

1529 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"), 

1530 physical_filter="550CutOn", 

1531 science_program="2018-11-15", 

1532 visit_id=201811151255111)), 

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

1534 dict(telescope=None, 

1535 instrument="LSST-TS3", 

1536 can_see_sky=False, 

1537 dark_time=30.611*u.s, 

1538 detector_exposure_id=201607220607067071, 

1539 detector_group="R071", 

1540 detector_name="S00", 

1541 detector_num=71, 

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

1543 exposure_id=201607220607067, 

1544 exposure_group="201607220607067", 

1545 exposure_time=30.611*u.s, 

1546 focus_z=0.0*u.mm, 

1547 group_counter_end=67, 

1548 group_counter_start=67, 

1549 has_simulated_content=False, 

1550 observation_counter=67, 

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

1552 observation_type="flat", 

1553 observation_reason="lambda", 

1554 observing_day=20160721, 

1555 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"), 

1556 physical_filter="550CutOn", 

1557 science_program="2016-07-22", 

1558 visit_id=201607220607067)), 

1559 ) 

1560 for filename, expected in test_data: 

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

1562 with warnings.catch_warnings(): 

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

1564 warnings.simplefilter("ignore", VerifyWarning) 

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

1566 

1567 def test_ts8_translator(self): 

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

1569 dict(telescope=None, 

1570 instrument="LSST-TS8", 

1571 can_see_sky=False, 

1572 dark_time=0.0*u.s, 

1573 detector_exposure_id=201807241041568067, 

1574 detector_group="RTM-010", 

1575 detector_name="S11", 

1576 detector_num=67, 

1577 detector_serial="E2V-CCD250-179", 

1578 exposure_id=201807241041568, 

1579 exposure_group="201807241041568", 

1580 exposure_time=0.0*u.s, 

1581 focus_z=0.0*u.mm, 

1582 group_counter_end=24, 

1583 group_counter_start=24, 

1584 has_simulated_content=False, 

1585 observation_counter=24, 

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

1587 observation_type="bias", 

1588 observation_reason="lambda", 

1589 observing_day=20180724, 

1590 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"), 

1591 physical_filter="y", 

1592 science_program="6006D", 

1593 visit_id=201807241041568)), 

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

1595 dict(telescope=None, 

1596 instrument="LSST-TS8", 

1597 can_see_sky=False, 

1598 dark_time=21.913*u.s, 

1599 detector_exposure_id=201807241028453065, 

1600 detector_group="RTM-010", 

1601 detector_name="S02", 

1602 detector_num=65, 

1603 detector_serial="E2V-CCD250-200", 

1604 exposure_id=201807241028453, 

1605 exposure_group="201807241028453", 

1606 exposure_time=21.913*u.s, 

1607 focus_z=0.0*u.mm, 

1608 group_counter_end=17, 

1609 group_counter_start=17, 

1610 has_simulated_content=False, 

1611 observation_counter=17, 

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

1613 observation_type="flat", 

1614 observation_reason="lambda", 

1615 observing_day=20180724, 

1616 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"), 

1617 physical_filter="z", 

1618 science_program="6006D", 

1619 visit_id=201807241028453)), 

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

1621 dict(telescope=None, 

1622 instrument="LSST-TS8", 

1623 can_see_sky=False, 

1624 dark_time=300.0*u.s, 

1625 detector_exposure_id=201712151140062027, 

1626 detector_group="RTM-005", 

1627 detector_name="S00", 

1628 detector_num=27, 

1629 detector_serial="E2V-CCD250-220", 

1630 exposure_id=201712151140062, 

1631 exposure_group="201712151140062", 

1632 exposure_time=300.0*u.s, 

1633 exposure_time_requested=300.0*u.s, 

1634 focus_z=0.0*u.mm, 

1635 group_counter_end=94, 

1636 group_counter_start=94, 

1637 has_simulated_content=False, 

1638 observation_counter=94, 

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

1640 observation_type="fe55", 

1641 observation_reason="fe55", 

1642 observing_day=20171215, 

1643 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"), 

1644 physical_filter="i", 

1645 science_program="6288", 

1646 visit_id=201712151140062)), 

1647 ("ts8-TS_C_20220711_000174_R22_S00.yaml", 

1648 dict(telescope=None, 

1649 instrument="LSST-TS8", 

1650 can_see_sky=False, 

1651 dark_time=210.315*u.s, 

1652 detector_exposure_id=202207111714459018, 

1653 detector_group="RTM-004", 

1654 detector_name="S00", 

1655 detector_num=18, 

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

1657 exposure_id=202207111714459, 

1658 exposure_group="202207111714459", 

1659 exposure_time=210.0*u.s, 

1660 focus_z=0.0*u.mm, 

1661 group_counter_end=174, 

1662 group_counter_start=174, 

1663 has_simulated_content=False, 

1664 observation_counter=174, 

1665 observation_id="TS_C_20220711_000174", 

1666 observation_type="spot", 

1667 observation_reason="spot_flat", 

1668 observing_day=20220711, 

1669 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"), 

1670 physical_filter="unknown", 

1671 science_program="7074D", 

1672 visit_id=202207111714459)), 

1673 ("ts8-TS_C_20230512_000021_R22_S02.yaml", 

1674 dict(telescope=None, 

1675 instrument="LSST-TS8", 

1676 can_see_sky=False, 

1677 dark_time=15.165*u.s, 

1678 detector_exposure_id=202305121917591020, 

1679 detector_group="RTM-004", 

1680 detector_name="S02", 

1681 detector_num=20, 

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

1683 exposure_id=202305121917591, 

1684 exposure_group="202305121917591", 

1685 exposure_time=15.0*u.s, 

1686 focus_z=0.0*u.mm, 

1687 group_counter_end=21, 

1688 group_counter_start=21, 

1689 has_simulated_content=False, 

1690 observation_counter=21, 

1691 observation_id="TS_C_20230512_000021", 

1692 observation_type="flat", 

1693 observation_reason="sflat_hi", 

1694 observing_day=20230512, 

1695 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"), 

1696 physical_filter="HIGH", 

1697 science_program="7187D", 

1698 visit_id=202305121917591)), 

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

1700 dict(telescope=None, 

1701 instrument="LSST-TS8", 

1702 can_see_sky=False, 

1703 dark_time=15.165*u.s, 

1704 detector_exposure_id=202305121917591020, 

1705 detector_group="RTM-004", 

1706 detector_name="S02", 

1707 detector_num=20, 

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

1709 exposure_id=202305121917591, 

1710 exposure_group="202305121917591", 

1711 exposure_time=15.0*u.s, 

1712 focus_z=0.0*u.mm, 

1713 group_counter_end=21, 

1714 group_counter_start=21, 

1715 has_simulated_content=False, 

1716 observation_counter=21, 

1717 observation_id="TS_C_20230512_000021", 

1718 observation_type="flat", 

1719 observation_reason="sflat_hi", 

1720 observing_day=20230512, 

1721 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"), 

1722 physical_filter="HIGH", 

1723 science_program="7187D", 

1724 visit_id=202305121917591)), 

1725 ("ts8-TS_C_20230523_000127_R22_S00.yaml", 

1726 dict(telescope=None, 

1727 instrument="LSST-TS8", 

1728 can_see_sky=False, 

1729 dark_time=15.16*u.s, 

1730 detector_exposure_id=202305231936194018, 

1731 detector_group="RTM-004", 

1732 detector_name="S00", 

1733 detector_num=18, 

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

1735 exposure_id=202305231936194, 

1736 exposure_group="202305231936194", 

1737 exposure_time=15.0*u.s, 

1738 focus_z=0.0*u.mm, 

1739 group_counter_end=127, 

1740 group_counter_start=127, 

1741 has_simulated_content=False, 

1742 observation_counter=127, 

1743 observation_id="TS_C_20230523_000127", 

1744 observation_type="flat", 

1745 observation_reason="flat", 

1746 observing_day=20230523, 

1747 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"), 

1748 physical_filter="unknown", 

1749 science_program="7220D", 

1750 visit_id=202305231936194)), 

1751 ("ts8-TS_C_20230525_000041_R22_S00.yaml", 

1752 dict(telescope=None, 

1753 instrument="LSST-TS8", 

1754 can_see_sky=False, 

1755 dark_time=30.151*u.s, 

1756 detector_exposure_id=3023052500041018, 

1757 detector_group="RTM-004", 

1758 detector_name="S00", 

1759 detector_num=18, 

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

1761 exposure_id=3023052500041, 

1762 exposure_group="3023052500041", 

1763 exposure_time=30.0*u.s, 

1764 focus_z=0.0*u.mm, 

1765 group_counter_end=41, 

1766 group_counter_start=41, 

1767 has_simulated_content=False, 

1768 observation_counter=41, 

1769 observation_id="TS_C_20230525_000041", 

1770 observation_type="flat", 

1771 observation_reason="flat", 

1772 observing_day=20230525, 

1773 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"), 

1774 physical_filter="unknown", 

1775 science_program="7227D", 

1776 visit_id=3023052500041)), 

1777 ) 

1778 for filename, expected in test_data: 

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

1780 with warnings.catch_warnings(): 

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

1782 warnings.simplefilter("ignore", VerifyWarning) 

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

1784 

1785 def test_ucdcam_translator(self): 

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

1787 dict(telescope=None, 

1788 instrument="LSST-UCDCam", 

1789 can_see_sky=False, 

1790 dark_time=2.07859*u.s, 

1791 detector_exposure_id=42370917130, 

1792 detector_group="R21", 

1793 detector_name="S01", 

1794 detector_num=10, 

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

1796 exposure_id=2023103100227, 

1797 exposure_group="2023103100227", 

1798 exposure_time=1.0*u.s, 

1799 exposure_time_requested=1.0*u.s, 

1800 focus_z=0.0*u.mm, 

1801 group_counter_end=227, 

1802 group_counter_start=227, 

1803 has_simulated_content=False, 

1804 observation_counter=227, 

1805 observation_id="TS_C_20231031_000227", 

1806 observation_type="flat", 

1807 observation_reason="flat", 

1808 observing_day=20231031, 

1809 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"), 

1810 physical_filter="r", 

1811 science_program="unknown", 

1812 visit_id=2023103100227)), 

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

1814 dict(telescope=None, 

1815 instrument="LSST-UCDCam", 

1816 can_see_sky=False, 

1817 dark_time=3.082*u.s, 

1818 detector_exposure_id=179029732609, 

1819 detector_group="R22", 

1820 detector_name="S01", 

1821 detector_num=1, 

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

1823 exposure_id=3023073000237, 

1824 exposure_group="3023073000237", 

1825 exposure_time=2.0*u.s, 

1826 focus_z=0.0*u.mm, 

1827 group_counter_end=237, 

1828 group_counter_start=237, 

1829 has_simulated_content=False, 

1830 observation_counter=237, 

1831 observation_id="TS_C_20230730_000237", 

1832 observation_type="flat", 

1833 observation_reason="flat", 

1834 observing_day=20230730, 

1835 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"), 

1836 physical_filter="r", 

1837 science_program="unknown", 

1838 visit_id=3023073000237)), 

1839 ) 

1840 for filename, expected in test_data: 

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

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

1843 

1844 def test_compute_exposure_id(self): 

1845 test_data = { 

1846 (20240318, 43): 2024031800043, 

1847 (20240318, 43, None): 2024031800043, 

1848 ("2024-03-18", "42", "O"): 2024031800042, 

1849 (20240318, "1", "H"): 4024031800001, 

1850 # Pre phase-out of offsets 

1851 (20231004, "1", "C"): 3023100400001, 

1852 ("2025-04-17", 101, "P"): 5025041700101, 

1853 (20250417, 42, "Q"): 6025041700042, 

1854 (20250417, 42, "S"): 7025041700042, 

1855 # Post phase-out of offsets 

1856 (20250418, 43): 2025041800043, 

1857 ("2023-10-05", 1, "C"): 2023100500001, 

1858 ("2025-04-18", 101, "P"): 2025041800101, 

1859 (20250418, 42, "Q"): 2025041800042, 

1860 (20250418, 42, "S"): 2025041800042, 

1861 } 

1862 

1863 for inputs, expected in test_data.items(): 

1864 with self.subTest(inputs=inputs): 

1865 self.assertEqual( 

1866 lsst.obs.lsst.translators.lsst.LsstBaseTranslator.compute_exposure_id(*inputs), 

1867 expected 

1868 ) 

1869 

1870 def test_checker(self): 

1871 filename = "latiss-future.yaml" 

1872 from astro_metadata_translator.tests import read_test_file 

1873 from astro_metadata_translator import ObservationInfo 

1874 header = read_test_file(filename, self.datadir) 

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

1876 self.assertTrue(obsInfo) 

1877 

1878 def test_fix_header(self): 

1879 from astro_metadata_translator import fix_header 

1880 from astro_metadata_translator.tests import read_test_file 

1881 # Test that header fix up is working 

1882 # Not all headers are used in metadata translation 

1883 test_data = ( 

1884 ("latiss-AT_O_20210212_000006.yaml", 

1885 dict(RASTART=260.024385071917)), 

1886 ("latiss-AT_O_20210210_000011.yaml", 

1887 dict(RASTART=355.41750341182313)), 

1888 ) 

1889 for filename, expected in test_data: 

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

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

1892 modified = fix_header(header) 

1893 self.assertTrue(modified) 

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

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

1896 

1897 

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

1899 unittest.main()