Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

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 

25import astropy.units as u 

26import astropy.units.cds as cds 

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

28 

29from astro_metadata_translator.tests import MetadataAssertHelper 

30 

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

32 

33 

34class LsstMetadataTranslatorTestCase(unittest.TestCase, MetadataAssertHelper): 

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

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

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

38 

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

40 

41 def test_lsstCam_translator(self): 

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

43 dict(telescope="Simonyi Survey Telescope", 

44 instrument="LSSTCam", 

45 boresight_rotation_coord="unknown", 

46 dark_time=0.0*u.s, 

47 detector_exposure_id=3019031900001029, 

48 detector_group="R10", 

49 detector_name="S02", 

50 detector_num=29, 

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

52 exposure_id=3019031900001, 

53 exposure_group="3019031900001", 

54 exposure_time=0.0*u.s, 

55 object="UNKNOWN", 

56 observation_counter=1, 

57 observation_id="MC_C_20190319_000001", 

58 observation_type="bias", 

59 observation_reason="bias", 

60 observing_day=20190319, 

61 physical_filter="unknown", 

62 pressure=None, 

63 relative_humidity=None, 

64 science_program="unknown", 

65 temperature=None, 

66 visit_id=3019031900001)), 

67 ("lsstCam-MC_C_20190319_000001_R22_S21.yaml", 

68 dict(telescope="Simonyi Survey Telescope", 

69 instrument="LSSTCam", 

70 boresight_rotation_coord="unknown", 

71 dark_time=0.0*u.s, 

72 detector_exposure_id=3019031900001097, 

73 detector_group="R22", 

74 detector_name="S21", 

75 detector_num=97, 

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

77 exposure_id=3019031900001, 

78 exposure_group="3019031900001", 

79 exposure_time=0.0*u.s, 

80 object="UNKNOWN", 

81 observation_counter=1, 

82 observation_id="MC_C_20190319_000001", 

83 observation_type="bias", 

84 observation_reason="bias", 

85 observing_day=20190319, 

86 physical_filter="unknown", 

87 pressure=None, 

88 relative_humidity=None, 

89 science_program="unknown", 

90 temperature=None, 

91 visit_id=3019031900001)), 

92 ("lsstCam-MC_C_20190322_000002_R10_S22.yaml", 

93 dict(telescope="Simonyi Survey Telescope", 

94 instrument="LSSTCam", 

95 boresight_rotation_coord="unknown", 

96 dark_time=1.0*u.s, 

97 detector_exposure_id=3019032200002035, 

98 detector_group="R10", 

99 detector_name="S22", 

100 detector_num=35, 

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

102 exposure_id=3019032200002, 

103 exposure_group="3019032200002", 

104 exposure_time=1.0*u.s, 

105 object="UNKNOWN", 

106 observation_counter=2, 

107 observation_id="MC_C_20190322_000002", 

108 observation_type="flat", 

109 observation_reason="flat", 

110 observing_day=20190322, 

111 physical_filter="SDSSi~ND_OD0.5", 

112 pressure=None, 

113 relative_humidity=None, 

114 science_program="6489D", 

115 temperature=None, 

116 visit_id=3019032200002)), 

117 ("lsstCam-MC_C_20190406_000643_R10_S00.yaml", 

118 dict(telescope="Simonyi Survey Telescope", 

119 instrument="LSSTCam", 

120 boresight_rotation_coord="unknown", 

121 dark_time=1007.422*u.s, 

122 detector_exposure_id=3019040600643027, 

123 detector_group="R10", 

124 detector_name="S00", 

125 detector_num=27, 

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

127 exposure_id=3019040600643, 

128 exposure_group="3019040600643", 

129 exposure_time=999.99*u.s, 

130 object="UNKNOWN", 

131 observation_counter=643, 

132 observation_id="MC_C_20190406_000643", 

133 observation_type="flat", 

134 observation_reason="lambda", 

135 observing_day=20190406, 

136 physical_filter="950nm", 

137 pressure=None, 

138 relative_humidity=None, 

139 science_program="6549D", 

140 temperature=None, 

141 visit_id=3019040600643)), 

142 ) 

143 for filename, expected in test_data: 

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

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

146 

147 def test_phoSimLsstCam_translator(self): 

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

149 dict(telescope="Simonyi Survey Telescope", 

150 instrument="LSSTCam", 

151 boresight_rotation_coord="unknown", 

152 dark_time=15.0*u.s, 

153 detector_exposure_id=4000021700032090, 

154 detector_group="R22", 

155 detector_name="S00", 

156 detector_num=90, 

157 detector_serial="E2V-CCD250-369", 

158 detector_unique_name="R22_S00", 

159 exposure_group="4000021700032", 

160 exposure_id=4000021700032, 

161 exposure_time=15.0*u.s, 

162 object="UNKNOWN", 

163 observation_counter=32, 

164 observation_id="MC_H_20000217_000032", 

165 observation_reason="phosim", 

166 observation_type="science", 

167 observing_day=20000217, 

168 physical_filter="g", 

169 pressure=None, 

170 relative_humidity=None, 

171 science_program="9006001", 

172 temperature=None, 

173 visit_id=4000021700032)), 

174 ) 

175 for filename, expected in test_data: 

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

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

178 check_wcs=False, **expected) 

179 

180 def test_comCam_translator(self): 

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

182 dict(telescope="Simonyi Survey Telescope", 

183 instrument="LSSTComCam", 

184 boresight_rotation_coord="unknown", 

185 dark_time=0.398*u.s, 

186 detector_exposure_id=3019053000001000, 

187 detector_group="R22", 

188 detector_name="S00", 

189 detector_num=0, 

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

191 exposure_id=3019053000001, 

192 exposure_group="3019053000001", 

193 exposure_time=0.0*u.s, 

194 object="UNKNOWN", 

195 observation_counter=1, 

196 observation_id="CC_C_20190530_000001", 

197 observation_type="bias", 

198 observation_reason="bias", 

199 observing_day=20190530, 

200 physical_filter="unknown", 

201 pressure=None, 

202 relative_humidity=None, 

203 science_program="unknown", 

204 temperature=None, 

205 visit_id=3019053000001)), 

206 ("comCam-CC_C_20190526_000223_R22_S01.yaml", 

207 dict(telescope="Simonyi Survey Telescope", 

208 instrument="LSSTComCam", 

209 boresight_rotation_coord="unknown", 

210 dark_time=0.034*u.s, 

211 detector_exposure_id=3019052600223001, 

212 detector_group="R22", 

213 detector_name="S01", 

214 detector_num=1, 

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

216 exposure_id=3019052600223, 

217 exposure_group="3019052600223", 

218 exposure_time=0.0*u.s, 

219 object="UNKNOWN", 

220 observation_counter=223, 

221 observation_id="CC_C_20190526_000223", 

222 observation_type="bias", 

223 observation_reason="dark", 

224 observing_day=20190526, 

225 physical_filter="unknown", 

226 pressure=None, 

227 relative_humidity=None, 

228 science_program="unknown", 

229 temperature=None, 

230 visit_id=3019052600223)), 

231 ) 

232 for filename, expected in test_data: 

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

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

235 

236 def test_phosim_translator(self): 

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

238 dict(telescope="Simonyi Survey Telescope", 

239 instrument="LSSTCam-PhoSim", 

240 boresight_rotation_coord="sky", 

241 dark_time=30.0*u.s, 

242 detector_exposure_id=204595038, 

243 detector_group="R11", 

244 detector_name="S02", 

245 detector_num=38, 

246 detector_serial="R11_S02", 

247 exposure_id=204595, 

248 exposure_group="204595", 

249 exposure_time=30.0*u.s, 

250 object="UNKNOWN", 

251 observation_counter=0, 

252 observation_id="204595", 

253 observation_type="science", 

254 observation_reason="phosim", 

255 observing_day=20221004, 

256 physical_filter="i", 

257 pressure=520.0*cds.mmHg, 

258 relative_humidity=40.0, 

259 science_program="204595", 

260 temperature=20.0*u.deg_C, 

261 visit_id=204595, 

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

263 ) 

264 for filename, expected in test_data: 

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

266 # PhoSim data are in the future and Astropy complains 

267 # about astrometry errors. 

268 with self.assertWarns(astropy.utils.exceptions.AstropyWarning): 

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

270 

271 def test_latiss_translator(self): 

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

273 dict(telescope="Rubin Auxiliary Telescope", 

274 instrument="LATISS", 

275 boresight_rotation_coord="unknown", 

276 dark_time=27.0*u.s, 

277 detector_exposure_id=3018092000065, 

278 detector_group="RXX", 

279 detector_name="S00", 

280 detector_num=0, 

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

282 exposure_id=3018092000065, 

283 exposure_group="3018092000065", 

284 exposure_time=27.0*u.s, 

285 object="UNKNOWN", 

286 observation_counter=65, 

287 observation_id="AT_C_20180920_000065", 

288 observation_type="unknown", 

289 observation_reason="unknown", 

290 observing_day=20180920, 

291 physical_filter="unknown~unknown", 

292 pressure=None, 

293 relative_humidity=None, 

294 science_program="unknown", 

295 temperature=None, 

296 visit_id=3018092000065, 

297 )), 

298 ("latiss-AT_O_20190306_000014.yaml", 

299 dict(telescope="Rubin Auxiliary Telescope", 

300 instrument="LATISS", 

301 boresight_rotation_coord="unknown", 

302 dark_time=1.06*u.s, 

303 detector_exposure_id=2019030600014, 

304 detector_group="RXX", 

305 detector_name="S00", 

306 detector_num=0, 

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

308 exposure_id=2019030600014, 

309 exposure_group="2019030600014", 

310 exposure_time=1.06*u.s, 

311 object="UNKNOWN", 

312 observation_counter=14, 

313 observation_id="AT_O_20190306_000014", 

314 observation_type="unknown", 

315 observation_reason="unknown", 

316 observing_day=20190306, 

317 physical_filter="unknown~unknown", 

318 pressure=None, 

319 relative_humidity=None, 

320 science_program="unknown", 

321 temperature=None, 

322 visit_id=2019030600014, 

323 )), 

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

325 dict(telescope="Rubin Auxiliary Telescope", 

326 instrument="LATISS", 

327 boresight_rotation_coord="unknown", 

328 dark_time=0.0*u.s, 

329 detector_exposure_id=2019032900022, 

330 detector_group="RXX", 

331 detector_name="S00", 

332 detector_num=0, 

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

334 exposure_id=2019032900022, 

335 exposure_group="2019032900022", 

336 exposure_time=0.0*u.s, 

337 object="UNKNOWN", 

338 observation_counter=22, 

339 observation_id="AT_O_20190329_000022", 

340 observation_type="bias", 

341 observation_reason="unknown", 

342 observing_day=20190329, 

343 physical_filter="unknown~unknown", 

344 pressure=None, 

345 relative_humidity=None, 

346 science_program="unknown", 

347 temperature=None, 

348 visit_id=2019032900022, 

349 )), 

350 ("latiss-future.yaml", 

351 dict(telescope="Rubin Auxiliary Telescope", 

352 instrument="LATISS", 

353 boresight_rotation_coord="unknown", 

354 dark_time=0.0*u.s, 

355 detector_exposure_id=2020032900022, 

356 detector_group="RXX", 

357 detector_name="S00", 

358 detector_num=0, 

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

360 exposure_id=2020032900022, 

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

362 exposure_time=0.0*u.s, 

363 object="UNKNOWN", 

364 observation_counter=22, 

365 observation_id="AT_X_20200329_000022", 

366 observation_type="bias", 

367 observation_reason="unknown", 

368 observing_day=20200329, 

369 physical_filter="unknown~unknown", 

370 pressure=None, 

371 relative_humidity=None, 

372 science_program="unknown", 

373 temperature=None, 

374 visit_id=1654305000120024, 

375 )), 

376 ("latiss-AT_O_20190915_000037.yaml", 

377 dict(telescope="Rubin Auxiliary Telescope", 

378 instrument="LATISS", 

379 boresight_rotation_coord="unknown", 

380 dark_time=0.0*u.s, 

381 detector_exposure_id=2019091500037, 

382 detector_group="RXX", 

383 detector_name="S00", 

384 detector_num=0, 

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

386 exposure_id=2019091500037, 

387 exposure_group="bias_0027_0100", 

388 exposure_time=0.0*u.s, 

389 object="UNKNOWN", 

390 observation_counter=37, 

391 observation_id="AT_O_20190915_000037", 

392 observation_type="bias", 

393 observation_reason="unknown", 

394 observing_day=20190915, 

395 physical_filter="unknown~unknown", 

396 pressure=None, 

397 relative_humidity=None, 

398 science_program="unknown", 

399 temperature=None, 

400 visit_id=3575576933793566714, 

401 )), 

402 ("latiss-AT_O_20191031_000004.yaml", 

403 dict(telescope="Rubin Auxiliary Telescope", 

404 instrument="LATISS", 

405 boresight_rotation_coord="unknown", 

406 dark_time=3.0*u.s, 

407 detector_exposure_id=2019103100004, 

408 detector_group="RXX", 

409 detector_name="S00", 

410 detector_num=0, 

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

412 exposure_id=2019103100004, 

413 exposure_group="TEST01", 

414 exposure_time=3.0*u.s, 

415 object="UNKNOWN", 

416 observation_counter=4, 

417 observation_id="AT_O_20191031_000004", 

418 observation_type="engtest", 

419 observation_reason="unknown", 

420 observing_day=20191031, 

421 physical_filter="unknown~unknown", 

422 pressure=None, 

423 relative_humidity=None, 

424 science_program="unknown", 

425 temperature=None, 

426 visit_id=1123819875881954006, 

427 )), 

428 ("latiss-AT_O_20191104_000003.yaml", 

429 dict(telescope="Rubin Auxiliary Telescope", 

430 instrument="LATISS", 

431 boresight_rotation_coord="unknown", 

432 dark_time=3.0*u.s, 

433 detector_exposure_id=2019110400003, 

434 detector_group="RXX", 

435 detector_name="S00", 

436 detector_num=0, 

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

438 exposure_id=2019110400003, 

439 exposure_group="TEST01", 

440 exposure_time=3.0*u.s, 

441 object="UNKNOWN", 

442 observation_counter=3, 

443 observation_id="AT_O_20191104_000003", 

444 observation_type="engtest", 

445 observation_reason="unknown", 

446 observing_day=20191104, 

447 physical_filter="unknown~unknown", 

448 pressure=None, 

449 relative_humidity=None, 

450 science_program="unknown", 

451 temperature=None, 

452 visit_id=1123819875881954006, 

453 )), 

454 ("latiss-AT_O_20191113_000061.yaml", 

455 dict(telescope="Rubin Auxiliary Telescope", 

456 instrument="LATISS", 

457 boresight_rotation_coord="unknown", 

458 dark_time=0.5*u.s, 

459 detector_exposure_id=2019111300061, 

460 detector_group="RXX", 

461 detector_name="S00", 

462 detector_num=0, 

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

464 exposure_id=2019111300061, 

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

466 exposure_time=0.5*u.s, 

467 object="UNKNOWN", 

468 observation_counter=61, 

469 observation_id="AT_O_20191113_000061", 

470 observation_type="engtest", 

471 observation_reason="unknown", 

472 observing_day=20191113, 

473 physical_filter="empty~ronchi90lpmm", 

474 pressure=None, 

475 relative_humidity=None, 

476 science_program="unknown", 

477 temperature=None, 

478 visit_id=1892608703001301325, 

479 )), 

480 ("latiss-AT_O_20191118_000011.yaml", 

481 dict(telescope="Rubin Auxiliary Telescope", 

482 instrument="LATISS", 

483 boresight_rotation_coord="unknown", 

484 dark_time=15.0*u.s, 

485 detector_exposure_id=2019111800011, 

486 detector_group="RXX", 

487 detector_name="S00", 

488 detector_num=0, 

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

490 exposure_id=2019111800011, 

491 exposure_group="dark_0002_0005", 

492 exposure_time=15.0*u.s, 

493 object="UNKNOWN", 

494 observation_counter=11, 

495 observation_id="AT_O_20191118_000011", 

496 observation_type="dark", 

497 observation_reason="unknown", 

498 observing_day=20191118, 

499 physical_filter="diffuser~ronchi170lpmm", 

500 pressure=None, 

501 relative_humidity=None, 

502 science_program="unknown", 

503 temperature=None, 

504 visit_id=6861884254113212214, 

505 )), 

506 ("latiss-AT_O_20200121_000045.yaml", 

507 dict(telescope="Rubin Auxiliary Telescope", 

508 instrument="LATISS", 

509 boresight_rotation_coord="sky", 

510 dark_time=100.0*u.s, 

511 detector_exposure_id=2020012100045, 

512 detector_group="RXX", 

513 detector_name="S00", 

514 detector_num=0, 

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

516 exposure_id=2020012100045, 

517 exposure_group="test", 

518 exposure_time=100.0*u.s, 

519 object="UNKNOWN", 

520 observation_counter=45, 

521 observation_id="AT_O_20200121_000045", 

522 observation_type="engtest", 

523 observation_reason="unknown", 

524 observing_day=20200121, 

525 physical_filter="blank_bk7_wg05~empty", 

526 pressure=None, 

527 relative_humidity=None, 

528 science_program="unknown", 

529 temperature=None, 

530 visit_id=4702443654717948604, 

531 )), 

532 ("latiss-AT_O_20200128_000379.yaml", 

533 dict(telescope="Rubin Auxiliary Telescope", 

534 instrument="LATISS", 

535 boresight_rotation_coord="sky", 

536 dark_time=5.0*u.s, 

537 detector_exposure_id=2020012800379, 

538 detector_group="RXX", 

539 detector_name="S00", 

540 detector_num=0, 

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

542 exposure_id=2020012800379, 

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

544 exposure_time=5.0*u.s, 

545 object="HD107696", 

546 observation_counter=379, 

547 observation_id="AT_O_20200128_000379", 

548 observation_type="science", 

549 observation_reason="science", 

550 observing_day=20200128, 

551 physical_filter="KPNO_406_828nm~empty", 

552 pressure=None, 

553 relative_humidity=None, 

554 science_program="unknown", 

555 temperature=None, 

556 visit_id=1602123521660000, 

557 # We have some timing discrepancies in the headers 

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

559 # the recorded AZ/EL/TIME. 

560 wcs_params=dict(max_sep=7.), 

561 )), 

562 ) 

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

564 for filename, expected in test_data: 

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

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

567 

568 # This translation should fail 

569 with self.assertRaises(KeyError): 

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

571 

572 def test_imsim_translator(self): 

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

574 dict(telescope="Simonyi Survey Telescope", 

575 instrument="LSSTCam-imSim", 

576 boresight_rotation_coord="sky", 

577 dark_time=0.0*u.s, 

578 detector_exposure_id=3010002036, 

579 detector_group="R11", 

580 detector_name="S00", 

581 detector_num=36, 

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

583 exposure_id=3010002, 

584 exposure_group="3010002", 

585 exposure_time=0.0*u.s, 

586 object="UNKNOWN", 

587 observation_counter=0, 

588 observation_id="3010002", 

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

590 observation_reason="imsim", 

591 observing_day=20211231, 

592 physical_filter="i", 

593 pressure=None, 

594 relative_humidity=40.0, 

595 science_program="42", 

596 temperature=None, 

597 visit_id=3010002, 

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

599 )), 

600 ("imsim-lsst_a_204595_R11_S02_i.yaml", 

601 dict(telescope="Simonyi Survey Telescope", 

602 instrument="LSSTCam-imSim", 

603 boresight_rotation_coord="sky", 

604 dark_time=30.0*u.s, 

605 detector_exposure_id=204595038, 

606 detector_group="R11", 

607 detector_name="S02", 

608 detector_num=38, 

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

610 exposure_id=204595, 

611 exposure_group="204595", 

612 exposure_time=30.0*u.s, 

613 object="UNKNOWN", 

614 observation_counter=0, 

615 observation_id="204595", 

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

617 observation_reason="imsim", 

618 observing_day=20221004, 

619 physical_filter="i_sim_1.4", 

620 pressure=None, 

621 relative_humidity=40.0, 

622 science_program="204595", 

623 temperature=None, 

624 visit_id=204595, 

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

626 )), 

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

628 dict(telescope="Simonyi Survey Telescope", 

629 instrument="LSSTCam-imSim", 

630 boresight_rotation_coord="sky", 

631 dark_time=30.0*u.s, 

632 detector_exposure_id=5000007042, 

633 detector_group="R11", 

634 detector_name="S20", 

635 detector_num=42, 

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

637 exposure_id=5000007, 

638 exposure_group="5000007", 

639 exposure_time=30.0*u.s, 

640 object="UNKNOWN", 

641 observation_counter=0, 

642 observation_id="5000007", 

643 observation_type="flat", 

644 observation_reason="imsim", 

645 observing_day=20220805, 

646 physical_filter="i", 

647 pressure=None, 

648 relative_humidity=40.0, 

649 science_program="5000007", 

650 temperature=None, 

651 visit_id=5000007, 

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

653 )), 

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

655 dict(telescope="Simonyi Survey Telescope", 

656 instrument="LSSTCam-imSim", 

657 boresight_rotation_coord="sky", 

658 dark_time=500.0*u.s, 

659 detector_exposure_id=4010003040, 

660 detector_group="R11", 

661 detector_name="S11", 

662 detector_num=40, 

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

664 exposure_id=4010003, 

665 exposure_group="4010003", 

666 exposure_time=500.0*u.s, 

667 object="UNKNOWN", 

668 observation_counter=0, 

669 observation_id="4010003", 

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

671 observation_reason="imsim", 

672 observing_day=20211231, 

673 physical_filter="i", 

674 pressure=None, 

675 relative_humidity=40.0, 

676 science_program="42", 

677 temperature=None, 

678 visit_id=4010003, 

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

680 )), 

681 ) 

682 for filename, expected in test_data: 

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

684 # ImSim data are in the future and Astropy complains 

685 # about astrometry errors. 

686 if expected["observation_type"] == "science": 

687 with self.assertWarns(astropy.utils.exceptions.AstropyWarning): 

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

689 else: 

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

691 

692 def test_ts3_translator(self): 

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

694 dict(telescope=None, 

695 instrument="LSST-TS3", 

696 dark_time=44.631*u.s, 

697 detector_exposure_id=201811151255111433, 

698 detector_group="R433", 

699 detector_name="S00", 

700 detector_num=433, 

701 detector_serial="E2V-CCD250-411", 

702 exposure_id=201811151255111, 

703 exposure_group="201811151255111", 

704 exposure_time=44.631*u.s, 

705 observation_counter=25, 

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

707 observation_type="flat", 

708 observation_reason="lambda", 

709 observing_day=20181115, 

710 physical_filter="550CutOn", 

711 science_program="2018-11-15", 

712 visit_id=201811151255111)), 

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

714 dict(telescope=None, 

715 instrument="LSST-TS3", 

716 dark_time=30.611*u.s, 

717 detector_exposure_id=201607220607067071, 

718 detector_group="R071", 

719 detector_name="S00", 

720 detector_num=71, 

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

722 exposure_id=201607220607067, 

723 exposure_group="201607220607067", 

724 exposure_time=30.611*u.s, 

725 observation_counter=67, 

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

727 observation_type="flat", 

728 observation_reason="lambda", 

729 observing_day=20160721, 

730 physical_filter="550CutOn", 

731 science_program="2016-07-22", 

732 visit_id=201607220607067)), 

733 ) 

734 for filename, expected in test_data: 

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

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

737 

738 def test_ts8_translator(self): 

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

740 dict(telescope=None, 

741 instrument="LSST-TS8", 

742 dark_time=0.0*u.s, 

743 detector_exposure_id=201807241041568067, 

744 detector_group="RTM-010", 

745 detector_name="S11", 

746 detector_num=67, 

747 detector_serial="E2V-CCD250-179", 

748 exposure_id=201807241041568, 

749 exposure_group="201807241041568", 

750 exposure_time=0.0*u.s, 

751 observation_counter=24, 

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

753 observation_type="bias", 

754 observation_reason="lambda", 

755 observing_day=20180724, 

756 physical_filter="y", 

757 science_program="6006D", 

758 visit_id=201807241041568)), 

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

760 dict(telescope=None, 

761 instrument="LSST-TS8", 

762 dark_time=21.913*u.s, 

763 detector_exposure_id=201807241028453065, 

764 detector_group="RTM-010", 

765 detector_name="S02", 

766 detector_num=65, 

767 detector_serial="E2V-CCD250-200", 

768 exposure_id=201807241028453, 

769 exposure_group="201807241028453", 

770 exposure_time=21.913*u.s, 

771 observation_counter=17, 

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

773 observation_type="flat", 

774 observation_reason="lambda", 

775 observing_day=20180724, 

776 physical_filter="z", 

777 science_program="6006D", 

778 visit_id=201807241028453)), 

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

780 dict(telescope=None, 

781 instrument="LSST-TS8", 

782 dark_time=300.0*u.s, 

783 detector_exposure_id=201712151140062027, 

784 detector_group="RTM-005", 

785 detector_name="S00", 

786 detector_num=27, 

787 detector_serial="E2V-CCD250-220", 

788 exposure_id=201712151140062, 

789 exposure_group="201712151140062", 

790 exposure_time=300.0*u.s, 

791 observation_counter=94, 

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

793 observation_type="fe55", 

794 observation_reason="fe55", 

795 observing_day=20171215, 

796 physical_filter="i", 

797 science_program="6288", 

798 visit_id=201712151140062)), 

799 ) 

800 for filename, expected in test_data: 

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

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

803 

804 def test_ucdcam_translator(self): 

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

806 dict(telescope=None, 

807 instrument="LSST-UCDCam", 

808 dark_time=0.5*u.s, 

809 detector_exposure_id=201812052331480, 

810 detector_group="R00", 

811 detector_name="S00", 

812 detector_num=0, 

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

814 exposure_id=20181205233148, 

815 exposure_group="20181205233148", 

816 exposure_time=0.5*u.s, 

817 observation_counter=100, 

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

819 observation_type="flat", 

820 observation_reason="flat", 

821 observing_day=20181205, 

822 physical_filter="r", 

823 science_program="2018-12-05", 

824 visit_id=20181205233148)), 

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

826 dict(telescope=None, 

827 instrument="LSST-UCDCam", 

828 dark_time=0.5*u.s, 

829 detector_exposure_id=201805301503552, 

830 detector_group="R02", 

831 detector_name="S00", 

832 detector_num=2, 

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

834 exposure_id=20180530150355, 

835 exposure_group="20180530150355", 

836 exposure_time=0.5*u.s, 

837 observation_counter=100, 

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

839 observation_type="flat", 

840 observation_reason="flat", 

841 observing_day=20180530, 

842 physical_filter="r", 

843 science_program="2018-05-30", 

844 visit_id=20180530150355)), 

845 ) 

846 for filename, expected in test_data: 

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

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

849 

850 def test_checker(self): 

851 filename = "latiss-future.yaml" 

852 from astro_metadata_translator.tests import read_test_file 

853 from astro_metadata_translator import ObservationInfo 

854 header = read_test_file(filename, self.datadir) 

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

856 self.assertTrue(obsInfo) 

857 

858 

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

860 unittest.main()