Coverage for tests/test_translator.py: 17%
92 statements
« prev ^ index » next coverage.py v7.2.5, created at 2023-05-09 10:54 +0000
« prev ^ index » next coverage.py v7.2.5, created at 2023-05-09 10:54 +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 )
1073 for filename, expected in test_data:
1074 with self.subTest(f"Testing {filename}"):
1075 with warnings.catch_warnings():
1076 # Avoid warnings from too-long FITS header keys.
1077 warnings.simplefilter("ignore", VerifyWarning)
1078 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
1080 def test_ucdcam_translator(self):
1081 test_data = (("UCD-E2V-CCD250-112-04_flat_flat_100_20181205153143.yaml",
1082 dict(telescope=None,
1083 instrument="LSST-UCDCam",
1084 dark_time=0.5*u.s,
1085 detector_exposure_id=201812052331480,
1086 detector_group="R00",
1087 detector_name="S00",
1088 detector_num=0,
1089 detector_serial="E2V-CCD250-112-04",
1090 exposure_id=20181205233148,
1091 exposure_group="20181205233148",
1092 exposure_time=0.5*u.s,
1093 focus_z=0.0*u.mm,
1094 group_counter_end=100,
1095 group_counter_start=100,
1096 has_simulated_content=False,
1097 observation_counter=100,
1098 observation_id="E2V-CCD250-112-04_flat_flat_100_20181205153143",
1099 observation_type="flat",
1100 observation_reason="flat",
1101 observing_day=20181205,
1102 physical_filter="r",
1103 science_program="2018-12-05",
1104 visit_id=20181205233148)),
1105 ("UCD-ITL-3800C-002_flat_flat_100_20180530080354.yaml",
1106 dict(telescope=None,
1107 instrument="LSST-UCDCam",
1108 dark_time=0.5*u.s,
1109 detector_exposure_id=201805301503552,
1110 detector_group="R02",
1111 detector_name="S00",
1112 detector_num=2,
1113 detector_serial="ITL-3800C-002",
1114 exposure_id=20180530150355,
1115 exposure_group="20180530150355",
1116 exposure_time=0.5*u.s,
1117 focus_z=0.0*u.mm,
1118 group_counter_end=100,
1119 group_counter_start=100,
1120 has_simulated_content=False,
1121 observation_counter=100,
1122 observation_id="ITL-3800C-002_flat_flat_100_20180530080354",
1123 observation_type="flat",
1124 observation_reason="flat",
1125 observing_day=20180530,
1126 physical_filter="r",
1127 science_program="2018-05-30",
1128 visit_id=20180530150355)),
1129 )
1130 for filename, expected in test_data:
1131 with self.subTest(f"Testing {filename}"):
1132 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
1134 def test_checker(self):
1135 filename = "latiss-future.yaml"
1136 from astro_metadata_translator.tests import read_test_file
1137 from astro_metadata_translator import ObservationInfo
1138 header = read_test_file(filename, self.datadir)
1139 obsInfo = ObservationInfo(header, pedantic=True, filename=filename)
1140 self.assertTrue(obsInfo)
1142 def test_fix_header(self):
1143 from astro_metadata_translator import fix_header
1144 from astro_metadata_translator.tests import read_test_file
1145 # Test that header fix up is working
1146 # Not all headers are used in metadata translation
1147 test_data = (
1148 ("latiss-AT_O_20210212_000006.yaml",
1149 dict(RASTART=260.024385071917)),
1150 ("latiss-AT_O_20210210_000011.yaml",
1151 dict(RASTART=355.41750341182313)),
1152 )
1153 for filename, expected in test_data:
1154 with self.subTest(f"Testing {filename}"):
1155 header = read_test_file(filename, dir=self.datadir)
1156 modified = fix_header(header)
1157 self.assertTrue(modified)
1158 for k, v in expected.items():
1159 self.assertEqual(header[k], v, f"Testing {k} in {filename}")
1162if __name__ == "__main__": 1162 ↛ 1163line 1162 didn't jump to line 1163, because the condition on line 1162 was never true
1163 unittest.main()