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