Coverage for tests/test_translator.py: 99%

108 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-14 10:40 +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_O_20260315_000051_R01_S01.yaml", 

45 dict(telescope="Simonyi Survey Telescope", 

46 instrument="LSSTCam", 

47 boresight_rotation_coord="unknown", 

48 boresight_rotation_angle=89.30082602885373*u.deg, 

49 can_see_sky=False, 

50 dark_time=5.01371*u.s, 

51 detector_exposure_id=0xb8e803301, 

52 detector_group="R01", 

53 detector_name="S01", 

54 detector_num=1, 

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

56 exposure_id=2026031500051, 

57 exposure_group="2026-03-15T22:50:34.110", 

58 exposure_time=5.0*u.s, 

59 exposure_time_requested=5.0*u.s, 

60 focus_z=-2.1340826845674403*u.mm, 

61 group_counter_end=51, 

62 group_counter_start=51, 

63 has_simulated_content=False, 

64 object="azel_target", 

65 observation_counter=51, 

66 observation_id="MC_O_20260315_000051", 

67 observation_type="dark", 

68 observation_reason="tmacheckout", 

69 observing_day=20260315, 

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

71 physical_filter="i_39", 

72 pressure=74150.0*u.Pa, 

73 relative_humidity=58.849998474121094, 

74 science_program="BLOCK-T250", 

75 temperature=11.800000190734863*u.deg_C, 

76 visit_id=3535446341100000)), 

77 ("lsstCam-MC_C_20190319_000001_R10_S02.yaml", 

78 dict(telescope="Simonyi Survey Telescope", 

79 instrument="LSSTCam", 

80 boresight_rotation_coord="unknown", 

81 can_see_sky=False, 

82 dark_time=0.0*u.s, 

83 detector_exposure_id=0x269200011d, 

84 detector_group="R10", 

85 detector_name="S02", 

86 detector_num=29, 

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

88 exposure_id=3019031900001, 

89 exposure_group="3019031900001", 

90 exposure_time=0.0*u.s, 

91 exposure_time_requested=0.0*u.s, 

92 focus_z=0.0*u.mm, 

93 group_counter_end=1, 

94 group_counter_start=1, 

95 has_simulated_content=False, 

96 object="UNKNOWN", 

97 observation_counter=1, 

98 observation_id="MC_C_20190319_000001", 

99 observation_type="bias", 

100 observation_reason="bias", 

101 observing_day=20190319, 

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

103 physical_filter="unknown", 

104 pressure=None, 

105 relative_humidity=None, 

106 science_program="unknown", 

107 temperature=None, 

108 visit_id=3019031900001)), 

109 ("lsstCam-MC_C_20190319_000001_R22_S21.yaml", 

110 dict(telescope="Simonyi Survey Telescope", 

111 instrument="LSSTCam", 

112 boresight_rotation_coord="unknown", 

113 can_see_sky=False, 

114 dark_time=0.0*u.s, 

115 detector_exposure_id=0x2692000161, 

116 detector_group="R22", 

117 detector_name="S21", 

118 detector_num=97, 

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

120 exposure_id=3019031900001, 

121 exposure_group="3019031900001", 

122 exposure_time=0.0*u.s, 

123 exposure_time_requested=0.0*u.s, 

124 focus_z=0.0*u.mm, 

125 group_counter_end=1, 

126 group_counter_start=1, 

127 has_simulated_content=False, 

128 object="UNKNOWN", 

129 observation_counter=1, 

130 observation_id="MC_C_20190319_000001", 

131 observation_type="bias", 

132 observation_reason="bias", 

133 observing_day=20190319, 

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

135 physical_filter="unknown", 

136 pressure=None, 

137 relative_humidity=None, 

138 science_program="unknown", 

139 temperature=None, 

140 visit_id=3019031900001)), 

141 ("lsstCam-MC_C_20190322_000002_R10_S22.yaml", 

142 dict(telescope="Simonyi Survey Telescope", 

143 instrument="LSSTCam", 

144 boresight_rotation_coord="unknown", 

145 can_see_sky=False, 

146 dark_time=1.0*u.s, 

147 detector_exposure_id=0x2693800223, 

148 detector_group="R10", 

149 detector_name="S22", 

150 detector_num=35, 

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

152 exposure_id=3019032200002, 

153 exposure_group="3019032200002", 

154 exposure_time=1.0*u.s, 

155 exposure_time_requested=1.0*u.s, 

156 focus_z=0.0*u.mm, 

157 group_counter_end=2, 

158 group_counter_start=2, 

159 has_simulated_content=False, 

160 object="UNKNOWN", 

161 observation_counter=2, 

162 observation_id="MC_C_20190322_000002", 

163 observation_type="flat", 

164 observation_reason="flat", 

165 observing_day=20190322, 

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

167 physical_filter="SDSSi~ND_OD0.5", 

168 pressure=None, 

169 relative_humidity=None, 

170 science_program="6489D", 

171 temperature=None, 

172 visit_id=3019032200002)), 

173 ("lsstCam-MC_C_20190406_000643_R10_S00.yaml", 

174 dict(telescope="Simonyi Survey Telescope", 

175 instrument="LSSTCam", 

176 boresight_rotation_coord="unknown", 

177 can_see_sky=False, 

178 dark_time=1007.422*u.s, 

179 detector_exposure_id=0x269b02831b, 

180 detector_group="R10", 

181 detector_name="S00", 

182 detector_num=27, 

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

184 exposure_id=3019040600643, 

185 exposure_group="3019040600643", 

186 exposure_time=999.99*u.s, 

187 exposure_time_requested=999.99*u.s, 

188 focus_z=0.0*u.mm, 

189 group_counter_end=643, 

190 group_counter_start=643, 

191 has_simulated_content=False, 

192 object="UNKNOWN", 

193 observation_counter=643, 

194 observation_id="MC_C_20190406_000643", 

195 observation_type="flat", 

196 observation_reason="lambda", 

197 observing_day=20190406, 

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

199 physical_filter="950nm", 

200 pressure=None, 

201 relative_humidity=None, 

202 science_program="6549D", 

203 temperature=None, 

204 visit_id=3019040600643)), 

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

206 dict(telescope="Simonyi Survey Telescope", 

207 instrument="LSSTCam", 

208 boresight_rotation_coord="unknown", 

209 can_see_sky=False, 

210 dark_time=0.0*u.s, 

211 detector_exposure_id=0xdb480011d, 

212 detector_group="R10", 

213 detector_name="S02", 

214 detector_num=29, 

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

216 exposure_id=2029031900001, 

217 exposure_group="2029031900001", 

218 exposure_time=0.0*u.s, 

219 exposure_time_requested=0.0*u.s, 

220 focus_z=0.0*u.mm, 

221 group_counter_end=1, 

222 group_counter_start=1, 

223 has_simulated_content=False, 

224 object="UNKNOWN", 

225 observation_counter=1, 

226 observation_id="MC_C_20190319_000001", 

227 observation_type="bias", 

228 observation_reason="bias", 

229 observing_day=20290319, 

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

231 physical_filter="unknown", 

232 pressure=None, 

233 relative_humidity=None, 

234 science_program="unknown", 

235 temperature=None, 

236 visit_id=2029031900001)), 

237 ("lsstCam-MC_C_20231107_000078_R01_S01.json", 

238 dict(telescope="Simonyi Survey Telescope", 

239 instrument="LSSTCam", 

240 boresight_rotation_coord="unknown", 

241 can_see_sky=False, 

242 dark_time=0.092*u.s, 

243 detector_exposure_id=0x9e1004e01, 

244 detector_group="R01", 

245 detector_name="S01", 

246 detector_num=1, 

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

248 exposure_id=2023110700078, 

249 exposure_group="2023110700078", 

250 exposure_time=0.0*u.s, 

251 exposure_time_requested=0.0*u.s, 

252 focus_z=0.0*u.mm, 

253 group_counter_end=78, 

254 group_counter_start=78, 

255 has_simulated_content=False, 

256 object="UNKNOWN", 

257 observation_counter=78, 

258 observation_id="MC_C_20231107_000078", 

259 observation_type="bias", 

260 observation_reason="bot_persistence", 

261 observing_day=20231107, 

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

263 physical_filter="ph_5", 

264 pressure=None, 

265 relative_humidity=None, 

266 science_program="13518", 

267 temperature=None, 

268 visit_id=2023110700078)), 

269 ("lsstCam-MC_O_20250415_000060_R01_S01.yaml", 

270 dict(telescope="Simonyi Survey Telescope", 

271 instrument="LSSTCam", 

272 boresight_rotation_coord="sky", 

273 boresight_rotation_angle=-43.62470328866432*u.deg, 

274 can_see_sky=True, 

275 dark_time=15.9548*u.s, 

276 detector_exposure_id=0xae7803c01, 

277 detector_group="R01", 

278 detector_name="S01", 

279 detector_num=1, 

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

281 exposure_id=2025041500060, 

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

283 exposure_time=15.000998497009277*u.s, 

284 exposure_time_requested=15.0*u.s, 

285 focus_z=-2.856403126427015*u.mm, 

286 group_counter_end=60, 

287 group_counter_start=60, 

288 has_simulated_content=False, 

289 object="Vela_SNR", 

290 observation_counter=60, 

291 observation_id="MC_O_20250415_000060", 

292 observation_type="acq", 

293 observation_reason="first_focus", 

294 observing_day=20250415, 

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

296 physical_filter="i_39", 

297 pressure=74390.0*u.Pa, 

298 relative_humidity=33.400001525878906, 

299 science_program="BLOCK-T434", 

300 temperature=11.024999618530273*u.deg_C, 

301 visit_id=3246943901430000)), 

302 ("lsstCam-MC_O_20250415_000228_R10_S20.yaml", 

303 dict(telescope="Simonyi Survey Telescope", 

304 instrument="LSSTCam", 

305 boresight_rotation_coord="sky", 

306 boresight_rotation_angle=28.988651816521724*u.deg, 

307 can_see_sky=True, 

308 dark_time=30.9422*u.s, 

309 detector_exposure_id=0xae780e421, 

310 detector_group="R10", 

311 detector_name="S20", 

312 detector_num=33, 

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

314 exposure_id=2025041500228, 

315 exposure_group="2025-04-16T07:03:14.565#1", 

316 exposure_time=30.001051664352417*u.s, 

317 exposure_time_requested=30.0*u.s, 

318 focus_z=-2.8329331104974114*u.mm, 

319 group_counter_end=228, 

320 group_counter_start=228, 

321 has_simulated_content=False, 

322 object="UNKNOWN", 

323 observation_counter=228, 

324 observation_id="MC_O_20250415_000228", 

325 observation_type="acq", 

326 observation_reason="infocus_clt-001", 

327 observing_day=20250415, 

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

329 physical_filter="i_39", 

330 pressure=74225.0*u.Pa, 

331 relative_humidity=25.475000381469727, 

332 science_program="BLOCK-T417", 

333 temperature=10.350000381469727*u.deg_C, 

334 visit_id=3247165945650001)), 

335 ("lsstCam-MC_O_20250422_000250_R01_S01.yaml", 

336 dict(telescope="Simonyi Survey Telescope", 

337 instrument="LSSTCam", 

338 boresight_rotation_coord="sky", 

339 boresight_rotation_angle=138.6291409919304*u.deg, 

340 can_see_sky=True, 

341 dark_time=15.9482*u.s, 

342 detector_exposure_id=0xaeb00fa01, 

343 detector_group="R01", 

344 detector_name="S01", 

345 detector_num=1, 

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

347 exposure_id=2025042200250, 

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

349 exposure_time=15.000065088272095*u.s, 

350 exposure_time_requested=15.0*u.s, 

351 focus_z=-4.0921929561356105*u.mm, 

352 group_counter_end=250, 

353 group_counter_start=250, 

354 has_simulated_content=False, 

355 object="Rubin_SV_216_-17", 

356 observation_counter=250, 

357 observation_id="MC_O_20250422_000250", 

358 observation_type="acq", 

359 observation_reason="infocus_clt-001", 

360 observing_day=20250422, 

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

362 physical_filter="r_57", 

363 pressure=74255.0*u.Pa, 

364 relative_humidity=29.475000381469727, 

365 science_program="BLOCK-T417", 

366 temperature=11.274999618530273*u.deg_C, 

367 visit_id=3253099412870000)), 

368 ("lsstCam-MC_C_20250425_000031_R01_S01.yaml", 

369 dict(telescope="Simonyi Survey Telescope", 

370 instrument="LSSTCam", 

371 boresight_rotation_coord="unknown", 

372 boresight_rotation_angle=0.0*u.deg, 

373 can_see_sky=None, 

374 dark_time=1469.57*u.s, 

375 detector_exposure_id=0xaec801f01, 

376 detector_group="R01", 

377 detector_name="S01", 

378 detector_num=1, 

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

380 exposure_id=2025042500031, 

381 exposure_group="2025042500031", 

382 exposure_time=2.767*u.s, 

383 exposure_time_requested=2.767*u.s, 

384 focus_z=0.0*u.mm, 

385 group_counter_end=31, 

386 group_counter_start=31, 

387 has_simulated_content=False, 

388 object="UNKNOWN", 

389 observation_counter=31, 

390 observation_id="MC_C_20250425_000031", 

391 observation_type="unknown", 

392 observation_reason="unknown", 

393 observing_day=20250425, 

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

395 physical_filter="unknown", 

396 pressure=None, 

397 relative_humidity=None, 

398 science_program="unknown", 

399 temperature=None, 

400 visit_id=2025042500031)), 

401 ("lsstCam-MC_O_20250609_000578_R01_S01.yaml", 

402 dict(telescope="Simonyi Survey Telescope", 

403 instrument="LSSTCam", 

404 boresight_rotation_coord="sky", 

405 boresight_rotation_angle=131.35723576573005*u.deg, 

406 can_see_sky=True, 

407 dark_time=30.9487*u.s, 

408 detector_exposure_id=0xb03024201, 

409 detector_group="R01", 

410 detector_name="S01", 

411 detector_num=1, 

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

413 exposure_id=2025060900578, 

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

415 exposure_time=30.000904321670532*u.s, 

416 exposure_time_requested=30.0*u.s, 

417 focus_z=-3.200530845386125*u.mm, 

418 group_counter_end=578, 

419 group_counter_start=578, 

420 has_simulated_content=False, 

421 object="Rubin_SV_320_-15", 

422 observation_counter=578, 

423 observation_id="MC_O_20250609_000578", 

424 observation_type="science", 

425 observation_reason="field_survey_science", 

426 observing_day=20250609, 

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

428 physical_filter="z_20", 

429 pressure=74210.0*u.Pa, 

430 relative_humidity=11.175000190734863, 

431 science_program="BLOCK-365", 

432 temperature=9.699999809265137*u.deg_C, 

433 visit_id=3294702866920000)), 

434 ("lsstCam-MC_O_20251121_000156_R44_SW0.json", 

435 dict(telescope="Simonyi Survey Telescope", 

436 instrument="LSSTCam", 

437 boresight_rotation_coord="sky", 

438 boresight_rotation_angle=290.31522740370315*u.deg, 

439 can_see_sky=True, 

440 dark_time=30.9318*u.s, 

441 detector_exposure_id=0xb55809ccb, 

442 detector_group="R44", 

443 detector_name="SW0", 

444 detector_num=203, 

445 detector_serial="ITL-4400B-025", 

446 exposure_id=2025112100156, 

447 exposure_group="2025-11-22T03:25:16.951", 

448 exposure_time=30.00100302696228*u.s, 

449 exposure_time_requested=30.0*u.s, 

450 focus_z=-1.903796731126306*u.mm, 

451 group_counter_end=156, 

452 group_counter_start=156, 

453 has_simulated_content=False, 

454 object="lowdust GW_case_large_1", 

455 observation_counter=156, 

456 observation_id="MC_O_20251121_000156", 

457 observation_type="science", 

458 observation_reason="too_gw_case_large_1_i3", 

459 observing_day=20251121, 

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

461 physical_filter="i_39", 

462 pressure=74225.0*u.Pa, 

463 relative_humidity=29.75, 

464 science_program="BLOCK-407", 

465 temperature=12.350000381469727*u.deg_C, 

466 wcs_params=dict(max_sep=2.0), 

467 visit_id=3437115169510000)), 

468 ) 

469 for filename, expected in test_data: 

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

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

472 

473 def test_phoSimLsstCam_translator(self): 

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

475 dict(telescope="Simonyi Survey Telescope", 

476 instrument="LSSTCam", 

477 boresight_rotation_coord="sky", 

478 can_see_sky=True, 

479 dark_time=15.0*u.s, 

480 detector_exposure_id=0x401780205a, 

481 detector_group="R22", 

482 detector_name="S00", 

483 detector_num=90, 

484 detector_serial="E2V-CCD250-369", 

485 detector_unique_name="R22_S00", 

486 exposure_group="4010021700032", 

487 exposure_id=4010021700032, 

488 exposure_time=15.0*u.s, 

489 exposure_time_requested=15.0*u.s, 

490 focus_z=0.0*u.mm, 

491 group_counter_end=32, 

492 group_counter_start=32, 

493 has_simulated_content=True, 

494 object="UNKNOWN", 

495 observation_counter=32, 

496 observation_id="MC_H_20100217_000032", 

497 observation_reason="phosim", 

498 observation_type="science", 

499 observing_day=20100217, 

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

501 physical_filter="g", 

502 pressure=None, 

503 relative_humidity=None, 

504 science_program="9006001", 

505 temperature=None, 

506 visit_id=4010021700032)), 

507 ) 

508 for filename, expected in test_data: 

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

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

511 check_wcs=False, **expected) 

512 

513 def test_lsstCamSim_translator(self): 

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

515 dict(telescope="Simonyi Survey Telescope", 

516 instrument="LSSTCamSim", 

517 boresight_rotation_coord="sky", 

518 boresight_rotation_angle=81.12326734428959 * u.deg, 

519 can_see_sky=True, 

520 dark_time=30.0*u.s, 

521 detector_exposure_id=730756993118, 

522 detector_group="R22", 

523 detector_name="S11", 

524 detector_num=94, 

525 detector_serial="E2V-CCD250-382", 

526 detector_unique_name="R22_S11", 

527 exposure_group="7024032100720", 

528 exposure_id=7024032100720, 

529 exposure_time=30.0*u.s, 

530 exposure_time_requested=30.0*u.s, 

531 focus_z=0.0*u.mm, 

532 group_counter_end=720, 

533 group_counter_start=720, 

534 has_simulated_content=True, 

535 object="UNKNOWN", 

536 observation_counter=720, 

537 observation_id="MC_S_20240321_000720", 

538 observation_reason="survey", 

539 observation_type="science", 

540 observing_day=20240321, 

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

542 physical_filter="r_57", 

543 pressure=None, 

544 relative_humidity=None, 

545 science_program="720", 

546 temperature=None, 

547 visit_id=7024032100720)), 

548 ) 

549 for filename, expected in test_data: 

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

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

552 check_wcs=False, **expected) 

553 

554 def test_comCam_translator(self): 

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

556 dict(telescope="Simonyi Survey Telescope", 

557 instrument="LSSTComCam", 

558 boresight_rotation_coord="unknown", 

559 can_see_sky=False, 

560 dark_time=0.398*u.s, 

561 detector_exposure_id=0x26b6000100, 

562 detector_group="R22", 

563 detector_name="S00", 

564 detector_num=0, 

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

566 exposure_id=3019053000001, 

567 exposure_group="3019053000001", 

568 exposure_time=0.0*u.s, 

569 exposure_time_requested=0.0*u.s, 

570 focus_z=0.0*u.mm, 

571 group_counter_end=1, 

572 group_counter_start=1, 

573 has_simulated_content=False, 

574 object="UNKNOWN", 

575 observation_counter=1, 

576 observation_id="CC_C_20190530_000001", 

577 observation_type="bias", 

578 observation_reason="bias", 

579 observing_day=20190530, 

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

581 physical_filter="unknown", 

582 pressure=None, 

583 relative_humidity=None, 

584 science_program="unknown", 

585 temperature=None, 

586 visit_id=3019053000001)), 

587 ("comCam-CC_C_20190526_000223_R22_S01.yaml", 

588 dict(telescope="Simonyi Survey Telescope", 

589 instrument="LSSTComCam", 

590 boresight_rotation_coord="unknown", 

591 can_see_sky=False, 

592 dark_time=0.034*u.s, 

593 detector_exposure_id=0x26b400df01, 

594 detector_group="R22", 

595 detector_name="S01", 

596 detector_num=1, 

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

598 exposure_id=3019052600223, 

599 exposure_group="3019052600223", 

600 exposure_time=0.0*u.s, 

601 exposure_time_requested=0.0*u.s, 

602 focus_z=0.0*u.mm, 

603 group_counter_end=223, 

604 group_counter_start=223, 

605 has_simulated_content=False, 

606 object="UNKNOWN", 

607 observation_counter=223, 

608 observation_id="CC_C_20190526_000223", 

609 observation_type="bias", 

610 observation_reason="dark", 

611 observing_day=20190526, 

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

613 physical_filter="unknown", 

614 pressure=None, 

615 relative_humidity=None, 

616 science_program="unknown", 

617 temperature=None, 

618 visit_id=3019052600223)), 

619 ("comCam-CC_O_20240806_000006_R22_S00.yaml", 

620 dict(telescope="Simonyi Survey Telescope", 

621 instrument="LSSTComCam", 

622 boresight_rotation_coord="unknown", 

623 can_see_sky=False, 

624 wcs_params=dict(max_sep=2.5), 

625 dark_time=0.660616*u.s, 

626 detector_exposure_id=44719670784, 

627 detector_group="R22", 

628 detector_name="S00", 

629 detector_num=0, 

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

631 exposure_id=2024080600006, 

632 exposure_group="2024-08-06T15:35:02.269", 

633 exposure_time=0.2*u.s, 

634 exposure_time_requested=0.2*u.s, 

635 focus_z=0.0*u.mm, 

636 group_counter_end=6, 

637 group_counter_start=6, 

638 has_simulated_content=True, 

639 object="UNKNOWN", 

640 observation_counter=6, 

641 observation_id="CC_O_20240806_000006", 

642 observation_type="flat", 

643 observation_reason="flat", 

644 observing_day=20240806, 

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

646 physical_filter="g_01", 

647 pressure=74060.0 * u.Pa, 

648 relative_humidity=47.400001525878906, 

649 science_program="unknown", 

650 temperature=1.3250000476837158 * u.deg_C, 

651 visit_id=3028881022690000)), 

652 ("comCam-CC_O_20241108_000266_R22_S00.yaml", 

653 dict(telescope="Simonyi Survey Telescope", 

654 instrument="LSSTComCam", 

655 boresight_rotation_coord="sky", 

656 can_see_sky=True, 

657 boresight_rotation_angle=102.79926387330579 * u.deg, 

658 wcs_params=dict(max_sep=2.5), 

659 dark_time=30.4306*u.s, 

660 detector_exposure_id=45508266496, 

661 detector_group="R22", 

662 detector_name="S00", 

663 detector_num=0, 

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

665 exposure_id=2024110800266, 

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

667 exposure_time=30.0*u.s, 

668 exposure_time_requested=30.0*u.s, 

669 focus_z=2.0585230644024572*u.mm, 

670 group_counter_end=266, 

671 group_counter_start=266, 

672 has_simulated_content=False, 

673 object="slew_icrs", 

674 observation_counter=266, 

675 observation_id="CC_O_20241108_000266", 

676 observation_type="science", 

677 observation_reason="science", 

678 observing_day=20241108, 

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

680 physical_filter="g_01", 

681 pressure=74120.0 * u.Pa, 

682 relative_humidity=22.299999237060547, 

683 science_program="PP-SURVEY", 

684 temperature=13.725000381469727 * u.deg_C, 

685 visit_id=3110636353110000)), 

686 ) 

687 for filename, expected in test_data: 

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

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

690 

691 def test_comCamSim_translator(self): 

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

693 dict(telescope="Simonyi Survey Telescope", 

694 instrument="LSSTComCamSim", 

695 boresight_rotation_coord="unknown", 

696 can_see_sky=False, 

697 dark_time=0.0*u.s, 

698 detector_group="R22", 

699 detector_name="S00", 

700 detector_num=0, 

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

702 exposure_id=5024011700000, 

703 exposure_group="5024011700000", 

704 exposure_time=0.0*u.s, 

705 focus_z=0.0 * u.mm, 

706 group_counter_end=5024011700000, 

707 group_counter_start=5024011700000, 

708 has_simulated_content=True, 

709 object="UNKNOWN", 

710 observation_counter=0, 

711 observation_id="IM_P_20240117_000000", 

712 observation_type="bias", 

713 observation_reason="calibration", 

714 observing_day=20240117, 

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

716 physical_filter="r_03", 

717 pressure=None, 

718 relative_humidity=None, 

719 science_program="calibration", 

720 temperature=None, 

721 visit_id=5024011700000, 

722 )), 

723 ("comCamSim-CC_S_20240321_000093_R22_S22.yaml", 

724 dict(telescope="Simonyi Survey Telescope", 

725 instrument="LSSTComCamSim", 

726 boresight_rotation_coord="sky", 

727 can_see_sky=True, 

728 dark_time=33.0546 * u.s, 

729 detector_group="R22", 

730 detector_name="S22", 

731 detector_num=8, 

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

733 exposure_id=2026032100093, 

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

735 exposure_time=30.0 * u.s, 

736 exposure_time_requested=30.0 * u.s, 

737 focus_z=0.0 * u.mm, 

738 group_counter_end=93, 

739 group_counter_start=93, 

740 has_simulated_content=True, 

741 object="TEST", 

742 observation_counter=93, 

743 observation_id="CC_S_20260321_000093", 

744 observation_type="science", 

745 observation_reason="object", 

746 observing_day=20260321, 

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

748 physical_filter="r_03", 

749 pressure=None, 

750 relative_humidity=None, 

751 science_program="unknown", 

752 temperature=None, 

753 visit_id=2910085149940000, 

754 )), 

755 ) 

756 for filename, expected in test_data: 

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

758 self.assertObservationInfoFromYaml( 

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

760 ) 

761 

762 def test_phoSimComCam_translator(self): 

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

764 dict(telescope="Simonyi Survey Telescope", 

765 instrument="LSSTComCam", 

766 boresight_rotation_coord="sky", 

767 can_see_sky=True, 

768 dark_time=1.0*u.s, 

769 detector_exposure_id=0x4017977100, 

770 detector_group="R22", 

771 detector_name="S00", 

772 detector_num=0, 

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

774 exposure_id=4010021706001, 

775 exposure_group="4010021706001", 

776 exposure_time=1.0*u.s, 

777 focus_z=0.0*u.mm, 

778 group_counter_end=6001, 

779 group_counter_start=6001, 

780 has_simulated_content=True, 

781 object="UNKNOWN", 

782 observation_counter=6001, 

783 observation_id="CC_H_20100217_006001", 

784 observation_type="science", 

785 observation_reason="test", 

786 observing_day=20100217, 

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

788 physical_filter="g_01", 

789 pressure=None, 

790 relative_humidity=None, 

791 science_program="9006001", 

792 temperature=None, 

793 visit_id=4010021706001)), 

794 ) 

795 for filename, expected in test_data: 

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

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

798 check_wcs=False, **expected) 

799 

800 def test_phosim_translator(self): 

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

802 dict(telescope="Simonyi Survey Telescope", 

803 instrument="LSSTCam-PhoSim", 

804 boresight_rotation_coord="sky", 

805 can_see_sky=True, 

806 dark_time=30.0*u.s, 

807 detector_exposure_id=204595038, 

808 detector_group="R11", 

809 detector_name="S02", 

810 detector_num=38, 

811 detector_serial="R11_S02", 

812 exposure_id=204595, 

813 exposure_group="204595", 

814 exposure_time=30.0*u.s, 

815 focus_z=0.0*u.mm, 

816 group_counter_end=204595, 

817 group_counter_start=204595, 

818 has_simulated_content=True, 

819 object="UNKNOWN", 

820 observation_counter=0, 

821 observation_id="204595", 

822 observation_type="science", 

823 observation_reason="phosim", 

824 observing_day=20221005, 

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

826 physical_filter="i", 

827 pressure=520.0*cds.mmHg, 

828 relative_humidity=40.0, 

829 science_program="204595", 

830 temperature=20.0*u.deg_C, 

831 visit_id=204595, 

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

833 ) 

834 for filename, expected in test_data: 

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

836 with warnings.catch_warnings(): 

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

838 warnings.simplefilter("ignore", VerifyWarning) 

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

840 

841 def test_latiss_translator(self): 

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

843 dict(telescope="Rubin Auxiliary Telescope", 

844 instrument="LATISS", 

845 boresight_rotation_coord="unknown", 

846 can_see_sky=None, 

847 dark_time=27.0*u.s, 

848 detector_exposure_id=0x2638004100, 

849 detector_group="RXX", 

850 detector_name="S00", 

851 detector_num=0, 

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

853 exposure_id=3018092000065, 

854 exposure_group="3018092000065", 

855 exposure_time=27.0*u.s, 

856 exposure_time_requested=27.0*u.s, 

857 focus_z=0.0*u.mm, 

858 group_counter_end=65, 

859 group_counter_start=65, 

860 has_simulated_content=False, 

861 object="UNKNOWN", 

862 observation_counter=65, 

863 observation_id="AT_C_20180920_000065", 

864 observation_type="unknown", 

865 observation_reason="unknown", 

866 observing_day=20180920, 

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

868 physical_filter="unknown~unknown", 

869 pressure=None, 

870 relative_humidity=None, 

871 science_program="unknown", 

872 temperature=None, 

873 visit_id=3018092000065, 

874 )), 

875 ("latiss-AT_O_20190306_000014.yaml", 

876 dict(telescope="Rubin Auxiliary Telescope", 

877 instrument="LATISS", 

878 boresight_rotation_coord="unknown", 

879 can_see_sky=None, 

880 dark_time=1.06*u.s, 

881 detector_exposure_id=0x68b800e00, 

882 detector_group="RXX", 

883 detector_name="S00", 

884 detector_num=0, 

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

886 exposure_id=2019030600014, 

887 exposure_group="2019030600014", 

888 exposure_time=1.06*u.s, 

889 exposure_time_requested=1.06*u.s, 

890 focus_z=0.0*u.mm, 

891 group_counter_end=14, 

892 group_counter_start=14, 

893 has_simulated_content=False, 

894 object="UNKNOWN", 

895 observation_counter=14, 

896 observation_id="AT_O_20190306_000014", 

897 observation_type="unknown", 

898 observation_reason="unknown", 

899 observing_day=20190306, 

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

901 physical_filter="unknown~unknown", 

902 pressure=None, 

903 relative_humidity=None, 

904 science_program="unknown", 

905 temperature=None, 

906 visit_id=2019030600014, 

907 )), 

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

909 dict(telescope="Rubin Auxiliary Telescope", 

910 instrument="LATISS", 

911 boresight_rotation_coord="unknown", 

912 can_see_sky=False, 

913 dark_time=0.0*u.s, 

914 detector_exposure_id=0x697001600, 

915 detector_group="RXX", 

916 detector_name="S00", 

917 detector_num=0, 

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

919 exposure_id=2019032900022, 

920 exposure_group="2019032900022", 

921 exposure_time=0.0*u.s, 

922 exposure_time_requested=0.0*u.s, 

923 focus_z=0.0*u.mm, 

924 group_counter_end=22, 

925 group_counter_start=22, 

926 has_simulated_content=False, 

927 object="UNKNOWN", 

928 observation_counter=22, 

929 observation_id="AT_O_20190329_000022", 

930 observation_type="bias", 

931 observation_reason="unknown", 

932 observing_day=20190329, 

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

934 physical_filter="unknown~unknown", 

935 pressure=None, 

936 relative_humidity=None, 

937 science_program="unknown", 

938 temperature=None, 

939 visit_id=2019032900022, 

940 )), 

941 ("latiss-future.yaml", 

942 dict(telescope="Rubin Auxiliary Telescope", 

943 instrument="LATISS", 

944 boresight_rotation_coord="unknown", 

945 can_see_sky=False, 

946 dark_time=0.0*u.s, 

947 detector_exposure_id=0x74e001600, 

948 detector_group="RXX", 

949 detector_name="S00", 

950 detector_num=0, 

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

952 exposure_id=2020032900022, 

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

954 exposure_time=0.0*u.s, 

955 exposure_time_requested=0.0*u.s, 

956 focus_z=0.0*u.mm, 

957 group_counter_end=22, 

958 group_counter_start=22, 

959 has_simulated_content=False, 

960 object="UNKNOWN", 

961 observation_counter=22, 

962 observation_id="AT_X_20200329_000022", 

963 observation_type="bias", 

964 observation_reason="unknown", 

965 observing_day=20200329, 

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

967 physical_filter="unknown~unknown", 

968 pressure=None, 

969 relative_humidity=None, 

970 science_program="unknown", 

971 temperature=None, 

972 visit_id=1654305000120024, 

973 )), 

974 ("latiss-AT_O_20190915_000037.yaml", 

975 dict(telescope="Rubin Auxiliary Telescope", 

976 instrument="LATISS", 

977 boresight_rotation_coord="unknown", 

978 can_see_sky=False, 

979 dark_time=0.0*u.s, 

980 detector_exposure_id=0x6ec002500, 

981 detector_group="RXX", 

982 detector_name="S00", 

983 detector_num=0, 

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

985 exposure_id=2019091500037, 

986 exposure_group="bias_0027_0100", 

987 exposure_time=0.0*u.s, 

988 exposure_time_requested=0.0*u.s, 

989 focus_z=0.0*u.mm, 

990 group_counter_end=37, 

991 group_counter_start=37, 

992 has_simulated_content=False, 

993 object="UNKNOWN", 

994 observation_counter=37, 

995 observation_id="AT_O_20190915_000037", 

996 observation_type="bias", 

997 observation_reason="unknown", 

998 observing_day=20190915, 

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

1000 physical_filter="unknown~unknown", 

1001 pressure=None, 

1002 relative_humidity=None, 

1003 science_program="unknown", 

1004 temperature=None, 

1005 visit_id=3575576933793566714, 

1006 )), 

1007 ("latiss-AT_O_20191031_000004.yaml", 

1008 dict(telescope="Rubin Auxiliary Telescope", 

1009 instrument="LATISS", 

1010 boresight_rotation_coord="unknown", 

1011 can_see_sky=None, 

1012 dark_time=3.0*u.s, 

1013 detector_exposure_id=0x703000400, 

1014 detector_group="RXX", 

1015 detector_name="S00", 

1016 detector_num=0, 

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

1018 exposure_id=2019103100004, 

1019 exposure_group="TEST01", 

1020 exposure_time=3.0*u.s, 

1021 exposure_time_requested=3.0*u.s, 

1022 focus_z=0.0*u.mm, 

1023 group_counter_end=4, 

1024 group_counter_start=4, 

1025 has_simulated_content=False, 

1026 object="UNKNOWN", 

1027 observation_counter=4, 

1028 observation_id="AT_O_20191031_000004", 

1029 observation_type="engtest", 

1030 observation_reason="unknown", 

1031 observing_day=20191031, 

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

1033 physical_filter="unknown~unknown", 

1034 pressure=None, 

1035 relative_humidity=None, 

1036 science_program="unknown", 

1037 temperature=None, 

1038 visit_id=1123819875881954006, 

1039 )), 

1040 ("latiss-AT_O_20191104_000003.yaml", 

1041 dict(telescope="Rubin Auxiliary Telescope", 

1042 instrument="LATISS", 

1043 boresight_rotation_coord="unknown", 

1044 can_see_sky=None, 

1045 dark_time=3.0*u.s, 

1046 detector_exposure_id=0x705000300, 

1047 detector_group="RXX", 

1048 detector_name="S00", 

1049 detector_num=0, 

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

1051 exposure_id=2019110400003, 

1052 exposure_group="TEST01", 

1053 exposure_time=3.0*u.s, 

1054 exposure_time_requested=3.0*u.s, 

1055 focus_z=0.0*u.mm, 

1056 group_counter_end=3, 

1057 group_counter_start=3, 

1058 has_simulated_content=False, 

1059 object="UNKNOWN", 

1060 observation_counter=3, 

1061 observation_id="AT_O_20191104_000003", 

1062 observation_type="engtest", 

1063 observation_reason="unknown", 

1064 observing_day=20191104, 

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

1066 physical_filter="unknown~unknown", 

1067 pressure=None, 

1068 relative_humidity=None, 

1069 science_program="unknown", 

1070 temperature=None, 

1071 visit_id=1123819875881954006, 

1072 )), 

1073 ("latiss-AT_O_20191113_000061.yaml", 

1074 dict(telescope="Rubin Auxiliary Telescope", 

1075 instrument="LATISS", 

1076 boresight_rotation_coord="unknown", 

1077 can_see_sky=None, 

1078 dark_time=0.5*u.s, 

1079 detector_exposure_id=0x709803d00, 

1080 detector_group="RXX", 

1081 detector_name="S00", 

1082 detector_num=0, 

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

1084 exposure_id=2019111300061, 

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

1086 exposure_time=0.5*u.s, 

1087 exposure_time_requested=0.5*u.s, 

1088 focus_z=0.0*u.mm, 

1089 group_counter_end=61, 

1090 group_counter_start=61, 

1091 has_simulated_content=False, 

1092 object="UNKNOWN", 

1093 observation_counter=61, 

1094 observation_id="AT_O_20191113_000061", 

1095 observation_type="engtest", 

1096 observation_reason="unknown", 

1097 observing_day=20191113, 

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

1099 physical_filter="empty~ronchi90lpmm", 

1100 pressure=None, 

1101 relative_humidity=None, 

1102 science_program="unknown", 

1103 temperature=None, 

1104 visit_id=1892608703001301325, 

1105 )), 

1106 ("latiss-AT_O_20191118_000011.yaml", 

1107 dict(telescope="Rubin Auxiliary Telescope", 

1108 instrument="LATISS", 

1109 boresight_rotation_coord="unknown", 

1110 can_see_sky=False, 

1111 dark_time=15.0*u.s, 

1112 detector_exposure_id=0x70c000b00, 

1113 detector_group="RXX", 

1114 detector_name="S00", 

1115 detector_num=0, 

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

1117 exposure_id=2019111800011, 

1118 exposure_group="dark_0002_0005", 

1119 exposure_time=15.0*u.s, 

1120 exposure_time_requested=15.0*u.s, 

1121 focus_z=0.0*u.mm, 

1122 group_counter_end=11, 

1123 group_counter_start=11, 

1124 has_simulated_content=False, 

1125 object="UNKNOWN", 

1126 observation_counter=11, 

1127 observation_id="AT_O_20191118_000011", 

1128 observation_type="dark", 

1129 observation_reason="unknown", 

1130 observing_day=20191118, 

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

1132 physical_filter="diffuser~ronchi170lpmm", 

1133 pressure=None, 

1134 relative_humidity=None, 

1135 science_program="unknown", 

1136 temperature=None, 

1137 visit_id=6861884254113212214, 

1138 )), 

1139 ("latiss-AT_O_20200121_000045.yaml", 

1140 dict(telescope="Rubin Auxiliary Telescope", 

1141 instrument="LATISS", 

1142 boresight_rotation_coord="sky", 

1143 can_see_sky=None, 

1144 dark_time=100.0*u.s, 

1145 detector_exposure_id=0x72c002d00, 

1146 detector_group="RXX", 

1147 detector_name="S00", 

1148 detector_num=0, 

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

1150 exposure_id=2020012100045, 

1151 exposure_group="test", 

1152 exposure_time=100.0*u.s, 

1153 exposure_time_requested=100.0*u.s, 

1154 focus_z=0.560002659202*u.mm, 

1155 group_counter_end=45, 

1156 group_counter_start=45, 

1157 has_simulated_content=False, 

1158 object="UNKNOWN", 

1159 observation_counter=45, 

1160 observation_id="AT_O_20200121_000045", 

1161 observation_type="engtest", 

1162 observation_reason="unknown", 

1163 observing_day=20200121, 

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

1165 physical_filter="blank_bk7_wg05~empty", 

1166 pressure=None, 

1167 relative_humidity=None, 

1168 science_program="unknown", 

1169 temperature=None, 

1170 visit_id=4702443654717948604, 

1171 check_altaz=True, 

1172 )), 

1173 ("latiss-AT_O_20200128_000379.yaml", 

1174 dict(telescope="Rubin Auxiliary Telescope", 

1175 instrument="LATISS", 

1176 boresight_rotation_coord="sky", 

1177 can_see_sky=True, 

1178 dark_time=5.0*u.s, 

1179 detector_exposure_id=0x72f817b00, 

1180 detector_group="RXX", 

1181 detector_name="S00", 

1182 detector_num=0, 

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

1184 exposure_id=2020012800379, 

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

1186 exposure_time=5.0*u.s, 

1187 exposure_time_requested=5.0*u.s, 

1188 focus_z=0.35416568455*u.mm, 

1189 group_counter_end=379, 

1190 group_counter_start=379, 

1191 has_simulated_content=False, 

1192 object="HD107696", 

1193 observation_counter=379, 

1194 observation_id="AT_O_20200128_000379", 

1195 observation_type="science", 

1196 observation_reason="science", 

1197 observing_day=20200128, 

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

1199 physical_filter="KPNO_406_828nm~empty", 

1200 pressure=None, 

1201 relative_humidity=None, 

1202 science_program="unknown", 

1203 temperature=None, 

1204 visit_id=1602123521660000, 

1205 # We have some timing discrepancies in the headers 

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

1207 # the recorded AZ/EL/TIME. 

1208 wcs_params=dict(max_sep=7.), 

1209 )), 

1210 ("latiss-AT_O_20220405_000348.yaml", 

1211 dict(telescope="Rubin Auxiliary Telescope", 

1212 instrument="LATISS", 

1213 boresight_rotation_coord="sky", 

1214 can_see_sky=True, 

1215 dark_time=30.3176279067993*u.s, 

1216 detector_exposure_id=0x8be815c00, 

1217 detector_group="RXX", 

1218 detector_name="S00", 

1219 detector_num=0, 

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

1221 exposure_id=2022040500348, 

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

1223 exposure_time=30.0*u.s, 

1224 exposure_time_requested=30.0*u.s, 

1225 focus_z=0.0697081759572029*u.mm, 

1226 group_counter_end=349, 

1227 group_counter_start=348, 

1228 has_simulated_content=False, 

1229 object="LATISS_E6A_00000040", 

1230 observation_counter=348, 

1231 observation_id="AT_O_20220405_000348", 

1232 observation_type="science", 

1233 observation_reason="object", 

1234 observing_day=20220405, 

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

1236 physical_filter="SDSSr~empty", 

1237 pressure=744.3*u.hPa, 

1238 relative_humidity=19.0, 

1239 science_program="LATISS_E6A", 

1240 temperature=12.3*u.deg_C, 

1241 visit_id=2291434871810000, 

1242 # We have some timing discrepancies in the headers 

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

1244 # the recorded AZ/EL/TIME. 

1245 wcs_params=dict(max_sep=7.), 

1246 )), 

1247 ("latiss-AT_O_20220405_000349.yaml", 

1248 dict(telescope="Rubin Auxiliary Telescope", 

1249 instrument="LATISS", 

1250 boresight_rotation_coord="sky", 

1251 can_see_sky=True, 

1252 dark_time=30.2387452125549*u.s, 

1253 detector_exposure_id=0x8be815d00, 

1254 detector_group="RXX", 

1255 detector_name="S00", 

1256 detector_num=0, 

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

1258 exposure_id=2022040500349, 

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

1260 exposure_time=30.0*u.s, 

1261 exposure_time_requested=30.0*u.s, 

1262 focus_z=0.0697081759572029*u.mm, 

1263 group_counter_end=349, 

1264 group_counter_start=348, 

1265 has_simulated_content=False, 

1266 object="LATISS_E6A_00000040", 

1267 observation_counter=349, 

1268 observation_id="AT_O_20220405_000349", 

1269 observation_type="science", 

1270 observation_reason="object", 

1271 observing_day=20220405, 

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

1273 physical_filter="SDSSr~empty", 

1274 pressure=744.3*u.hPa, 

1275 relative_humidity=19.0, 

1276 science_program="LATISS_E6A", 

1277 temperature=12.3*u.deg_C, 

1278 visit_id=2291434871810000, 

1279 # We have some timing discrepancies in the headers 

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

1281 # the recorded AZ/EL/TIME. 

1282 wcs_params=dict(max_sep=7.), 

1283 )), 

1284 ("latiss-AT_C_20220426_000004_R00_S00.yaml", 

1285 dict(telescope="Rubin Auxiliary Telescope", 

1286 instrument="LATISS", 

1287 boresight_rotation_coord="unknown", 

1288 can_see_sky=None, 

1289 dark_time=537.406*u.s, 

1290 detector_exposure_id=0x28c9000400, 

1291 detector_group="RXX", 

1292 detector_name="S00", 

1293 detector_num=0, 

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

1295 exposure_id=3022042600004, 

1296 exposure_group="3022042600004", 

1297 exposure_time=-1.0*u.s, 

1298 exposure_time_requested=-1.0*u.s, 

1299 focus_z=0.0*u.mm, 

1300 group_counter_end=4, 

1301 group_counter_start=4, 

1302 has_simulated_content=False, 

1303 object="UNKNOWN", 

1304 observation_counter=4, 

1305 observation_id="AT_C_20220426_000004", 

1306 observation_type="unknown", 

1307 observation_reason="unknown", 

1308 observing_day=20220426, 

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

1310 physical_filter="unknown~unknown", 

1311 pressure=None, 

1312 relative_humidity=None, 

1313 science_program="unknown", 

1314 temperature=None, 

1315 visit_id=3022042600004, 

1316 )), 

1317 ("latiss-AT_O_20230321_000053.yaml", 

1318 dict(telescope="Rubin Auxiliary Telescope", 

1319 instrument="LATISS", 

1320 boresight_rotation_coord="unknown", 

1321 can_see_sky=False, 

1322 dark_time=30.0126*u.s, 

1323 detector_exposure_id=0x96d803500, 

1324 detector_group="RXX", 

1325 detector_name="S00", 

1326 detector_num=0, 

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

1328 exposure_id=2023032100053, 

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

1330 exposure_time=30.0*u.s, 

1331 exposure_time_requested=30.0*u.s, 

1332 focus_z=0.0*u.mm, 

1333 group_counter_end=53, 

1334 group_counter_start=53, 

1335 has_simulated_content=False, 

1336 object="slew_icrs", 

1337 observation_counter=53, 

1338 observation_id="AT_O_20230321_000053", 

1339 observation_type="dark", 

1340 observation_reason="dark", 

1341 observing_day=20230321, 

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

1343 physical_filter="empty~empty", 

1344 pressure=None, 

1345 relative_humidity=None, 

1346 science_program="unknown", 

1347 temperature=None, 

1348 visit_id=2593446676330000, 

1349 check_altaz=True, 

1350 )), 

1351 ("latiss-AT_O_20230705_000379_R00_S00.json", 

1352 dict(telescope="Rubin Auxiliary Telescope", 

1353 instrument="LATISS", 

1354 boresight_rotation_coord="sky", 

1355 can_see_sky=True, 

1356 dark_time=30.2418*u.s, 

1357 detector_exposure_id=0x9a2817b00, 

1358 detector_group="RXX", 

1359 detector_name="S00", 

1360 detector_num=0, 

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

1362 exposure_id=2023070500379, 

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

1364 exposure_time=30.0*u.s, 

1365 exposure_time_requested=30.0*u.s, 

1366 focus_z=-0.008921561762690544*u.mm, 

1367 group_counter_end=379, 

1368 group_counter_start=379, 

1369 has_simulated_content=False, 

1370 object="HD165763", 

1371 observation_counter=379, 

1372 observation_id="AT_O_20230705_000379", 

1373 observation_type="science", 

1374 observation_reason="sitcom-857", 

1375 observing_day=20230705, 

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

1377 physical_filter="empty~holo4_003", 

1378 pressure=777.80*u.hPa, 

1379 relative_humidity=15.149999618530273, 

1380 science_program="BLOCK-59", 

1381 temperature=5.775000095367432*u.deg_C, 

1382 visit_id=2685487956090000, 

1383 check_altaz=True, 

1384 )), 

1385 ("latiss-AT_O_20240624_000106_R00_S00.yaml", 

1386 dict(telescope="Rubin Auxiliary Telescope", 

1387 instrument="LATISS", 

1388 boresight_rotation_coord="sky", 

1389 can_see_sky=True, 

1390 dark_time=30.2407*u.s, 

1391 detector_exposure_id=44358986240, 

1392 detector_group="RXX", 

1393 detector_name="S00", 

1394 detector_num=0, 

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

1396 exposure_id=2024062400106, 

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

1398 exposure_time=30.0*u.s, 

1399 exposure_time_requested=30.0*u.s, 

1400 focus_z=0.742219865322113*u.mm, 

1401 group_counter_end=106, 

1402 group_counter_start=106, 

1403 has_simulated_content=False, 

1404 object="HD 131586", 

1405 observation_counter=106, 

1406 observation_id="AT_O_20240624_000106", 

1407 observation_type="cwfs", 

1408 observation_reason="intra", 

1409 observing_day=20240624, 

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

1411 physical_filter="SDSSr_65mm~empty", 

1412 pressure=73880*u.Pa, 

1413 relative_humidity=40.650001525878906, 

1414 science_program="cwfs", 

1415 temperature=1.5750000476837158*u.deg_C, 

1416 visit_id=2992083918950001, 

1417 check_altaz=True, 

1418 )), 

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

1420 dict(telescope="Rubin Auxiliary Telescope", 

1421 instrument="LATISS", 

1422 boresight_rotation_coord="sky", 

1423 can_see_sky=False, 

1424 dark_time=30.2407*u.s, 

1425 detector_exposure_id=44358986240, 

1426 detector_group="RXX", 

1427 detector_name="S00", 

1428 detector_num=0, 

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

1430 exposure_id=2024062400106, 

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

1432 exposure_time=30.0*u.s, 

1433 exposure_time_requested=30.0*u.s, 

1434 focus_z=0.742219865322113*u.mm, 

1435 group_counter_end=106, 

1436 group_counter_start=106, 

1437 has_simulated_content=False, 

1438 object="HD 131586", 

1439 observation_counter=106, 

1440 observation_id="AT_O_20240624_000106", 

1441 observation_type="science", 

1442 observation_reason="intra", 

1443 observing_day=20240624, 

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

1445 physical_filter="SDSSr_65mm~empty", 

1446 pressure=73880*u.Pa, 

1447 relative_humidity=40.650001525878906, 

1448 science_program="cwfs", 

1449 temperature=1.5750000476837158*u.deg_C, 

1450 visit_id=2992083918950001, 

1451 check_altaz=True, 

1452 )), 

1453 ("latiss-AT_O_20240624_000169_R00_S00.yaml", 

1454 dict(telescope="Rubin Auxiliary Telescope", 

1455 instrument="LATISS", 

1456 boresight_rotation_coord="unknown", 

1457 can_see_sky=False, 

1458 dark_time=30.0096*u.s, 

1459 detector_exposure_id=44359002368, 

1460 detector_group="RXX", 

1461 detector_name="S00", 

1462 detector_num=0, 

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

1464 exposure_id=2024062400169, 

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

1466 exposure_time=30.0*u.s, 

1467 exposure_time_requested=30.0*u.s, 

1468 focus_z=0.0*u.mm, 

1469 group_counter_end=169, 

1470 group_counter_start=169, 

1471 has_simulated_content=False, 

1472 object="FlatField position", 

1473 observation_counter=169, 

1474 observation_id="AT_O_20240624_000169", 

1475 observation_type="dark", 

1476 observation_reason="dark", 

1477 observing_day=20240624, 

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

1479 physical_filter="SDSSr_65mm~empty", 

1480 pressure=73760*u.Pa, 

1481 relative_humidity=44.42499923706055, 

1482 science_program="unknown", 

1483 temperature=0.02500000037252903*u.deg_C, 

1484 visit_id=2992290402970000, 

1485 check_altaz=True, 

1486 )), 

1487 ) 

1488 with warnings.catch_warnings(): 

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

1490 warnings.simplefilter("ignore", VerifyWarning) 

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

1492 for filename, expected in test_data: 

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

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

1495 

1496 # This translation should fail 

1497 with self.assertRaises(KeyError): 

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

1499 

1500 def test_imsim_translator(self): 

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

1502 dict(telescope="Simonyi Survey Telescope", 

1503 instrument="LSSTCam-imSim", 

1504 boresight_rotation_coord="sky", 

1505 can_see_sky=True, 

1506 dark_time=0.0*u.s, 

1507 detector_exposure_id=3010002036, 

1508 detector_group="R11", 

1509 detector_name="S00", 

1510 detector_num=36, 

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

1512 exposure_id=3010002, 

1513 exposure_group="3010002", 

1514 exposure_time=0.0*u.s, 

1515 focus_z=0.0*u.mm, 

1516 group_counter_end=3010002, 

1517 group_counter_start=3010002, 

1518 has_simulated_content=True, 

1519 object="UNKNOWN", 

1520 observation_counter=0, 

1521 observation_id="3010002", 

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

1523 observation_reason="imsim", 

1524 observing_day=20220101, 

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

1526 physical_filter="i", 

1527 pressure=None, 

1528 relative_humidity=40.0, 

1529 science_program="42", 

1530 temperature=None, 

1531 visit_id=3010002, 

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

1533 )), 

1534 ("imsim-lsst_a_204595_R11_S02_i.yaml", 

1535 dict(telescope="Simonyi Survey Telescope", 

1536 instrument="LSSTCam-imSim", 

1537 boresight_rotation_coord="sky", 

1538 can_see_sky=True, 

1539 dark_time=30.0*u.s, 

1540 detector_exposure_id=204595038, 

1541 detector_group="R11", 

1542 detector_name="S02", 

1543 detector_num=38, 

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

1545 exposure_id=204595, 

1546 exposure_group="204595", 

1547 exposure_time=30.0*u.s, 

1548 exposure_time_requested=30.0*u.s, 

1549 focus_z=0.0*u.mm, 

1550 group_counter_end=204595, 

1551 group_counter_start=204595, 

1552 has_simulated_content=True, 

1553 object="UNKNOWN", 

1554 observation_counter=0, 

1555 observation_id="204595", 

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

1557 observation_reason="imsim", 

1558 observing_day=20221005, 

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

1560 physical_filter="i_sim_1.4", 

1561 pressure=None, 

1562 relative_humidity=40.0, 

1563 science_program="204595", 

1564 temperature=None, 

1565 visit_id=204595, 

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

1567 )), 

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

1569 dict(telescope="Simonyi Survey Telescope", 

1570 instrument="LSSTCam-imSim", 

1571 boresight_rotation_coord="sky", 

1572 can_see_sky=False, 

1573 dark_time=30.0*u.s, 

1574 detector_exposure_id=5000007042, 

1575 detector_group="R11", 

1576 detector_name="S20", 

1577 detector_num=42, 

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

1579 exposure_id=5000007, 

1580 exposure_group="5000007", 

1581 exposure_time=30.0*u.s, 

1582 focus_z=0.0*u.mm, 

1583 group_counter_end=5000007, 

1584 group_counter_start=5000007, 

1585 has_simulated_content=True, 

1586 object="UNKNOWN", 

1587 observation_counter=0, 

1588 observation_id="5000007", 

1589 observation_type="flat", 

1590 observation_reason="imsim", 

1591 observing_day=20220806, 

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

1593 physical_filter="i", 

1594 pressure=None, 

1595 relative_humidity=40.0, 

1596 science_program="5000007", 

1597 temperature=None, 

1598 visit_id=5000007, 

1599 )), 

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

1601 dict(telescope="Simonyi Survey Telescope", 

1602 instrument="LSSTCam-imSim", 

1603 boresight_rotation_coord="sky", 

1604 can_see_sky=True, 

1605 dark_time=500.0*u.s, 

1606 detector_exposure_id=4010003040, 

1607 detector_group="R11", 

1608 detector_name="S11", 

1609 detector_num=40, 

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

1611 exposure_id=4010003, 

1612 exposure_group="4010003", 

1613 exposure_time=500.0*u.s, 

1614 focus_z=0.0*u.mm, 

1615 group_counter_end=4010003, 

1616 group_counter_start=4010003, 

1617 has_simulated_content=True, 

1618 object="UNKNOWN", 

1619 observation_counter=0, 

1620 observation_id="4010003", 

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

1622 observation_reason="imsim", 

1623 observing_day=20220101, 

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

1625 physical_filter="i", 

1626 pressure=None, 

1627 relative_humidity=40.0, 

1628 science_program="42", 

1629 temperature=None, 

1630 visit_id=4010003, 

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

1632 )), 

1633 ) 

1634 for filename, expected in test_data: 

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

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

1637 

1638 def test_ts3_translator(self): 

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

1640 dict(telescope=None, 

1641 instrument="LSST-TS3", 

1642 can_see_sky=False, 

1643 dark_time=44.631*u.s, 

1644 detector_exposure_id=201811151255111433, 

1645 detector_group="R433", 

1646 detector_name="S00", 

1647 detector_num=433, 

1648 detector_serial="E2V-CCD250-411", 

1649 exposure_id=201811151255111, 

1650 exposure_group="201811151255111", 

1651 exposure_time=44.631*u.s, 

1652 exposure_time_requested=44.631*u.s, 

1653 focus_z=0.0*u.mm, 

1654 group_counter_end=25, 

1655 group_counter_start=25, 

1656 has_simulated_content=False, 

1657 observation_counter=25, 

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

1659 observation_type="flat", 

1660 observation_reason="lambda", 

1661 observing_day=20181115, 

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

1663 physical_filter="550CutOn", 

1664 science_program="2018-11-15", 

1665 visit_id=201811151255111)), 

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

1667 dict(telescope=None, 

1668 instrument="LSST-TS3", 

1669 can_see_sky=False, 

1670 dark_time=30.611*u.s, 

1671 detector_exposure_id=201607220607067071, 

1672 detector_group="R071", 

1673 detector_name="S00", 

1674 detector_num=71, 

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

1676 exposure_id=201607220607067, 

1677 exposure_group="201607220607067", 

1678 exposure_time=30.611*u.s, 

1679 focus_z=0.0*u.mm, 

1680 group_counter_end=67, 

1681 group_counter_start=67, 

1682 has_simulated_content=False, 

1683 observation_counter=67, 

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

1685 observation_type="flat", 

1686 observation_reason="lambda", 

1687 observing_day=20160721, 

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

1689 physical_filter="550CutOn", 

1690 science_program="2016-07-22", 

1691 visit_id=201607220607067)), 

1692 ) 

1693 for filename, expected in test_data: 

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

1695 with warnings.catch_warnings(): 

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

1697 warnings.simplefilter("ignore", VerifyWarning) 

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

1699 

1700 def test_ts8_translator(self): 

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

1702 dict(telescope=None, 

1703 instrument="LSST-TS8", 

1704 can_see_sky=False, 

1705 dark_time=0.0*u.s, 

1706 detector_exposure_id=201807241041568067, 

1707 detector_group="RTM-010", 

1708 detector_name="S11", 

1709 detector_num=67, 

1710 detector_serial="E2V-CCD250-179", 

1711 exposure_id=201807241041568, 

1712 exposure_group="201807241041568", 

1713 exposure_time=0.0*u.s, 

1714 focus_z=0.0*u.mm, 

1715 group_counter_end=24, 

1716 group_counter_start=24, 

1717 has_simulated_content=False, 

1718 observation_counter=24, 

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

1720 observation_type="bias", 

1721 observation_reason="lambda", 

1722 observing_day=20180724, 

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

1724 physical_filter="y", 

1725 science_program="6006D", 

1726 visit_id=201807241041568)), 

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

1728 dict(telescope=None, 

1729 instrument="LSST-TS8", 

1730 can_see_sky=False, 

1731 dark_time=21.913*u.s, 

1732 detector_exposure_id=201807241028453065, 

1733 detector_group="RTM-010", 

1734 detector_name="S02", 

1735 detector_num=65, 

1736 detector_serial="E2V-CCD250-200", 

1737 exposure_id=201807241028453, 

1738 exposure_group="201807241028453", 

1739 exposure_time=21.913*u.s, 

1740 focus_z=0.0*u.mm, 

1741 group_counter_end=17, 

1742 group_counter_start=17, 

1743 has_simulated_content=False, 

1744 observation_counter=17, 

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

1746 observation_type="flat", 

1747 observation_reason="lambda", 

1748 observing_day=20180724, 

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

1750 physical_filter="z", 

1751 science_program="6006D", 

1752 visit_id=201807241028453)), 

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

1754 dict(telescope=None, 

1755 instrument="LSST-TS8", 

1756 can_see_sky=False, 

1757 dark_time=300.0*u.s, 

1758 detector_exposure_id=201712151140062027, 

1759 detector_group="RTM-005", 

1760 detector_name="S00", 

1761 detector_num=27, 

1762 detector_serial="E2V-CCD250-220", 

1763 exposure_id=201712151140062, 

1764 exposure_group="201712151140062", 

1765 exposure_time=300.0*u.s, 

1766 exposure_time_requested=300.0*u.s, 

1767 focus_z=0.0*u.mm, 

1768 group_counter_end=94, 

1769 group_counter_start=94, 

1770 has_simulated_content=False, 

1771 observation_counter=94, 

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

1773 observation_type="fe55", 

1774 observation_reason="fe55", 

1775 observing_day=20171215, 

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

1777 physical_filter="i", 

1778 science_program="6288", 

1779 visit_id=201712151140062)), 

1780 ("ts8-TS_C_20220711_000174_R22_S00.yaml", 

1781 dict(telescope=None, 

1782 instrument="LSST-TS8", 

1783 can_see_sky=False, 

1784 dark_time=210.315*u.s, 

1785 detector_exposure_id=202207111714459018, 

1786 detector_group="RTM-004", 

1787 detector_name="S00", 

1788 detector_num=18, 

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

1790 exposure_id=202207111714459, 

1791 exposure_group="202207111714459", 

1792 exposure_time=210.0*u.s, 

1793 focus_z=0.0*u.mm, 

1794 group_counter_end=174, 

1795 group_counter_start=174, 

1796 has_simulated_content=False, 

1797 observation_counter=174, 

1798 observation_id="TS_C_20220711_000174", 

1799 observation_type="spot", 

1800 observation_reason="spot_flat", 

1801 observing_day=20220711, 

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

1803 physical_filter="unknown", 

1804 science_program="7074D", 

1805 visit_id=202207111714459)), 

1806 ("ts8-TS_C_20230512_000021_R22_S02.yaml", 

1807 dict(telescope=None, 

1808 instrument="LSST-TS8", 

1809 can_see_sky=False, 

1810 dark_time=15.165*u.s, 

1811 detector_exposure_id=202305121917591020, 

1812 detector_group="RTM-004", 

1813 detector_name="S02", 

1814 detector_num=20, 

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

1816 exposure_id=202305121917591, 

1817 exposure_group="202305121917591", 

1818 exposure_time=15.0*u.s, 

1819 focus_z=0.0*u.mm, 

1820 group_counter_end=21, 

1821 group_counter_start=21, 

1822 has_simulated_content=False, 

1823 observation_counter=21, 

1824 observation_id="TS_C_20230512_000021", 

1825 observation_type="flat", 

1826 observation_reason="sflat_hi", 

1827 observing_day=20230512, 

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

1829 physical_filter="HIGH", 

1830 science_program="7187D", 

1831 visit_id=202305121917591)), 

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

1833 dict(telescope=None, 

1834 instrument="LSST-TS8", 

1835 can_see_sky=False, 

1836 dark_time=15.165*u.s, 

1837 detector_exposure_id=202305121917591020, 

1838 detector_group="RTM-004", 

1839 detector_name="S02", 

1840 detector_num=20, 

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

1842 exposure_id=202305121917591, 

1843 exposure_group="202305121917591", 

1844 exposure_time=15.0*u.s, 

1845 focus_z=0.0*u.mm, 

1846 group_counter_end=21, 

1847 group_counter_start=21, 

1848 has_simulated_content=False, 

1849 observation_counter=21, 

1850 observation_id="TS_C_20230512_000021", 

1851 observation_type="flat", 

1852 observation_reason="sflat_hi", 

1853 observing_day=20230512, 

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

1855 physical_filter="HIGH", 

1856 science_program="7187D", 

1857 visit_id=202305121917591)), 

1858 ("ts8-TS_C_20230523_000127_R22_S00.yaml", 

1859 dict(telescope=None, 

1860 instrument="LSST-TS8", 

1861 can_see_sky=False, 

1862 dark_time=15.16*u.s, 

1863 detector_exposure_id=202305231936194018, 

1864 detector_group="RTM-004", 

1865 detector_name="S00", 

1866 detector_num=18, 

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

1868 exposure_id=202305231936194, 

1869 exposure_group="202305231936194", 

1870 exposure_time=15.0*u.s, 

1871 focus_z=0.0*u.mm, 

1872 group_counter_end=127, 

1873 group_counter_start=127, 

1874 has_simulated_content=False, 

1875 observation_counter=127, 

1876 observation_id="TS_C_20230523_000127", 

1877 observation_type="flat", 

1878 observation_reason="flat", 

1879 observing_day=20230523, 

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

1881 physical_filter="unknown", 

1882 science_program="7220D", 

1883 visit_id=202305231936194)), 

1884 ("ts8-TS_C_20230525_000041_R22_S00.yaml", 

1885 dict(telescope=None, 

1886 instrument="LSST-TS8", 

1887 can_see_sky=False, 

1888 dark_time=30.151*u.s, 

1889 detector_exposure_id=3023052500041018, 

1890 detector_group="RTM-004", 

1891 detector_name="S00", 

1892 detector_num=18, 

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

1894 exposure_id=3023052500041, 

1895 exposure_group="3023052500041", 

1896 exposure_time=30.0*u.s, 

1897 focus_z=0.0*u.mm, 

1898 group_counter_end=41, 

1899 group_counter_start=41, 

1900 has_simulated_content=False, 

1901 observation_counter=41, 

1902 observation_id="TS_C_20230525_000041", 

1903 observation_type="flat", 

1904 observation_reason="flat", 

1905 observing_day=20230525, 

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

1907 physical_filter="unknown", 

1908 science_program="7227D", 

1909 visit_id=3023052500041)), 

1910 ) 

1911 for filename, expected in test_data: 

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

1913 with warnings.catch_warnings(): 

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

1915 warnings.simplefilter("ignore", VerifyWarning) 

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

1917 

1918 def test_ucdcam_translator(self): 

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

1920 dict(telescope=None, 

1921 instrument="LSST-UCDCam", 

1922 can_see_sky=False, 

1923 dark_time=2.07859*u.s, 

1924 detector_exposure_id=42370917130, 

1925 detector_group="R21", 

1926 detector_name="S01", 

1927 detector_num=10, 

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

1929 exposure_id=2023103100227, 

1930 exposure_group="2023103100227", 

1931 exposure_time=1.0*u.s, 

1932 exposure_time_requested=1.0*u.s, 

1933 focus_z=0.0*u.mm, 

1934 group_counter_end=227, 

1935 group_counter_start=227, 

1936 has_simulated_content=False, 

1937 observation_counter=227, 

1938 observation_id="TS_C_20231031_000227", 

1939 observation_type="flat", 

1940 observation_reason="flat", 

1941 observing_day=20231031, 

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

1943 physical_filter="r", 

1944 science_program="unknown", 

1945 visit_id=2023103100227)), 

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

1947 dict(telescope=None, 

1948 instrument="LSST-UCDCam", 

1949 can_see_sky=False, 

1950 dark_time=3.082*u.s, 

1951 detector_exposure_id=179029732609, 

1952 detector_group="R22", 

1953 detector_name="S01", 

1954 detector_num=1, 

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

1956 exposure_id=3023073000237, 

1957 exposure_group="3023073000237", 

1958 exposure_time=2.0*u.s, 

1959 focus_z=0.0*u.mm, 

1960 group_counter_end=237, 

1961 group_counter_start=237, 

1962 has_simulated_content=False, 

1963 observation_counter=237, 

1964 observation_id="TS_C_20230730_000237", 

1965 observation_type="flat", 

1966 observation_reason="flat", 

1967 observing_day=20230730, 

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

1969 physical_filter="r", 

1970 science_program="unknown", 

1971 visit_id=3023073000237)), 

1972 ) 

1973 for filename, expected in test_data: 

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

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

1976 

1977 def test_compute_exposure_id(self): 

1978 test_data = { 

1979 (20240318, 43): 2024031800043, 

1980 (20240318, 43, None): 2024031800043, 

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

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

1983 # Pre phase-out of offsets 

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

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

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

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

1988 # Post phase-out of offsets 

1989 (20250418, 43): 2025041800043, 

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

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

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

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

1994 } 

1995 

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

1997 with self.subTest(inputs=inputs): 

1998 self.assertEqual( 

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

2000 expected 

2001 ) 

2002 

2003 def test_checker(self): 

2004 filename = "latiss-future.yaml" 

2005 from astro_metadata_translator.tests import read_test_file 

2006 from astro_metadata_translator import ObservationInfo 

2007 header = read_test_file(filename, self.datadir) 

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

2009 self.assertTrue(obsInfo) 

2010 

2011 def test_fix_header(self): 

2012 from astro_metadata_translator import fix_header 

2013 from astro_metadata_translator.tests import read_test_file 

2014 # Test that header fix up is working 

2015 # Not all headers are used in metadata translation 

2016 test_data = ( 

2017 ("latiss-AT_O_20210212_000006.yaml", 

2018 dict(RASTART=260.024385071917)), 

2019 ("latiss-AT_O_20210210_000011.yaml", 

2020 dict(RASTART=355.41750341182313)), 

2021 ) 

2022 for filename, expected in test_data: 

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

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

2025 modified = fix_header(header) 

2026 self.assertTrue(modified) 

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

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

2029 

2030 

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

2032 unittest.main()