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