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