Coverage for tests/test_translator.py: 17%

82 statements  

« prev     ^ index     » next       coverage.py v7.2.3, created at 2023-04-21 02:34 -0700

1# This file is part of obs_lsst. 

2# 

3# Developed for the LSST Data Management System. 

4# This product includes software developed by the LSST Project 

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

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

7# for details of code ownership. 

8# 

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

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

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

12# (at your option) any later version. 

13# 

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

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

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

17# GNU General Public License for more details. 

18# 

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

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

21 

22import os.path 

23import unittest 

24import astropy.units as u 

25import astropy.units.cds as cds 

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

27 

28from astro_metadata_translator.tests import MetadataAssertHelper 

29 

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

31 

32 

33class LsstMetadataTranslatorTestCase(unittest.TestCase, MetadataAssertHelper): 

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

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

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

37 

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

39 

40 def test_lsstCam_translator(self): 

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

42 dict(telescope="Simonyi Survey Telescope", 

43 instrument="LSSTCam", 

44 boresight_rotation_coord="unknown", 

45 dark_time=0.0*u.s, 

46 detector_exposure_id=3019031900001029, 

47 detector_group="R10", 

48 detector_name="S02", 

49 detector_num=29, 

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

51 exposure_id=3019031900001, 

52 exposure_group="3019031900001", 

53 exposure_time=0.0*u.s, 

54 focus_z=0.0*u.mm, 

55 group_counter_end=1, 

56 group_counter_start=1, 

57 has_simulated_content=False, 

58 object="UNKNOWN", 

59 observation_counter=1, 

60 observation_id="MC_C_20190319_000001", 

61 observation_type="bias", 

62 observation_reason="bias", 

63 observing_day=20190319, 

64 physical_filter="unknown", 

65 pressure=None, 

66 relative_humidity=None, 

67 science_program="unknown", 

68 temperature=None, 

69 visit_id=3019031900001)), 

70 ("lsstCam-MC_C_20190319_000001_R22_S21.yaml", 

71 dict(telescope="Simonyi Survey Telescope", 

72 instrument="LSSTCam", 

73 boresight_rotation_coord="unknown", 

74 dark_time=0.0*u.s, 

75 detector_exposure_id=3019031900001097, 

76 detector_group="R22", 

77 detector_name="S21", 

78 detector_num=97, 

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

80 exposure_id=3019031900001, 

81 exposure_group="3019031900001", 

82 exposure_time=0.0*u.s, 

83 focus_z=0.0*u.mm, 

84 group_counter_end=1, 

85 group_counter_start=1, 

86 has_simulated_content=False, 

87 object="UNKNOWN", 

88 observation_counter=1, 

89 observation_id="MC_C_20190319_000001", 

90 observation_type="bias", 

91 observation_reason="bias", 

92 observing_day=20190319, 

93 physical_filter="unknown", 

94 pressure=None, 

95 relative_humidity=None, 

96 science_program="unknown", 

97 temperature=None, 

98 visit_id=3019031900001)), 

99 ("lsstCam-MC_C_20190322_000002_R10_S22.yaml", 

100 dict(telescope="Simonyi Survey Telescope", 

101 instrument="LSSTCam", 

102 boresight_rotation_coord="unknown", 

103 dark_time=1.0*u.s, 

104 detector_exposure_id=3019032200002035, 

105 detector_group="R10", 

106 detector_name="S22", 

107 detector_num=35, 

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

109 exposure_id=3019032200002, 

110 exposure_group="3019032200002", 

111 exposure_time=1.0*u.s, 

112 focus_z=0.0*u.mm, 

113 group_counter_end=2, 

114 group_counter_start=2, 

115 has_simulated_content=False, 

116 object="UNKNOWN", 

117 observation_counter=2, 

118 observation_id="MC_C_20190322_000002", 

119 observation_type="flat", 

120 observation_reason="flat", 

121 observing_day=20190322, 

122 physical_filter="SDSSi~ND_OD0.5", 

123 pressure=None, 

124 relative_humidity=None, 

125 science_program="6489D", 

126 temperature=None, 

127 visit_id=3019032200002)), 

128 ("lsstCam-MC_C_20190406_000643_R10_S00.yaml", 

129 dict(telescope="Simonyi Survey Telescope", 

130 instrument="LSSTCam", 

131 boresight_rotation_coord="unknown", 

132 dark_time=1007.422*u.s, 

133 detector_exposure_id=3019040600643027, 

134 detector_group="R10", 

135 detector_name="S00", 

136 detector_num=27, 

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

138 exposure_id=3019040600643, 

139 exposure_group="3019040600643", 

140 exposure_time=999.99*u.s, 

141 focus_z=0.0*u.mm, 

142 group_counter_end=643, 

143 group_counter_start=643, 

144 has_simulated_content=False, 

145 object="UNKNOWN", 

146 observation_counter=643, 

147 observation_id="MC_C_20190406_000643", 

148 observation_type="flat", 

149 observation_reason="lambda", 

150 observing_day=20190406, 

151 physical_filter="950nm", 

152 pressure=None, 

153 relative_humidity=None, 

154 science_program="6549D", 

155 temperature=None, 

156 visit_id=3019040600643)), 

157 ) 

158 for filename, expected in test_data: 

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

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

161 

162 def test_phoSimLsstCam_translator(self): 

163 test_data = (("lsstCam-MC_H_20000217_000032_R22_S00.yaml", 

164 dict(telescope="Simonyi Survey Telescope", 

165 instrument="LSSTCam", 

166 boresight_rotation_coord="sky", 

167 dark_time=15.0*u.s, 

168 detector_exposure_id=4000021700032090, 

169 detector_group="R22", 

170 detector_name="S00", 

171 detector_num=90, 

172 detector_serial="E2V-CCD250-369", 

173 detector_unique_name="R22_S00", 

174 exposure_group="4000021700032", 

175 exposure_id=4000021700032, 

176 exposure_time=15.0*u.s, 

177 focus_z=0.0*u.mm, 

178 group_counter_end=32, 

179 group_counter_start=32, 

180 has_simulated_content=True, 

181 object="UNKNOWN", 

182 observation_counter=32, 

183 observation_id="MC_H_20000217_000032", 

184 observation_reason="phosim", 

185 observation_type="science", 

186 observing_day=20000217, 

187 physical_filter="g", 

188 pressure=None, 

189 relative_humidity=None, 

190 science_program="9006001", 

191 temperature=None, 

192 visit_id=4000021700032)), 

193 ) 

194 for filename, expected in test_data: 

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

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

197 check_wcs=False, **expected) 

198 

199 def test_comCam_translator(self): 

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

201 dict(telescope="Simonyi Survey Telescope", 

202 instrument="LSSTComCam", 

203 boresight_rotation_coord="unknown", 

204 dark_time=0.398*u.s, 

205 detector_exposure_id=3019053000001000, 

206 detector_group="R22", 

207 detector_name="S00", 

208 detector_num=0, 

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

210 exposure_id=3019053000001, 

211 exposure_group="3019053000001", 

212 exposure_time=0.0*u.s, 

213 focus_z=0.0*u.mm, 

214 group_counter_end=1, 

215 group_counter_start=1, 

216 has_simulated_content=False, 

217 object="UNKNOWN", 

218 observation_counter=1, 

219 observation_id="CC_C_20190530_000001", 

220 observation_type="bias", 

221 observation_reason="bias", 

222 observing_day=20190530, 

223 physical_filter="unknown", 

224 pressure=None, 

225 relative_humidity=None, 

226 science_program="unknown", 

227 temperature=None, 

228 visit_id=3019053000001)), 

229 ("comCam-CC_C_20190526_000223_R22_S01.yaml", 

230 dict(telescope="Simonyi Survey Telescope", 

231 instrument="LSSTComCam", 

232 boresight_rotation_coord="unknown", 

233 dark_time=0.034*u.s, 

234 detector_exposure_id=3019052600223001, 

235 detector_group="R22", 

236 detector_name="S01", 

237 detector_num=1, 

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

239 exposure_id=3019052600223, 

240 exposure_group="3019052600223", 

241 exposure_time=0.0*u.s, 

242 focus_z=0.0*u.mm, 

243 group_counter_end=223, 

244 group_counter_start=223, 

245 has_simulated_content=False, 

246 object="UNKNOWN", 

247 observation_counter=223, 

248 observation_id="CC_C_20190526_000223", 

249 observation_type="bias", 

250 observation_reason="dark", 

251 observing_day=20190526, 

252 physical_filter="unknown", 

253 pressure=None, 

254 relative_humidity=None, 

255 science_program="unknown", 

256 temperature=None, 

257 visit_id=3019052600223)), 

258 ) 

259 for filename, expected in test_data: 

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

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

262 

263 def test_phoSimComCam_translator(self): 

264 test_data = (("comCam-CC_H_20000217_006001_R22_S00.yaml", 

265 dict(telescope="Simonyi Survey Telescope", 

266 instrument="LSSTComCam", 

267 boresight_rotation_coord="sky", 

268 dark_time=1.0*u.s, 

269 detector_exposure_id=4000021706001000, 

270 detector_group="R22", 

271 detector_name="S00", 

272 detector_num=0, 

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

274 exposure_id=4000021706001, 

275 exposure_group="4000021706001", 

276 exposure_time=1.0*u.s, 

277 focus_z=0.0*u.mm, 

278 group_counter_end=6001, 

279 group_counter_start=6001, 

280 has_simulated_content=True, 

281 object="UNKNOWN", 

282 observation_counter=6001, 

283 observation_id="CC_H_20000217_006001", 

284 observation_type="science", 

285 observation_reason="test", 

286 observing_day=20000217, 

287 physical_filter="g_01", 

288 pressure=None, 

289 relative_humidity=None, 

290 science_program="9006001", 

291 temperature=None, 

292 visit_id=4000021706001)), 

293 ) 

294 for filename, expected in test_data: 

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

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

297 check_wcs=False, **expected) 

298 

299 def test_phosim_translator(self): 

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

301 dict(telescope="Simonyi Survey Telescope", 

302 instrument="LSSTCam-PhoSim", 

303 boresight_rotation_coord="sky", 

304 dark_time=30.0*u.s, 

305 detector_exposure_id=204595038, 

306 detector_group="R11", 

307 detector_name="S02", 

308 detector_num=38, 

309 detector_serial="R11_S02", 

310 exposure_id=204595, 

311 exposure_group="204595", 

312 exposure_time=30.0*u.s, 

313 focus_z=0.0*u.mm, 

314 group_counter_end=204595, 

315 group_counter_start=204595, 

316 has_simulated_content=True, 

317 object="UNKNOWN", 

318 observation_counter=0, 

319 observation_id="204595", 

320 observation_type="science", 

321 observation_reason="phosim", 

322 observing_day=20221004, 

323 physical_filter="i", 

324 pressure=520.0*cds.mmHg, 

325 relative_humidity=40.0, 

326 science_program="204595", 

327 temperature=20.0*u.deg_C, 

328 visit_id=204595, 

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

330 ) 

331 for filename, expected in test_data: 

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

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

334 

335 def test_latiss_translator(self): 

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

337 dict(telescope="Rubin Auxiliary Telescope", 

338 instrument="LATISS", 

339 boresight_rotation_coord="unknown", 

340 dark_time=27.0*u.s, 

341 detector_exposure_id=3018092000065, 

342 detector_group="RXX", 

343 detector_name="S00", 

344 detector_num=0, 

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

346 exposure_id=3018092000065, 

347 exposure_group="3018092000065", 

348 exposure_time=27.0*u.s, 

349 focus_z=0.0*u.mm, 

350 group_counter_end=65, 

351 group_counter_start=65, 

352 has_simulated_content=False, 

353 object="UNKNOWN", 

354 observation_counter=65, 

355 observation_id="AT_C_20180920_000065", 

356 observation_type="unknown", 

357 observation_reason="unknown", 

358 observing_day=20180920, 

359 physical_filter="unknown~unknown", 

360 pressure=None, 

361 relative_humidity=None, 

362 science_program="unknown", 

363 temperature=None, 

364 visit_id=3018092000065, 

365 )), 

366 ("latiss-AT_O_20190306_000014.yaml", 

367 dict(telescope="Rubin Auxiliary Telescope", 

368 instrument="LATISS", 

369 boresight_rotation_coord="unknown", 

370 dark_time=1.06*u.s, 

371 detector_exposure_id=2019030600014, 

372 detector_group="RXX", 

373 detector_name="S00", 

374 detector_num=0, 

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

376 exposure_id=2019030600014, 

377 exposure_group="2019030600014", 

378 exposure_time=1.06*u.s, 

379 focus_z=0.0*u.mm, 

380 group_counter_end=14, 

381 group_counter_start=14, 

382 has_simulated_content=False, 

383 object="UNKNOWN", 

384 observation_counter=14, 

385 observation_id="AT_O_20190306_000014", 

386 observation_type="unknown", 

387 observation_reason="unknown", 

388 observing_day=20190306, 

389 physical_filter="unknown~unknown", 

390 pressure=None, 

391 relative_humidity=None, 

392 science_program="unknown", 

393 temperature=None, 

394 visit_id=2019030600014, 

395 )), 

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

397 dict(telescope="Rubin Auxiliary Telescope", 

398 instrument="LATISS", 

399 boresight_rotation_coord="unknown", 

400 dark_time=0.0*u.s, 

401 detector_exposure_id=2019032900022, 

402 detector_group="RXX", 

403 detector_name="S00", 

404 detector_num=0, 

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

406 exposure_id=2019032900022, 

407 exposure_group="2019032900022", 

408 exposure_time=0.0*u.s, 

409 focus_z=0.0*u.mm, 

410 group_counter_end=22, 

411 group_counter_start=22, 

412 has_simulated_content=False, 

413 object="UNKNOWN", 

414 observation_counter=22, 

415 observation_id="AT_O_20190329_000022", 

416 observation_type="bias", 

417 observation_reason="unknown", 

418 observing_day=20190329, 

419 physical_filter="unknown~unknown", 

420 pressure=None, 

421 relative_humidity=None, 

422 science_program="unknown", 

423 temperature=None, 

424 visit_id=2019032900022, 

425 )), 

426 ("latiss-future.yaml", 

427 dict(telescope="Rubin Auxiliary Telescope", 

428 instrument="LATISS", 

429 boresight_rotation_coord="unknown", 

430 dark_time=0.0*u.s, 

431 detector_exposure_id=2020032900022, 

432 detector_group="RXX", 

433 detector_name="S00", 

434 detector_num=0, 

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

436 exposure_id=2020032900022, 

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

438 exposure_time=0.0*u.s, 

439 focus_z=0.0*u.mm, 

440 group_counter_end=22, 

441 group_counter_start=22, 

442 has_simulated_content=False, 

443 object="UNKNOWN", 

444 observation_counter=22, 

445 observation_id="AT_X_20200329_000022", 

446 observation_type="bias", 

447 observation_reason="unknown", 

448 observing_day=20200329, 

449 physical_filter="unknown~unknown", 

450 pressure=None, 

451 relative_humidity=None, 

452 science_program="unknown", 

453 temperature=None, 

454 visit_id=1654305000120024, 

455 )), 

456 ("latiss-AT_O_20190915_000037.yaml", 

457 dict(telescope="Rubin Auxiliary Telescope", 

458 instrument="LATISS", 

459 boresight_rotation_coord="unknown", 

460 dark_time=0.0*u.s, 

461 detector_exposure_id=2019091500037, 

462 detector_group="RXX", 

463 detector_name="S00", 

464 detector_num=0, 

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

466 exposure_id=2019091500037, 

467 exposure_group="bias_0027_0100", 

468 exposure_time=0.0*u.s, 

469 focus_z=0.0*u.mm, 

470 group_counter_end=37, 

471 group_counter_start=37, 

472 has_simulated_content=False, 

473 object="UNKNOWN", 

474 observation_counter=37, 

475 observation_id="AT_O_20190915_000037", 

476 observation_type="bias", 

477 observation_reason="unknown", 

478 observing_day=20190915, 

479 physical_filter="unknown~unknown", 

480 pressure=None, 

481 relative_humidity=None, 

482 science_program="unknown", 

483 temperature=None, 

484 visit_id=3575576933793566714, 

485 )), 

486 ("latiss-AT_O_20191031_000004.yaml", 

487 dict(telescope="Rubin Auxiliary Telescope", 

488 instrument="LATISS", 

489 boresight_rotation_coord="unknown", 

490 dark_time=3.0*u.s, 

491 detector_exposure_id=2019103100004, 

492 detector_group="RXX", 

493 detector_name="S00", 

494 detector_num=0, 

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

496 exposure_id=2019103100004, 

497 exposure_group="TEST01", 

498 exposure_time=3.0*u.s, 

499 focus_z=0.0*u.mm, 

500 group_counter_end=4, 

501 group_counter_start=4, 

502 has_simulated_content=False, 

503 object="UNKNOWN", 

504 observation_counter=4, 

505 observation_id="AT_O_20191031_000004", 

506 observation_type="engtest", 

507 observation_reason="unknown", 

508 observing_day=20191031, 

509 physical_filter="unknown~unknown", 

510 pressure=None, 

511 relative_humidity=None, 

512 science_program="unknown", 

513 temperature=None, 

514 visit_id=1123819875881954006, 

515 )), 

516 ("latiss-AT_O_20191104_000003.yaml", 

517 dict(telescope="Rubin Auxiliary Telescope", 

518 instrument="LATISS", 

519 boresight_rotation_coord="unknown", 

520 dark_time=3.0*u.s, 

521 detector_exposure_id=2019110400003, 

522 detector_group="RXX", 

523 detector_name="S00", 

524 detector_num=0, 

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

526 exposure_id=2019110400003, 

527 exposure_group="TEST01", 

528 exposure_time=3.0*u.s, 

529 focus_z=0.0*u.mm, 

530 group_counter_end=3, 

531 group_counter_start=3, 

532 has_simulated_content=False, 

533 object="UNKNOWN", 

534 observation_counter=3, 

535 observation_id="AT_O_20191104_000003", 

536 observation_type="engtest", 

537 observation_reason="unknown", 

538 observing_day=20191104, 

539 physical_filter="unknown~unknown", 

540 pressure=None, 

541 relative_humidity=None, 

542 science_program="unknown", 

543 temperature=None, 

544 visit_id=1123819875881954006, 

545 )), 

546 ("latiss-AT_O_20191113_000061.yaml", 

547 dict(telescope="Rubin Auxiliary Telescope", 

548 instrument="LATISS", 

549 boresight_rotation_coord="unknown", 

550 dark_time=0.5*u.s, 

551 detector_exposure_id=2019111300061, 

552 detector_group="RXX", 

553 detector_name="S00", 

554 detector_num=0, 

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

556 exposure_id=2019111300061, 

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

558 exposure_time=0.5*u.s, 

559 focus_z=0.0*u.mm, 

560 group_counter_end=61, 

561 group_counter_start=61, 

562 has_simulated_content=False, 

563 object="UNKNOWN", 

564 observation_counter=61, 

565 observation_id="AT_O_20191113_000061", 

566 observation_type="engtest", 

567 observation_reason="unknown", 

568 observing_day=20191113, 

569 physical_filter="empty~ronchi90lpmm", 

570 pressure=None, 

571 relative_humidity=None, 

572 science_program="unknown", 

573 temperature=None, 

574 visit_id=1892608703001301325, 

575 )), 

576 ("latiss-AT_O_20191118_000011.yaml", 

577 dict(telescope="Rubin Auxiliary Telescope", 

578 instrument="LATISS", 

579 boresight_rotation_coord="unknown", 

580 dark_time=15.0*u.s, 

581 detector_exposure_id=2019111800011, 

582 detector_group="RXX", 

583 detector_name="S00", 

584 detector_num=0, 

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

586 exposure_id=2019111800011, 

587 exposure_group="dark_0002_0005", 

588 exposure_time=15.0*u.s, 

589 focus_z=0.0*u.mm, 

590 group_counter_end=11, 

591 group_counter_start=11, 

592 has_simulated_content=False, 

593 object="UNKNOWN", 

594 observation_counter=11, 

595 observation_id="AT_O_20191118_000011", 

596 observation_type="dark", 

597 observation_reason="unknown", 

598 observing_day=20191118, 

599 physical_filter="diffuser~ronchi170lpmm", 

600 pressure=None, 

601 relative_humidity=None, 

602 science_program="unknown", 

603 temperature=None, 

604 visit_id=6861884254113212214, 

605 )), 

606 ("latiss-AT_O_20200121_000045.yaml", 

607 dict(telescope="Rubin Auxiliary Telescope", 

608 instrument="LATISS", 

609 boresight_rotation_coord="sky", 

610 dark_time=100.0*u.s, 

611 detector_exposure_id=2020012100045, 

612 detector_group="RXX", 

613 detector_name="S00", 

614 detector_num=0, 

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

616 exposure_id=2020012100045, 

617 exposure_group="test", 

618 exposure_time=100.0*u.s, 

619 focus_z=0.560002659202*u.mm, 

620 group_counter_end=45, 

621 group_counter_start=45, 

622 has_simulated_content=False, 

623 object="UNKNOWN", 

624 observation_counter=45, 

625 observation_id="AT_O_20200121_000045", 

626 observation_type="engtest", 

627 observation_reason="unknown", 

628 observing_day=20200121, 

629 physical_filter="blank_bk7_wg05~empty", 

630 pressure=None, 

631 relative_humidity=None, 

632 science_program="unknown", 

633 temperature=None, 

634 visit_id=4702443654717948604, 

635 check_altaz=True, 

636 )), 

637 ("latiss-AT_O_20200128_000379.yaml", 

638 dict(telescope="Rubin Auxiliary Telescope", 

639 instrument="LATISS", 

640 boresight_rotation_coord="sky", 

641 dark_time=5.0*u.s, 

642 detector_exposure_id=2020012800379, 

643 detector_group="RXX", 

644 detector_name="S00", 

645 detector_num=0, 

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

647 exposure_id=2020012800379, 

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

649 exposure_time=5.0*u.s, 

650 focus_z=0.35416568455*u.mm, 

651 group_counter_end=379, 

652 group_counter_start=379, 

653 has_simulated_content=False, 

654 object="HD107696", 

655 observation_counter=379, 

656 observation_id="AT_O_20200128_000379", 

657 observation_type="science", 

658 observation_reason="science", 

659 observing_day=20200128, 

660 physical_filter="KPNO_406_828nm~empty", 

661 pressure=None, 

662 relative_humidity=None, 

663 science_program="unknown", 

664 temperature=None, 

665 visit_id=1602123521660000, 

666 # We have some timing discrepancies in the headers 

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

668 # the recorded AZ/EL/TIME. 

669 wcs_params=dict(max_sep=7.), 

670 )), 

671 ("latiss-AT_O_20220405_000348.yaml", 

672 dict(telescope="Rubin Auxiliary Telescope", 

673 instrument="LATISS", 

674 boresight_rotation_coord="sky", 

675 dark_time=30.3176279067993*u.s, 

676 detector_exposure_id=2022040500348, 

677 detector_group="RXX", 

678 detector_name="S00", 

679 detector_num=0, 

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

681 exposure_id=2022040500348, 

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

683 exposure_time=30.0*u.s, 

684 focus_z=0.0697081759572029*u.mm, 

685 group_counter_end=349, 

686 group_counter_start=348, 

687 has_simulated_content=False, 

688 object="LATISS_E6A_00000040", 

689 observation_counter=348, 

690 observation_id="AT_O_20220405_000348", 

691 observation_type="science", 

692 observation_reason="object", 

693 observing_day=20220405, 

694 physical_filter="SDSSr~empty", 

695 pressure=None, 

696 relative_humidity=None, 

697 science_program="LATISS_E6A", 

698 temperature=None, 

699 visit_id=2291434871810000, 

700 # We have some timing discrepancies in the headers 

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

702 # the recorded AZ/EL/TIME. 

703 wcs_params=dict(max_sep=7.), 

704 )), 

705 ("latiss-AT_O_20220405_000349.yaml", 

706 dict(telescope="Rubin Auxiliary Telescope", 

707 instrument="LATISS", 

708 boresight_rotation_coord="sky", 

709 dark_time=30.2387452125549*u.s, 

710 detector_exposure_id=2022040500349, 

711 detector_group="RXX", 

712 detector_name="S00", 

713 detector_num=0, 

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

715 exposure_id=2022040500349, 

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

717 exposure_time=30.0*u.s, 

718 focus_z=0.0697081759572029*u.mm, 

719 group_counter_end=349, 

720 group_counter_start=348, 

721 has_simulated_content=False, 

722 object="LATISS_E6A_00000040", 

723 observation_counter=349, 

724 observation_id="AT_O_20220405_000349", 

725 observation_type="science", 

726 observation_reason="object", 

727 observing_day=20220405, 

728 physical_filter="SDSSr~empty", 

729 pressure=None, 

730 relative_humidity=None, 

731 science_program="LATISS_E6A", 

732 temperature=None, 

733 visit_id=2291434871810000, 

734 # We have some timing discrepancies in the headers 

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

736 # the recorded AZ/EL/TIME. 

737 wcs_params=dict(max_sep=7.), 

738 )), 

739 ("latiss-AT_O_20230321_000053.yaml", 

740 dict(telescope="Rubin Auxiliary Telescope", 

741 instrument="LATISS", 

742 boresight_rotation_coord="unknown", 

743 dark_time=30.0126*u.s, 

744 detector_exposure_id=2023032100053, 

745 detector_group="RXX", 

746 detector_name="S00", 

747 detector_num=0, 

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

749 exposure_id=2023032100053, 

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

751 exposure_time=30.0*u.s, 

752 focus_z=0.0*u.mm, 

753 group_counter_end=53, 

754 group_counter_start=53, 

755 has_simulated_content=False, 

756 object="slew_icrs", 

757 observation_counter=53, 

758 observation_id="AT_O_20230321_000053", 

759 observation_type="dark", 

760 observation_reason="dark", 

761 observing_day=20230321, 

762 physical_filter="empty~empty", 

763 pressure=None, 

764 relative_humidity=None, 

765 science_program="unknown", 

766 temperature=None, 

767 visit_id=2593446676330000, 

768 check_altaz=True, 

769 )) 

770 ) 

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

772 for filename, expected in test_data: 

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

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

775 

776 # This translation should fail 

777 with self.assertRaises(KeyError): 

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

779 

780 def test_imsim_translator(self): 

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

782 dict(telescope="Simonyi Survey Telescope", 

783 instrument="LSSTCam-imSim", 

784 boresight_rotation_coord="sky", 

785 dark_time=0.0*u.s, 

786 detector_exposure_id=3010002036, 

787 detector_group="R11", 

788 detector_name="S00", 

789 detector_num=36, 

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

791 exposure_id=3010002, 

792 exposure_group="3010002", 

793 exposure_time=0.0*u.s, 

794 focus_z=0.0*u.mm, 

795 group_counter_end=3010002, 

796 group_counter_start=3010002, 

797 has_simulated_content=True, 

798 object="UNKNOWN", 

799 observation_counter=0, 

800 observation_id="3010002", 

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

802 observation_reason="imsim", 

803 observing_day=20211231, 

804 physical_filter="i", 

805 pressure=None, 

806 relative_humidity=40.0, 

807 science_program="42", 

808 temperature=None, 

809 visit_id=3010002, 

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

811 )), 

812 ("imsim-lsst_a_204595_R11_S02_i.yaml", 

813 dict(telescope="Simonyi Survey Telescope", 

814 instrument="LSSTCam-imSim", 

815 boresight_rotation_coord="sky", 

816 dark_time=30.0*u.s, 

817 detector_exposure_id=204595038, 

818 detector_group="R11", 

819 detector_name="S02", 

820 detector_num=38, 

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

822 exposure_id=204595, 

823 exposure_group="204595", 

824 exposure_time=30.0*u.s, 

825 focus_z=0.0*u.mm, 

826 group_counter_end=204595, 

827 group_counter_start=204595, 

828 has_simulated_content=True, 

829 object="UNKNOWN", 

830 observation_counter=0, 

831 observation_id="204595", 

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

833 observation_reason="imsim", 

834 observing_day=20221004, 

835 physical_filter="i_sim_1.4", 

836 pressure=None, 

837 relative_humidity=40.0, 

838 science_program="204595", 

839 temperature=None, 

840 visit_id=204595, 

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

842 )), 

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

844 dict(telescope="Simonyi Survey Telescope", 

845 instrument="LSSTCam-imSim", 

846 boresight_rotation_coord="sky", 

847 dark_time=30.0*u.s, 

848 detector_exposure_id=5000007042, 

849 detector_group="R11", 

850 detector_name="S20", 

851 detector_num=42, 

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

853 exposure_id=5000007, 

854 exposure_group="5000007", 

855 exposure_time=30.0*u.s, 

856 focus_z=0.0*u.mm, 

857 group_counter_end=5000007, 

858 group_counter_start=5000007, 

859 has_simulated_content=True, 

860 object="UNKNOWN", 

861 observation_counter=0, 

862 observation_id="5000007", 

863 observation_type="flat", 

864 observation_reason="imsim", 

865 observing_day=20220805, 

866 physical_filter="i", 

867 pressure=None, 

868 relative_humidity=40.0, 

869 science_program="5000007", 

870 temperature=None, 

871 visit_id=5000007, 

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

873 )), 

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

875 dict(telescope="Simonyi Survey Telescope", 

876 instrument="LSSTCam-imSim", 

877 boresight_rotation_coord="sky", 

878 dark_time=500.0*u.s, 

879 detector_exposure_id=4010003040, 

880 detector_group="R11", 

881 detector_name="S11", 

882 detector_num=40, 

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

884 exposure_id=4010003, 

885 exposure_group="4010003", 

886 exposure_time=500.0*u.s, 

887 focus_z=0.0*u.mm, 

888 group_counter_end=4010003, 

889 group_counter_start=4010003, 

890 has_simulated_content=True, 

891 object="UNKNOWN", 

892 observation_counter=0, 

893 observation_id="4010003", 

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

895 observation_reason="imsim", 

896 observing_day=20211231, 

897 physical_filter="i", 

898 pressure=None, 

899 relative_humidity=40.0, 

900 science_program="42", 

901 temperature=None, 

902 visit_id=4010003, 

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

904 )), 

905 ) 

906 for filename, expected in test_data: 

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

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

909 

910 def test_ts3_translator(self): 

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

912 dict(telescope=None, 

913 instrument="LSST-TS3", 

914 dark_time=44.631*u.s, 

915 detector_exposure_id=201811151255111433, 

916 detector_group="R433", 

917 detector_name="S00", 

918 detector_num=433, 

919 detector_serial="E2V-CCD250-411", 

920 exposure_id=201811151255111, 

921 exposure_group="201811151255111", 

922 exposure_time=44.631*u.s, 

923 focus_z=0.0*u.mm, 

924 group_counter_end=25, 

925 group_counter_start=25, 

926 has_simulated_content=False, 

927 observation_counter=25, 

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

929 observation_type="flat", 

930 observation_reason="lambda", 

931 observing_day=20181115, 

932 physical_filter="550CutOn", 

933 science_program="2018-11-15", 

934 visit_id=201811151255111)), 

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

936 dict(telescope=None, 

937 instrument="LSST-TS3", 

938 dark_time=30.611*u.s, 

939 detector_exposure_id=201607220607067071, 

940 detector_group="R071", 

941 detector_name="S00", 

942 detector_num=71, 

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

944 exposure_id=201607220607067, 

945 exposure_group="201607220607067", 

946 exposure_time=30.611*u.s, 

947 focus_z=0.0*u.mm, 

948 group_counter_end=67, 

949 group_counter_start=67, 

950 has_simulated_content=False, 

951 observation_counter=67, 

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

953 observation_type="flat", 

954 observation_reason="lambda", 

955 observing_day=20160721, 

956 physical_filter="550CutOn", 

957 science_program="2016-07-22", 

958 visit_id=201607220607067)), 

959 ) 

960 for filename, expected in test_data: 

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

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

963 

964 def test_ts8_translator(self): 

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

966 dict(telescope=None, 

967 instrument="LSST-TS8", 

968 dark_time=0.0*u.s, 

969 detector_exposure_id=201807241041568067, 

970 detector_group="RTM-010", 

971 detector_name="S11", 

972 detector_num=67, 

973 detector_serial="E2V-CCD250-179", 

974 exposure_id=201807241041568, 

975 exposure_group="201807241041568", 

976 exposure_time=0.0*u.s, 

977 focus_z=0.0*u.mm, 

978 group_counter_end=24, 

979 group_counter_start=24, 

980 has_simulated_content=False, 

981 observation_counter=24, 

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

983 observation_type="bias", 

984 observation_reason="lambda", 

985 observing_day=20180724, 

986 physical_filter="y", 

987 science_program="6006D", 

988 visit_id=201807241041568)), 

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

990 dict(telescope=None, 

991 instrument="LSST-TS8", 

992 dark_time=21.913*u.s, 

993 detector_exposure_id=201807241028453065, 

994 detector_group="RTM-010", 

995 detector_name="S02", 

996 detector_num=65, 

997 detector_serial="E2V-CCD250-200", 

998 exposure_id=201807241028453, 

999 exposure_group="201807241028453", 

1000 exposure_time=21.913*u.s, 

1001 focus_z=0.0*u.mm, 

1002 group_counter_end=17, 

1003 group_counter_start=17, 

1004 has_simulated_content=False, 

1005 observation_counter=17, 

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

1007 observation_type="flat", 

1008 observation_reason="lambda", 

1009 observing_day=20180724, 

1010 physical_filter="z", 

1011 science_program="6006D", 

1012 visit_id=201807241028453)), 

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

1014 dict(telescope=None, 

1015 instrument="LSST-TS8", 

1016 dark_time=300.0*u.s, 

1017 detector_exposure_id=201712151140062027, 

1018 detector_group="RTM-005", 

1019 detector_name="S00", 

1020 detector_num=27, 

1021 detector_serial="E2V-CCD250-220", 

1022 exposure_id=201712151140062, 

1023 exposure_group="201712151140062", 

1024 exposure_time=300.0*u.s, 

1025 focus_z=0.0*u.mm, 

1026 group_counter_end=94, 

1027 group_counter_start=94, 

1028 has_simulated_content=False, 

1029 observation_counter=94, 

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

1031 observation_type="fe55", 

1032 observation_reason="fe55", 

1033 observing_day=20171215, 

1034 physical_filter="i", 

1035 science_program="6288", 

1036 visit_id=201712151140062)), 

1037 ("ts8-TS_C_20220711_000174_R22_S00.yaml", 

1038 dict(telescope=None, 

1039 instrument="LSST-TS8", 

1040 dark_time=210.315*u.s, 

1041 detector_exposure_id=202207111714459018, 

1042 detector_group="RTM-004", 

1043 detector_name="S00", 

1044 detector_num=18, 

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

1046 exposure_id=202207111714459, 

1047 exposure_group="202207111714459", 

1048 exposure_time=210.0*u.s, 

1049 focus_z=0.0*u.mm, 

1050 group_counter_end=174, 

1051 group_counter_start=174, 

1052 has_simulated_content=False, 

1053 observation_counter=174, 

1054 observation_id="TS_C_20220711_000174", 

1055 observation_type="spot", 

1056 observation_reason="spot_flat", 

1057 observing_day=20220711, 

1058 physical_filter="unknown", 

1059 science_program="7074D", 

1060 visit_id=202207111714459)) 

1061 ) 

1062 for filename, expected in test_data: 

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

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

1065 

1066 def test_ucdcam_translator(self): 

1067 test_data = (("UCD-E2V-CCD250-112-04_flat_flat_100_20181205153143.yaml", 

1068 dict(telescope=None, 

1069 instrument="LSST-UCDCam", 

1070 dark_time=0.5*u.s, 

1071 detector_exposure_id=201812052331480, 

1072 detector_group="R00", 

1073 detector_name="S00", 

1074 detector_num=0, 

1075 detector_serial="E2V-CCD250-112-04", 

1076 exposure_id=20181205233148, 

1077 exposure_group="20181205233148", 

1078 exposure_time=0.5*u.s, 

1079 focus_z=0.0*u.mm, 

1080 group_counter_end=100, 

1081 group_counter_start=100, 

1082 has_simulated_content=False, 

1083 observation_counter=100, 

1084 observation_id="E2V-CCD250-112-04_flat_flat_100_20181205153143", 

1085 observation_type="flat", 

1086 observation_reason="flat", 

1087 observing_day=20181205, 

1088 physical_filter="r", 

1089 science_program="2018-12-05", 

1090 visit_id=20181205233148)), 

1091 ("UCD-ITL-3800C-002_flat_flat_100_20180530080354.yaml", 

1092 dict(telescope=None, 

1093 instrument="LSST-UCDCam", 

1094 dark_time=0.5*u.s, 

1095 detector_exposure_id=201805301503552, 

1096 detector_group="R02", 

1097 detector_name="S00", 

1098 detector_num=2, 

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

1100 exposure_id=20180530150355, 

1101 exposure_group="20180530150355", 

1102 exposure_time=0.5*u.s, 

1103 focus_z=0.0*u.mm, 

1104 group_counter_end=100, 

1105 group_counter_start=100, 

1106 has_simulated_content=False, 

1107 observation_counter=100, 

1108 observation_id="ITL-3800C-002_flat_flat_100_20180530080354", 

1109 observation_type="flat", 

1110 observation_reason="flat", 

1111 observing_day=20180530, 

1112 physical_filter="r", 

1113 science_program="2018-05-30", 

1114 visit_id=20180530150355)), 

1115 ) 

1116 for filename, expected in test_data: 

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

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

1119 

1120 def test_checker(self): 

1121 filename = "latiss-future.yaml" 

1122 from astro_metadata_translator.tests import read_test_file 

1123 from astro_metadata_translator import ObservationInfo 

1124 header = read_test_file(filename, self.datadir) 

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

1126 self.assertTrue(obsInfo) 

1127 

1128 def test_fix_header(self): 

1129 from astro_metadata_translator import fix_header 

1130 from astro_metadata_translator.tests import read_test_file 

1131 # Test that header fix up is working 

1132 # Not all headers are used in metadata translation 

1133 test_data = ( 

1134 ("latiss-AT_O_20210212_000006.yaml", 

1135 dict(RASTART=260.024385071917)), 

1136 ("latiss-AT_O_20210210_000011.yaml", 

1137 dict(RASTART=355.41750341182313)), 

1138 ) 

1139 for filename, expected in test_data: 

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

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

1142 modified = fix_header(header) 

1143 self.assertTrue(modified) 

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

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

1146 

1147 

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

1149 unittest.main()