Coverage for tests/test_translator.py: 17%
92 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-11 10:26 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-11 10:26 +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/>.
22import os.path
23import unittest
24import warnings
25import astropy.units as u
26import astropy.units.cds as cds
27from astropy.io.fits.verify import VerifyWarning
29import lsst.obs.lsst.translators # noqa: F401 -- register the translators
30from astro_metadata_translator.tests import MetadataAssertHelper
32TESTDIR = os.path.abspath(os.path.dirname(__file__))
35class LsstMetadataTranslatorTestCase(unittest.TestCase, MetadataAssertHelper):
36 """Each test reads in raw headers from YAML files, constructs an
37 `ObservationInfo`, and compares the properties with the expected values
38 defined in the corresponding `dict`."""
40 datadir = os.path.join(TESTDIR, "headers")
42 def test_lsstCam_translator(self):
43 test_data = (("lsstCam-MC_C_20190319_000001_R10_S02.yaml",
44 dict(telescope="Simonyi Survey Telescope",
45 instrument="LSSTCam",
46 boresight_rotation_coord="unknown",
47 dark_time=0.0*u.s,
48 detector_exposure_id=0x269200011d,
49 detector_group="R10",
50 detector_name="S02",
51 detector_num=29,
52 detector_serial="ITL-3800C-041",
53 exposure_id=3019031900001,
54 exposure_group="3019031900001",
55 exposure_time=0.0*u.s,
56 focus_z=0.0*u.mm,
57 group_counter_end=1,
58 group_counter_start=1,
59 has_simulated_content=False,
60 object="UNKNOWN",
61 observation_counter=1,
62 observation_id="MC_C_20190319_000001",
63 observation_type="bias",
64 observation_reason="bias",
65 observing_day=20190319,
66 physical_filter="unknown",
67 pressure=None,
68 relative_humidity=None,
69 science_program="unknown",
70 temperature=None,
71 visit_id=3019031900001)),
72 ("lsstCam-MC_C_20190319_000001_R22_S21.yaml",
73 dict(telescope="Simonyi Survey Telescope",
74 instrument="LSSTCam",
75 boresight_rotation_coord="unknown",
76 dark_time=0.0*u.s,
77 detector_exposure_id=0x2692000161,
78 detector_group="R22",
79 detector_name="S21",
80 detector_num=97,
81 detector_serial="ITL-3800C-139",
82 exposure_id=3019031900001,
83 exposure_group="3019031900001",
84 exposure_time=0.0*u.s,
85 focus_z=0.0*u.mm,
86 group_counter_end=1,
87 group_counter_start=1,
88 has_simulated_content=False,
89 object="UNKNOWN",
90 observation_counter=1,
91 observation_id="MC_C_20190319_000001",
92 observation_type="bias",
93 observation_reason="bias",
94 observing_day=20190319,
95 physical_filter="unknown",
96 pressure=None,
97 relative_humidity=None,
98 science_program="unknown",
99 temperature=None,
100 visit_id=3019031900001)),
101 ("lsstCam-MC_C_20190322_000002_R10_S22.yaml",
102 dict(telescope="Simonyi Survey Telescope",
103 instrument="LSSTCam",
104 boresight_rotation_coord="unknown",
105 dark_time=1.0*u.s,
106 detector_exposure_id=0x2693800223,
107 detector_group="R10",
108 detector_name="S22",
109 detector_num=35,
110 detector_serial="ITL-3800C-103",
111 exposure_id=3019032200002,
112 exposure_group="3019032200002",
113 exposure_time=1.0*u.s,
114 focus_z=0.0*u.mm,
115 group_counter_end=2,
116 group_counter_start=2,
117 has_simulated_content=False,
118 object="UNKNOWN",
119 observation_counter=2,
120 observation_id="MC_C_20190322_000002",
121 observation_type="flat",
122 observation_reason="flat",
123 observing_day=20190322,
124 physical_filter="SDSSi~ND_OD0.5",
125 pressure=None,
126 relative_humidity=None,
127 science_program="6489D",
128 temperature=None,
129 visit_id=3019032200002)),
130 ("lsstCam-MC_C_20190406_000643_R10_S00.yaml",
131 dict(telescope="Simonyi Survey Telescope",
132 instrument="LSSTCam",
133 boresight_rotation_coord="unknown",
134 dark_time=1007.422*u.s,
135 detector_exposure_id=0x269b02831b,
136 detector_group="R10",
137 detector_name="S00",
138 detector_num=27,
139 detector_serial="ITL-3800C-145",
140 exposure_id=3019040600643,
141 exposure_group="3019040600643",
142 exposure_time=999.99*u.s,
143 focus_z=0.0*u.mm,
144 group_counter_end=643,
145 group_counter_start=643,
146 has_simulated_content=False,
147 object="UNKNOWN",
148 observation_counter=643,
149 observation_id="MC_C_20190406_000643",
150 observation_type="flat",
151 observation_reason="lambda",
152 observing_day=20190406,
153 physical_filter="950nm",
154 pressure=None,
155 relative_humidity=None,
156 science_program="6549D",
157 temperature=None,
158 visit_id=3019040600643)),
159 )
160 for filename, expected in test_data:
161 with self.subTest(f"Testing {filename}"):
162 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
164 def test_phoSimLsstCam_translator(self):
165 test_data = (("lsstCam-MC_H_20100217_000032_R22_S00.yaml",
166 dict(telescope="Simonyi Survey Telescope",
167 instrument="LSSTCam",
168 boresight_rotation_coord="sky",
169 dark_time=15.0*u.s,
170 detector_exposure_id=0x401780205a,
171 detector_group="R22",
172 detector_name="S00",
173 detector_num=90,
174 detector_serial="E2V-CCD250-369",
175 detector_unique_name="R22_S00",
176 exposure_group="4010021700032",
177 exposure_id=4010021700032,
178 exposure_time=15.0*u.s,
179 focus_z=0.0*u.mm,
180 group_counter_end=32,
181 group_counter_start=32,
182 has_simulated_content=True,
183 object="UNKNOWN",
184 observation_counter=32,
185 observation_id="MC_H_20100217_000032",
186 observation_reason="phosim",
187 observation_type="science",
188 observing_day=20100217,
189 physical_filter="g",
190 pressure=None,
191 relative_humidity=None,
192 science_program="9006001",
193 temperature=None,
194 visit_id=4010021700032)),
195 )
196 for filename, expected in test_data:
197 with self.subTest(f"Testing {filename}"):
198 self.assertObservationInfoFromYaml(filename, dir=self.datadir,
199 check_wcs=False, **expected)
201 def test_comCam_translator(self):
202 test_data = (("comCam-CC_C_20190530_000001_R22_S00.yaml",
203 dict(telescope="Simonyi Survey Telescope",
204 instrument="LSSTComCam",
205 boresight_rotation_coord="unknown",
206 dark_time=0.398*u.s,
207 detector_exposure_id=0x26b6000100,
208 detector_group="R22",
209 detector_name="S00",
210 detector_num=0,
211 detector_serial="ITL-3800C-229",
212 exposure_id=3019053000001,
213 exposure_group="3019053000001",
214 exposure_time=0.0*u.s,
215 focus_z=0.0*u.mm,
216 group_counter_end=1,
217 group_counter_start=1,
218 has_simulated_content=False,
219 object="UNKNOWN",
220 observation_counter=1,
221 observation_id="CC_C_20190530_000001",
222 observation_type="bias",
223 observation_reason="bias",
224 observing_day=20190530,
225 physical_filter="unknown",
226 pressure=None,
227 relative_humidity=None,
228 science_program="unknown",
229 temperature=None,
230 visit_id=3019053000001)),
231 ("comCam-CC_C_20190526_000223_R22_S01.yaml",
232 dict(telescope="Simonyi Survey Telescope",
233 instrument="LSSTComCam",
234 boresight_rotation_coord="unknown",
235 dark_time=0.034*u.s,
236 detector_exposure_id=0x26b400df01,
237 detector_group="R22",
238 detector_name="S01",
239 detector_num=1,
240 detector_serial="ITL-3800C-251",
241 exposure_id=3019052600223,
242 exposure_group="3019052600223",
243 exposure_time=0.0*u.s,
244 focus_z=0.0*u.mm,
245 group_counter_end=223,
246 group_counter_start=223,
247 has_simulated_content=False,
248 object="UNKNOWN",
249 observation_counter=223,
250 observation_id="CC_C_20190526_000223",
251 observation_type="bias",
252 observation_reason="dark",
253 observing_day=20190526,
254 physical_filter="unknown",
255 pressure=None,
256 relative_humidity=None,
257 science_program="unknown",
258 temperature=None,
259 visit_id=3019052600223)),
260 )
261 for filename, expected in test_data:
262 with self.subTest(f"Testing {filename}"):
263 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
265 def test_phoSimComCam_translator(self):
266 test_data = (("comCam-CC_H_20100217_006001_R22_S00.yaml",
267 dict(telescope="Simonyi Survey Telescope",
268 instrument="LSSTComCam",
269 boresight_rotation_coord="sky",
270 dark_time=1.0*u.s,
271 detector_exposure_id=0x4017977100,
272 detector_group="R22",
273 detector_name="S00",
274 detector_num=0,
275 detector_serial="ITL-3800C-229",
276 exposure_id=4010021706001,
277 exposure_group="4010021706001",
278 exposure_time=1.0*u.s,
279 focus_z=0.0*u.mm,
280 group_counter_end=6001,
281 group_counter_start=6001,
282 has_simulated_content=True,
283 object="UNKNOWN",
284 observation_counter=6001,
285 observation_id="CC_H_20100217_006001",
286 observation_type="science",
287 observation_reason="test",
288 observing_day=20100217,
289 physical_filter="g_01",
290 pressure=None,
291 relative_humidity=None,
292 science_program="9006001",
293 temperature=None,
294 visit_id=4010021706001)),
295 )
296 for filename, expected in test_data:
297 with self.subTest(f"Testing {filename}"):
298 self.assertObservationInfoFromYaml(filename, dir=self.datadir,
299 check_wcs=False, **expected)
301 def test_phosim_translator(self):
302 test_data = (("phosim-lsst_a_204595_f3_R11_S02_E000.yaml",
303 dict(telescope="Simonyi Survey Telescope",
304 instrument="LSSTCam-PhoSim",
305 boresight_rotation_coord="sky",
306 dark_time=30.0*u.s,
307 detector_exposure_id=204595038,
308 detector_group="R11",
309 detector_name="S02",
310 detector_num=38,
311 detector_serial="R11_S02",
312 exposure_id=204595,
313 exposure_group="204595",
314 exposure_time=30.0*u.s,
315 focus_z=0.0*u.mm,
316 group_counter_end=204595,
317 group_counter_start=204595,
318 has_simulated_content=True,
319 object="UNKNOWN",
320 observation_counter=0,
321 observation_id="204595",
322 observation_type="science",
323 observation_reason="phosim",
324 observing_day=20221004,
325 physical_filter="i",
326 pressure=520.0*cds.mmHg,
327 relative_humidity=40.0,
328 science_program="204595",
329 temperature=20.0*u.deg_C,
330 visit_id=204595,
331 wcs_params=dict(max_sep=3000.))), # 2022
332 )
333 for filename, expected in test_data:
334 with self.subTest(f"Testing {filename}"):
335 with warnings.catch_warnings():
336 # Avoid warnings from too-long FITS header keys.
337 warnings.simplefilter("ignore", VerifyWarning)
338 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
340 def test_latiss_translator(self):
341 test_data = (("latiss-2018-09-20-05700065-det000.yaml",
342 dict(telescope="Rubin Auxiliary Telescope",
343 instrument="LATISS",
344 boresight_rotation_coord="unknown",
345 dark_time=27.0*u.s,
346 detector_exposure_id=0x2638004100,
347 detector_group="RXX",
348 detector_name="S00",
349 detector_num=0,
350 detector_serial="ITL-3800C-098",
351 exposure_id=3018092000065,
352 exposure_group="3018092000065",
353 exposure_time=27.0*u.s,
354 focus_z=0.0*u.mm,
355 group_counter_end=65,
356 group_counter_start=65,
357 has_simulated_content=False,
358 object="UNKNOWN",
359 observation_counter=65,
360 observation_id="AT_C_20180920_000065",
361 observation_type="unknown",
362 observation_reason="unknown",
363 observing_day=20180920,
364 physical_filter="unknown~unknown",
365 pressure=None,
366 relative_humidity=None,
367 science_program="unknown",
368 temperature=None,
369 visit_id=3018092000065,
370 )),
371 ("latiss-AT_O_20190306_000014.yaml",
372 dict(telescope="Rubin Auxiliary Telescope",
373 instrument="LATISS",
374 boresight_rotation_coord="unknown",
375 dark_time=1.06*u.s,
376 detector_exposure_id=0x68b800e00,
377 detector_group="RXX",
378 detector_name="S00",
379 detector_num=0,
380 detector_serial="ITL-3800C-098",
381 exposure_id=2019030600014,
382 exposure_group="2019030600014",
383 exposure_time=1.06*u.s,
384 focus_z=0.0*u.mm,
385 group_counter_end=14,
386 group_counter_start=14,
387 has_simulated_content=False,
388 object="UNKNOWN",
389 observation_counter=14,
390 observation_id="AT_O_20190306_000014",
391 observation_type="unknown",
392 observation_reason="unknown",
393 observing_day=20190306,
394 physical_filter="unknown~unknown",
395 pressure=None,
396 relative_humidity=None,
397 science_program="unknown",
398 temperature=None,
399 visit_id=2019030600014,
400 )),
401 ("latiss-AT_O_20190329_000022-ats-wfs_ccd.yaml",
402 dict(telescope="Rubin Auxiliary Telescope",
403 instrument="LATISS",
404 boresight_rotation_coord="unknown",
405 dark_time=0.0*u.s,
406 detector_exposure_id=0x697001600,
407 detector_group="RXX",
408 detector_name="S00",
409 detector_num=0,
410 detector_serial="ITL-3800C-098",
411 exposure_id=2019032900022,
412 exposure_group="2019032900022",
413 exposure_time=0.0*u.s,
414 focus_z=0.0*u.mm,
415 group_counter_end=22,
416 group_counter_start=22,
417 has_simulated_content=False,
418 object="UNKNOWN",
419 observation_counter=22,
420 observation_id="AT_O_20190329_000022",
421 observation_type="bias",
422 observation_reason="unknown",
423 observing_day=20190329,
424 physical_filter="unknown~unknown",
425 pressure=None,
426 relative_humidity=None,
427 science_program="unknown",
428 temperature=None,
429 visit_id=2019032900022,
430 )),
431 ("latiss-future.yaml",
432 dict(telescope="Rubin Auxiliary Telescope",
433 instrument="LATISS",
434 boresight_rotation_coord="unknown",
435 dark_time=0.0*u.s,
436 detector_exposure_id=0x74e001600,
437 detector_group="RXX",
438 detector_name="S00",
439 detector_num=0,
440 detector_serial="ITL-3800C-068",
441 exposure_id=2020032900022,
442 exposure_group="2020-03-29T16:55:00.012#24",
443 exposure_time=0.0*u.s,
444 focus_z=0.0*u.mm,
445 group_counter_end=22,
446 group_counter_start=22,
447 has_simulated_content=False,
448 object="UNKNOWN",
449 observation_counter=22,
450 observation_id="AT_X_20200329_000022",
451 observation_type="bias",
452 observation_reason="unknown",
453 observing_day=20200329,
454 physical_filter="unknown~unknown",
455 pressure=None,
456 relative_humidity=None,
457 science_program="unknown",
458 temperature=None,
459 visit_id=1654305000120024,
460 )),
461 ("latiss-AT_O_20190915_000037.yaml",
462 dict(telescope="Rubin Auxiliary Telescope",
463 instrument="LATISS",
464 boresight_rotation_coord="unknown",
465 dark_time=0.0*u.s,
466 detector_exposure_id=0x6ec002500,
467 detector_group="RXX",
468 detector_name="S00",
469 detector_num=0,
470 detector_serial="ITL-3800C-068",
471 exposure_id=2019091500037,
472 exposure_group="bias_0027_0100",
473 exposure_time=0.0*u.s,
474 focus_z=0.0*u.mm,
475 group_counter_end=37,
476 group_counter_start=37,
477 has_simulated_content=False,
478 object="UNKNOWN",
479 observation_counter=37,
480 observation_id="AT_O_20190915_000037",
481 observation_type="bias",
482 observation_reason="unknown",
483 observing_day=20190915,
484 physical_filter="unknown~unknown",
485 pressure=None,
486 relative_humidity=None,
487 science_program="unknown",
488 temperature=None,
489 visit_id=3575576933793566714,
490 )),
491 ("latiss-AT_O_20191031_000004.yaml",
492 dict(telescope="Rubin Auxiliary Telescope",
493 instrument="LATISS",
494 boresight_rotation_coord="unknown",
495 dark_time=3.0*u.s,
496 detector_exposure_id=0x703000400,
497 detector_group="RXX",
498 detector_name="S00",
499 detector_num=0,
500 detector_serial="ITL-3800C-068",
501 exposure_id=2019103100004,
502 exposure_group="TEST01",
503 exposure_time=3.0*u.s,
504 focus_z=0.0*u.mm,
505 group_counter_end=4,
506 group_counter_start=4,
507 has_simulated_content=False,
508 object="UNKNOWN",
509 observation_counter=4,
510 observation_id="AT_O_20191031_000004",
511 observation_type="engtest",
512 observation_reason="unknown",
513 observing_day=20191031,
514 physical_filter="unknown~unknown",
515 pressure=None,
516 relative_humidity=None,
517 science_program="unknown",
518 temperature=None,
519 visit_id=1123819875881954006,
520 )),
521 ("latiss-AT_O_20191104_000003.yaml",
522 dict(telescope="Rubin Auxiliary Telescope",
523 instrument="LATISS",
524 boresight_rotation_coord="unknown",
525 dark_time=3.0*u.s,
526 detector_exposure_id=0x705000300,
527 detector_group="RXX",
528 detector_name="S00",
529 detector_num=0,
530 detector_serial="ITL-3800C-068",
531 exposure_id=2019110400003,
532 exposure_group="TEST01",
533 exposure_time=3.0*u.s,
534 focus_z=0.0*u.mm,
535 group_counter_end=3,
536 group_counter_start=3,
537 has_simulated_content=False,
538 object="UNKNOWN",
539 observation_counter=3,
540 observation_id="AT_O_20191104_000003",
541 observation_type="engtest",
542 observation_reason="unknown",
543 observing_day=20191104,
544 physical_filter="unknown~unknown",
545 pressure=None,
546 relative_humidity=None,
547 science_program="unknown",
548 temperature=None,
549 visit_id=1123819875881954006,
550 )),
551 ("latiss-AT_O_20191113_000061.yaml",
552 dict(telescope="Rubin Auxiliary Telescope",
553 instrument="LATISS",
554 boresight_rotation_coord="unknown",
555 dark_time=0.5*u.s,
556 detector_exposure_id=0x709803d00,
557 detector_group="RXX",
558 detector_name="S00",
559 detector_num=0,
560 detector_serial="ITL-3800C-068",
561 exposure_id=2019111300061,
562 exposure_group="wave,Focus,455,32.0PH=5um",
563 exposure_time=0.5*u.s,
564 focus_z=0.0*u.mm,
565 group_counter_end=61,
566 group_counter_start=61,
567 has_simulated_content=False,
568 object="UNKNOWN",
569 observation_counter=61,
570 observation_id="AT_O_20191113_000061",
571 observation_type="engtest",
572 observation_reason="unknown",
573 observing_day=20191113,
574 physical_filter="empty~ronchi90lpmm",
575 pressure=None,
576 relative_humidity=None,
577 science_program="unknown",
578 temperature=None,
579 visit_id=1892608703001301325,
580 )),
581 ("latiss-AT_O_20191118_000011.yaml",
582 dict(telescope="Rubin Auxiliary Telescope",
583 instrument="LATISS",
584 boresight_rotation_coord="unknown",
585 dark_time=15.0*u.s,
586 detector_exposure_id=0x70c000b00,
587 detector_group="RXX",
588 detector_name="S00",
589 detector_num=0,
590 detector_serial="ITL-3800C-068",
591 exposure_id=2019111800011,
592 exposure_group="dark_0002_0005",
593 exposure_time=15.0*u.s,
594 focus_z=0.0*u.mm,
595 group_counter_end=11,
596 group_counter_start=11,
597 has_simulated_content=False,
598 object="UNKNOWN",
599 observation_counter=11,
600 observation_id="AT_O_20191118_000011",
601 observation_type="dark",
602 observation_reason="unknown",
603 observing_day=20191118,
604 physical_filter="diffuser~ronchi170lpmm",
605 pressure=None,
606 relative_humidity=None,
607 science_program="unknown",
608 temperature=None,
609 visit_id=6861884254113212214,
610 )),
611 ("latiss-AT_O_20200121_000045.yaml",
612 dict(telescope="Rubin Auxiliary Telescope",
613 instrument="LATISS",
614 boresight_rotation_coord="sky",
615 dark_time=100.0*u.s,
616 detector_exposure_id=0x72c002d00,
617 detector_group="RXX",
618 detector_name="S00",
619 detector_num=0,
620 detector_serial="ITL-3800C-068",
621 exposure_id=2020012100045,
622 exposure_group="test",
623 exposure_time=100.0*u.s,
624 focus_z=0.560002659202*u.mm,
625 group_counter_end=45,
626 group_counter_start=45,
627 has_simulated_content=False,
628 object="UNKNOWN",
629 observation_counter=45,
630 observation_id="AT_O_20200121_000045",
631 observation_type="engtest",
632 observation_reason="unknown",
633 observing_day=20200121,
634 physical_filter="blank_bk7_wg05~empty",
635 pressure=None,
636 relative_humidity=None,
637 science_program="unknown",
638 temperature=None,
639 visit_id=4702443654717948604,
640 check_altaz=True,
641 )),
642 ("latiss-AT_O_20200128_000379.yaml",
643 dict(telescope="Rubin Auxiliary Telescope",
644 instrument="LATISS",
645 boresight_rotation_coord="sky",
646 dark_time=5.0*u.s,
647 detector_exposure_id=0x72f817b00,
648 detector_group="RXX",
649 detector_name="S00",
650 detector_num=0,
651 detector_serial="ITL-3800C-068",
652 exposure_id=2020012800379,
653 exposure_group="2020-01-29T07:25:52.166",
654 exposure_time=5.0*u.s,
655 focus_z=0.35416568455*u.mm,
656 group_counter_end=379,
657 group_counter_start=379,
658 has_simulated_content=False,
659 object="HD107696",
660 observation_counter=379,
661 observation_id="AT_O_20200128_000379",
662 observation_type="science",
663 observation_reason="science",
664 observing_day=20200128,
665 physical_filter="KPNO_406_828nm~empty",
666 pressure=None,
667 relative_humidity=None,
668 science_program="unknown",
669 temperature=None,
670 visit_id=1602123521660000,
671 # We have some timing discrepancies in the headers
672 # that make it hard to match the demand RA/DEC to
673 # the recorded AZ/EL/TIME.
674 wcs_params=dict(max_sep=7.),
675 )),
676 ("latiss-AT_O_20220405_000348.yaml",
677 dict(telescope="Rubin Auxiliary Telescope",
678 instrument="LATISS",
679 boresight_rotation_coord="sky",
680 dark_time=30.3176279067993*u.s,
681 detector_exposure_id=0x8be815c00,
682 detector_group="RXX",
683 detector_name="S00",
684 detector_num=0,
685 detector_serial="ITL-3800C-068",
686 exposure_id=2022040500348,
687 exposure_group="2022-04-06T02:58:07.181",
688 exposure_time=30.0*u.s,
689 focus_z=0.0697081759572029*u.mm,
690 group_counter_end=349,
691 group_counter_start=348,
692 has_simulated_content=False,
693 object="LATISS_E6A_00000040",
694 observation_counter=348,
695 observation_id="AT_O_20220405_000348",
696 observation_type="science",
697 observation_reason="object",
698 observing_day=20220405,
699 physical_filter="SDSSr~empty",
700 pressure=None,
701 relative_humidity=None,
702 science_program="LATISS_E6A",
703 temperature=None,
704 visit_id=2291434871810000,
705 # We have some timing discrepancies in the headers
706 # that make it hard to match the demand RA/DEC to
707 # the recorded AZ/EL/TIME.
708 wcs_params=dict(max_sep=7.),
709 )),
710 ("latiss-AT_O_20220405_000349.yaml",
711 dict(telescope="Rubin Auxiliary Telescope",
712 instrument="LATISS",
713 boresight_rotation_coord="sky",
714 dark_time=30.2387452125549*u.s,
715 detector_exposure_id=0x8be815d00,
716 detector_group="RXX",
717 detector_name="S00",
718 detector_num=0,
719 detector_serial="ITL-3800C-068",
720 exposure_id=2022040500349,
721 exposure_group="2022-04-06T02:58:07.181",
722 exposure_time=30.0*u.s,
723 focus_z=0.0697081759572029*u.mm,
724 group_counter_end=349,
725 group_counter_start=348,
726 has_simulated_content=False,
727 object="LATISS_E6A_00000040",
728 observation_counter=349,
729 observation_id="AT_O_20220405_000349",
730 observation_type="science",
731 observation_reason="object",
732 observing_day=20220405,
733 physical_filter="SDSSr~empty",
734 pressure=None,
735 relative_humidity=None,
736 science_program="LATISS_E6A",
737 temperature=None,
738 visit_id=2291434871810000,
739 # We have some timing discrepancies in the headers
740 # that make it hard to match the demand RA/DEC to
741 # the recorded AZ/EL/TIME.
742 wcs_params=dict(max_sep=7.),
743 )),
744 ("latiss-AT_O_20230321_000053.yaml",
745 dict(telescope="Rubin Auxiliary Telescope",
746 instrument="LATISS",
747 boresight_rotation_coord="unknown",
748 dark_time=30.0126*u.s,
749 detector_exposure_id=0x96d803500,
750 detector_group="RXX",
751 detector_name="S00",
752 detector_num=0,
753 detector_serial="ITL-3800C-068",
754 exposure_id=2023032100053,
755 exposure_group="2023-03-21T16:11:07.633",
756 exposure_time=30.0*u.s,
757 focus_z=0.0*u.mm,
758 group_counter_end=53,
759 group_counter_start=53,
760 has_simulated_content=False,
761 object="slew_icrs",
762 observation_counter=53,
763 observation_id="AT_O_20230321_000053",
764 observation_type="dark",
765 observation_reason="dark",
766 observing_day=20230321,
767 physical_filter="empty~empty",
768 pressure=None,
769 relative_humidity=None,
770 science_program="unknown",
771 temperature=None,
772 visit_id=2593446676330000,
773 check_altaz=True,
774 ))
775 )
776 with warnings.catch_warnings():
777 # Avoid warnings from too-long FITS header keys.
778 warnings.simplefilter("ignore", VerifyWarning)
779 self.assertObservationInfoFromYaml("latiss-future.yaml", dir=self.datadir)
780 for filename, expected in test_data:
781 with self.subTest(f"Testing {filename}"):
782 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
784 # This translation should fail
785 with self.assertRaises(KeyError):
786 self.assertObservationInfoFromYaml("latiss-future-bad.yaml", dir=self.datadir)
788 def test_imsim_translator(self):
789 test_data = (("imsim-bias-lsst_a_3010002_R11_S00.yaml",
790 dict(telescope="Simonyi Survey Telescope",
791 instrument="LSSTCam-imSim",
792 boresight_rotation_coord="sky",
793 dark_time=0.0*u.s,
794 detector_exposure_id=3010002036,
795 detector_group="R11",
796 detector_name="S00",
797 detector_num=36,
798 detector_serial="LCA-11021_RTM-000",
799 exposure_id=3010002,
800 exposure_group="3010002",
801 exposure_time=0.0*u.s,
802 focus_z=0.0*u.mm,
803 group_counter_end=3010002,
804 group_counter_start=3010002,
805 has_simulated_content=True,
806 object="UNKNOWN",
807 observation_counter=0,
808 observation_id="3010002",
809 observation_type="science", # The header is wrong
810 observation_reason="imsim",
811 observing_day=20211231,
812 physical_filter="i",
813 pressure=None,
814 relative_humidity=40.0,
815 science_program="42",
816 temperature=None,
817 visit_id=3010002,
818 wcs_params=dict(max_sep=3000.), # 2022
819 )),
820 ("imsim-lsst_a_204595_R11_S02_i.yaml",
821 dict(telescope="Simonyi Survey Telescope",
822 instrument="LSSTCam-imSim",
823 boresight_rotation_coord="sky",
824 dark_time=30.0*u.s,
825 detector_exposure_id=204595038,
826 detector_group="R11",
827 detector_name="S02",
828 detector_num=38,
829 detector_serial="LCA-11021_RTM-000",
830 exposure_id=204595,
831 exposure_group="204595",
832 exposure_time=30.0*u.s,
833 focus_z=0.0*u.mm,
834 group_counter_end=204595,
835 group_counter_start=204595,
836 has_simulated_content=True,
837 object="UNKNOWN",
838 observation_counter=0,
839 observation_id="204595",
840 observation_type="science", # The header is wrong
841 observation_reason="imsim",
842 observing_day=20221004,
843 physical_filter="i_sim_1.4",
844 pressure=None,
845 relative_humidity=40.0,
846 science_program="204595",
847 temperature=None,
848 visit_id=204595,
849 wcs_params=dict(max_sep=3000.), # 2022
850 )),
851 ("imsim-flats-lsst_a_5000007_R11_S20_i.yaml",
852 dict(telescope="Simonyi Survey Telescope",
853 instrument="LSSTCam-imSim",
854 boresight_rotation_coord="sky",
855 dark_time=30.0*u.s,
856 detector_exposure_id=5000007042,
857 detector_group="R11",
858 detector_name="S20",
859 detector_num=42,
860 detector_serial="LCA-11021_RTM-000",
861 exposure_id=5000007,
862 exposure_group="5000007",
863 exposure_time=30.0*u.s,
864 focus_z=0.0*u.mm,
865 group_counter_end=5000007,
866 group_counter_start=5000007,
867 has_simulated_content=True,
868 object="UNKNOWN",
869 observation_counter=0,
870 observation_id="5000007",
871 observation_type="flat",
872 observation_reason="imsim",
873 observing_day=20220805,
874 physical_filter="i",
875 pressure=None,
876 relative_humidity=40.0,
877 science_program="5000007",
878 temperature=None,
879 visit_id=5000007,
880 wcs_params=dict(max_sep=3000.), # 2022
881 )),
882 ("imsim-dark-lsst_a_4010003_R11_S11.yaml",
883 dict(telescope="Simonyi Survey Telescope",
884 instrument="LSSTCam-imSim",
885 boresight_rotation_coord="sky",
886 dark_time=500.0*u.s,
887 detector_exposure_id=4010003040,
888 detector_group="R11",
889 detector_name="S11",
890 detector_num=40,
891 detector_serial="LCA-11021_RTM-000",
892 exposure_id=4010003,
893 exposure_group="4010003",
894 exposure_time=500.0*u.s,
895 focus_z=0.0*u.mm,
896 group_counter_end=4010003,
897 group_counter_start=4010003,
898 has_simulated_content=True,
899 object="UNKNOWN",
900 observation_counter=0,
901 observation_id="4010003",
902 observation_type="science", # The header is wrong
903 observation_reason="imsim",
904 observing_day=20211231,
905 physical_filter="i",
906 pressure=None,
907 relative_humidity=40.0,
908 science_program="42",
909 temperature=None,
910 visit_id=4010003,
911 wcs_params=dict(max_sep=3000.), # 2022
912 )),
913 )
914 for filename, expected in test_data:
915 with self.subTest(f"Testing {filename}"):
916 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
918 def test_ts3_translator(self):
919 test_data = (("ts3-E2V-CCD250-411_lambda_flat_1000_025_20181115075559.yaml",
920 dict(telescope=None,
921 instrument="LSST-TS3",
922 dark_time=44.631*u.s,
923 detector_exposure_id=201811151255111433,
924 detector_group="R433",
925 detector_name="S00",
926 detector_num=433,
927 detector_serial="E2V-CCD250-411",
928 exposure_id=201811151255111,
929 exposure_group="201811151255111",
930 exposure_time=44.631*u.s,
931 focus_z=0.0*u.mm,
932 group_counter_end=25,
933 group_counter_start=25,
934 has_simulated_content=False,
935 observation_counter=25,
936 observation_id="E2V-CCD250-411_lambda_flat_1000_025_20181115075559",
937 observation_type="flat",
938 observation_reason="lambda",
939 observing_day=20181115,
940 physical_filter="550CutOn",
941 science_program="2018-11-15",
942 visit_id=201811151255111)),
943 ("ts3-ITL-3800C-098_lambda_flat_1000_067_20160722020740.yaml",
944 dict(telescope=None,
945 instrument="LSST-TS3",
946 dark_time=30.611*u.s,
947 detector_exposure_id=201607220607067071,
948 detector_group="R071",
949 detector_name="S00",
950 detector_num=71,
951 detector_serial="ITL-3800C-098",
952 exposure_id=201607220607067,
953 exposure_group="201607220607067",
954 exposure_time=30.611*u.s,
955 focus_z=0.0*u.mm,
956 group_counter_end=67,
957 group_counter_start=67,
958 has_simulated_content=False,
959 observation_counter=67,
960 observation_id="ITL-3800C-098_lambda_flat_1000_067_20160722020740",
961 observation_type="flat",
962 observation_reason="lambda",
963 observing_day=20160721,
964 physical_filter="550CutOn",
965 science_program="2016-07-22",
966 visit_id=201607220607067)),
967 )
968 for filename, expected in test_data:
969 with self.subTest(f"Testing {filename}"):
970 with warnings.catch_warnings():
971 # Avoid warnings from too-long FITS header keys.
972 warnings.simplefilter("ignore", VerifyWarning)
973 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
975 def test_ts8_translator(self):
976 test_data = (("ts8-E2V-CCD250-179_lambda_bias_024_6006D_20180724104156.yaml",
977 dict(telescope=None,
978 instrument="LSST-TS8",
979 dark_time=0.0*u.s,
980 detector_exposure_id=201807241041568067,
981 detector_group="RTM-010",
982 detector_name="S11",
983 detector_num=67,
984 detector_serial="E2V-CCD250-179",
985 exposure_id=201807241041568,
986 exposure_group="201807241041568",
987 exposure_time=0.0*u.s,
988 focus_z=0.0*u.mm,
989 group_counter_end=24,
990 group_counter_start=24,
991 has_simulated_content=False,
992 observation_counter=24,
993 observation_id="E2V-CCD250-179_lambda_bias_024_6006D_20180724104156",
994 observation_type="bias",
995 observation_reason="lambda",
996 observing_day=20180724,
997 physical_filter="y",
998 science_program="6006D",
999 visit_id=201807241041568)),
1000 ("ts8-E2V-CCD250-200-Dev_lambda_flat_0700_6006D_20180724102845.yaml",
1001 dict(telescope=None,
1002 instrument="LSST-TS8",
1003 dark_time=21.913*u.s,
1004 detector_exposure_id=201807241028453065,
1005 detector_group="RTM-010",
1006 detector_name="S02",
1007 detector_num=65,
1008 detector_serial="E2V-CCD250-200",
1009 exposure_id=201807241028453,
1010 exposure_group="201807241028453",
1011 exposure_time=21.913*u.s,
1012 focus_z=0.0*u.mm,
1013 group_counter_end=17,
1014 group_counter_start=17,
1015 has_simulated_content=False,
1016 observation_counter=17,
1017 observation_id="E2V-CCD250-200-Dev_lambda_flat_0700_6006D_20180724102845",
1018 observation_type="flat",
1019 observation_reason="lambda",
1020 observing_day=20180724,
1021 physical_filter="z",
1022 science_program="6006D",
1023 visit_id=201807241028453)),
1024 ("ts8-E2V-CCD250-220_fe55_fe55_094_6288_20171215114006.yaml",
1025 dict(telescope=None,
1026 instrument="LSST-TS8",
1027 dark_time=300.0*u.s,
1028 detector_exposure_id=201712151140062027,
1029 detector_group="RTM-005",
1030 detector_name="S00",
1031 detector_num=27,
1032 detector_serial="E2V-CCD250-220",
1033 exposure_id=201712151140062,
1034 exposure_group="201712151140062",
1035 exposure_time=300.0*u.s,
1036 focus_z=0.0*u.mm,
1037 group_counter_end=94,
1038 group_counter_start=94,
1039 has_simulated_content=False,
1040 observation_counter=94,
1041 observation_id="E2V-CCD250-220_fe55_fe55_094_6288_20171215114006",
1042 observation_type="fe55",
1043 observation_reason="fe55",
1044 observing_day=20171215,
1045 physical_filter="i",
1046 science_program="6288",
1047 visit_id=201712151140062)),
1048 ("ts8-TS_C_20220711_000174_R22_S00.yaml",
1049 dict(telescope=None,
1050 instrument="LSST-TS8",
1051 dark_time=210.315*u.s,
1052 detector_exposure_id=202207111714459018,
1053 detector_group="RTM-004",
1054 detector_name="S00",
1055 detector_num=18,
1056 detector_serial="ITL-3800C-372",
1057 exposure_id=202207111714459,
1058 exposure_group="202207111714459",
1059 exposure_time=210.0*u.s,
1060 focus_z=0.0*u.mm,
1061 group_counter_end=174,
1062 group_counter_start=174,
1063 has_simulated_content=False,
1064 observation_counter=174,
1065 observation_id="TS_C_20220711_000174",
1066 observation_type="spot",
1067 observation_reason="spot_flat",
1068 observing_day=20220711,
1069 physical_filter="unknown",
1070 science_program="7074D",
1071 visit_id=202207111714459)),
1072 ("ts8-TS_C_20230512_000021_R22_S02.yaml",
1073 dict(telescope=None,
1074 instrument="LSST-TS8",
1075 dark_time=15.165*u.s,
1076 detector_exposure_id=202305121917591020,
1077 detector_group="RTM-004",
1078 detector_name="S02",
1079 detector_num=20,
1080 detector_serial="ITL-3800C-380",
1081 exposure_id=202305121917591,
1082 exposure_group="202305121917591",
1083 exposure_time=15.0*u.s,
1084 focus_z=0.0*u.mm,
1085 group_counter_end=21,
1086 group_counter_start=21,
1087 has_simulated_content=False,
1088 observation_counter=21,
1089 observation_id="TS_C_20230512_000021",
1090 observation_type="flat",
1091 observation_reason="sflat_hi",
1092 observing_day=20230512,
1093 physical_filter="HIGH",
1094 science_program="7187D",
1095 visit_id=202305121917591)),
1096 ("ts8-TS_C_20230512_000021_R22_S02-fixed.yaml", # Will not apply header fixups
1097 dict(telescope=None,
1098 instrument="LSST-TS8",
1099 dark_time=15.165*u.s,
1100 detector_exposure_id=202305121917591020,
1101 detector_group="RTM-004",
1102 detector_name="S02",
1103 detector_num=20,
1104 detector_serial="ITL-3800C-380",
1105 exposure_id=202305121917591,
1106 exposure_group="202305121917591",
1107 exposure_time=15.0*u.s,
1108 focus_z=0.0*u.mm,
1109 group_counter_end=21,
1110 group_counter_start=21,
1111 has_simulated_content=False,
1112 observation_counter=21,
1113 observation_id="TS_C_20230512_000021",
1114 observation_type="flat",
1115 observation_reason="sflat_hi",
1116 observing_day=20230512,
1117 physical_filter="HIGH",
1118 science_program="7187D",
1119 visit_id=202305121917591)),
1120 ("ts8-TS_C_20230523_000127_R22_S00.yaml",
1121 dict(telescope=None,
1122 instrument="LSST-TS8",
1123 dark_time=15.16*u.s,
1124 detector_exposure_id=202305231936194018,
1125 detector_group="RTM-004",
1126 detector_name="S00",
1127 detector_num=18,
1128 detector_serial="ITL-3800C-372",
1129 exposure_id=202305231936194,
1130 exposure_group="202305231936194",
1131 exposure_time=15.0*u.s,
1132 focus_z=0.0*u.mm,
1133 group_counter_end=127,
1134 group_counter_start=127,
1135 has_simulated_content=False,
1136 observation_counter=127,
1137 observation_id="TS_C_20230523_000127",
1138 observation_type="flat",
1139 observation_reason="flat",
1140 observing_day=20230523,
1141 physical_filter="unknown",
1142 science_program="7220D",
1143 visit_id=202305231936194)),
1144 ("ts8-TS_C_20230525_000041_R22_S00.yaml",
1145 dict(telescope=None,
1146 instrument="LSST-TS8",
1147 dark_time=30.151*u.s,
1148 detector_exposure_id=3023052500041018,
1149 detector_group="RTM-004",
1150 detector_name="S00",
1151 detector_num=18,
1152 detector_serial="ITL-3800C-372",
1153 exposure_id=3023052500041,
1154 exposure_group="3023052500041",
1155 exposure_time=30.0*u.s,
1156 focus_z=0.0*u.mm,
1157 group_counter_end=41,
1158 group_counter_start=41,
1159 has_simulated_content=False,
1160 observation_counter=41,
1161 observation_id="TS_C_20230525_000041",
1162 observation_type="flat",
1163 observation_reason="flat",
1164 observing_day=20230525,
1165 physical_filter="unknown",
1166 science_program="7227D",
1167 visit_id=3023052500041)),
1168 )
1169 for filename, expected in test_data:
1170 with self.subTest(f"Testing {filename}"):
1171 with warnings.catch_warnings():
1172 # Avoid warnings from too-long FITS header keys.
1173 warnings.simplefilter("ignore", VerifyWarning)
1174 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
1176 def test_ucdcam_translator(self):
1177 test_data = (("UCD-E2V-CCD250-112-04_flat_flat_100_20181205153143.yaml",
1178 dict(telescope=None,
1179 instrument="LSST-UCDCam",
1180 dark_time=0.5*u.s,
1181 detector_exposure_id=201812052331480,
1182 detector_group="R00",
1183 detector_name="S00",
1184 detector_num=0,
1185 detector_serial="E2V-CCD250-112-04",
1186 exposure_id=20181205233148,
1187 exposure_group="20181205233148",
1188 exposure_time=0.5*u.s,
1189 focus_z=0.0*u.mm,
1190 group_counter_end=100,
1191 group_counter_start=100,
1192 has_simulated_content=False,
1193 observation_counter=100,
1194 observation_id="E2V-CCD250-112-04_flat_flat_100_20181205153143",
1195 observation_type="flat",
1196 observation_reason="flat",
1197 observing_day=20181205,
1198 physical_filter="r",
1199 science_program="2018-12-05",
1200 visit_id=20181205233148)),
1201 ("UCD-ITL-3800C-002_flat_flat_100_20180530080354.yaml",
1202 dict(telescope=None,
1203 instrument="LSST-UCDCam",
1204 dark_time=0.5*u.s,
1205 detector_exposure_id=201805301503552,
1206 detector_group="R02",
1207 detector_name="S00",
1208 detector_num=2,
1209 detector_serial="ITL-3800C-002",
1210 exposure_id=20180530150355,
1211 exposure_group="20180530150355",
1212 exposure_time=0.5*u.s,
1213 focus_z=0.0*u.mm,
1214 group_counter_end=100,
1215 group_counter_start=100,
1216 has_simulated_content=False,
1217 observation_counter=100,
1218 observation_id="ITL-3800C-002_flat_flat_100_20180530080354",
1219 observation_type="flat",
1220 observation_reason="flat",
1221 observing_day=20180530,
1222 physical_filter="r",
1223 science_program="2018-05-30",
1224 visit_id=20180530150355)),
1225 )
1226 for filename, expected in test_data:
1227 with self.subTest(f"Testing {filename}"):
1228 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
1230 def test_checker(self):
1231 filename = "latiss-future.yaml"
1232 from astro_metadata_translator.tests import read_test_file
1233 from astro_metadata_translator import ObservationInfo
1234 header = read_test_file(filename, self.datadir)
1235 obsInfo = ObservationInfo(header, pedantic=True, filename=filename)
1236 self.assertTrue(obsInfo)
1238 def test_fix_header(self):
1239 from astro_metadata_translator import fix_header
1240 from astro_metadata_translator.tests import read_test_file
1241 # Test that header fix up is working
1242 # Not all headers are used in metadata translation
1243 test_data = (
1244 ("latiss-AT_O_20210212_000006.yaml",
1245 dict(RASTART=260.024385071917)),
1246 ("latiss-AT_O_20210210_000011.yaml",
1247 dict(RASTART=355.41750341182313)),
1248 )
1249 for filename, expected in test_data:
1250 with self.subTest(f"Testing {filename}"):
1251 header = read_test_file(filename, dir=self.datadir)
1252 modified = fix_header(header)
1253 self.assertTrue(modified)
1254 for k, v in expected.items():
1255 self.assertEqual(header[k], v, f"Testing {k} in {filename}")
1258if __name__ == "__main__": 1258 ↛ 1259line 1258 didn't jump to line 1259, because the condition on line 1258 was never true
1259 unittest.main()