Coverage for tests/test_translator.py: 99%
108 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-29 03:09 -0700
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-29 03:09 -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 # 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_O_20260315_000051_R01_S01.yaml",
45 dict(telescope="Simonyi Survey Telescope",
46 instrument="LSSTCam",
47 boresight_rotation_coord="unknown",
48 boresight_rotation_angle=89.30082602885373*u.deg,
49 can_see_sky=False,
50 dark_time=5.01371*u.s,
51 detector_exposure_id=0xb8e803301,
52 detector_group="R01",
53 detector_name="S01",
54 detector_num=1,
55 detector_serial="ITL-3800C-226",
56 exposure_id=2026031500051,
57 exposure_group="2026-03-15T22:50:34.110",
58 exposure_time=5.0*u.s,
59 exposure_time_requested=5.0*u.s,
60 focus_z=-2.1340826845674403*u.mm,
61 group_counter_end=51,
62 group_counter_start=51,
63 has_simulated_content=False,
64 object="azel_target",
65 observation_counter=51,
66 observation_id="MC_O_20260315_000051",
67 observation_type="dark",
68 observation_reason="tmacheckout",
69 observing_day=20260315,
70 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
71 physical_filter="i_39",
72 pressure=74150.0*u.Pa,
73 relative_humidity=58.849998474121094,
74 science_program="BLOCK-T250",
75 temperature=11.800000190734863*u.deg_C,
76 visit_id=3535446341100000)),
77 ("lsstCam-MC_C_20190319_000001_R10_S02.yaml",
78 dict(telescope="Simonyi Survey Telescope",
79 instrument="LSSTCam",
80 boresight_rotation_coord="unknown",
81 can_see_sky=False,
82 dark_time=0.0*u.s,
83 detector_exposure_id=0x269200011d,
84 detector_group="R10",
85 detector_name="S02",
86 detector_num=29,
87 detector_serial="ITL-3800C-041",
88 exposure_id=3019031900001,
89 exposure_group="3019031900001",
90 exposure_time=0.0*u.s,
91 exposure_time_requested=0.0*u.s,
92 focus_z=0.0*u.mm,
93 group_counter_end=1,
94 group_counter_start=1,
95 has_simulated_content=False,
96 object="UNKNOWN",
97 observation_counter=1,
98 observation_id="MC_C_20190319_000001",
99 observation_type="bias",
100 observation_reason="bias",
101 observing_day=20190319,
102 observing_day_offset=astropy.time.TimeDelta(25200.0, scale="tai", format="sec"),
103 physical_filter="unknown",
104 pressure=None,
105 relative_humidity=None,
106 science_program="unknown",
107 temperature=None,
108 visit_id=3019031900001)),
109 ("lsstCam-MC_C_20190319_000001_R22_S21.yaml",
110 dict(telescope="Simonyi Survey Telescope",
111 instrument="LSSTCam",
112 boresight_rotation_coord="unknown",
113 can_see_sky=False,
114 dark_time=0.0*u.s,
115 detector_exposure_id=0x2692000161,
116 detector_group="R22",
117 detector_name="S21",
118 detector_num=97,
119 detector_serial="ITL-3800C-139",
120 exposure_id=3019031900001,
121 exposure_group="3019031900001",
122 exposure_time=0.0*u.s,
123 exposure_time_requested=0.0*u.s,
124 focus_z=0.0*u.mm,
125 group_counter_end=1,
126 group_counter_start=1,
127 has_simulated_content=False,
128 object="UNKNOWN",
129 observation_counter=1,
130 observation_id="MC_C_20190319_000001",
131 observation_type="bias",
132 observation_reason="bias",
133 observing_day=20190319,
134 observing_day_offset=astropy.time.TimeDelta(25200.0, scale="tai", format="sec"),
135 physical_filter="unknown",
136 pressure=None,
137 relative_humidity=None,
138 science_program="unknown",
139 temperature=None,
140 visit_id=3019031900001)),
141 ("lsstCam-MC_C_20190322_000002_R10_S22.yaml",
142 dict(telescope="Simonyi Survey Telescope",
143 instrument="LSSTCam",
144 boresight_rotation_coord="unknown",
145 can_see_sky=False,
146 dark_time=1.0*u.s,
147 detector_exposure_id=0x2693800223,
148 detector_group="R10",
149 detector_name="S22",
150 detector_num=35,
151 detector_serial="ITL-3800C-103",
152 exposure_id=3019032200002,
153 exposure_group="3019032200002",
154 exposure_time=1.0*u.s,
155 exposure_time_requested=1.0*u.s,
156 focus_z=0.0*u.mm,
157 group_counter_end=2,
158 group_counter_start=2,
159 has_simulated_content=False,
160 object="UNKNOWN",
161 observation_counter=2,
162 observation_id="MC_C_20190322_000002",
163 observation_type="flat",
164 observation_reason="flat",
165 observing_day=20190322,
166 observing_day_offset=astropy.time.TimeDelta(25200.0, scale="tai", format="sec"),
167 physical_filter="SDSSi~ND_OD0.5",
168 pressure=None,
169 relative_humidity=None,
170 science_program="6489D",
171 temperature=None,
172 visit_id=3019032200002)),
173 ("lsstCam-MC_C_20190406_000643_R10_S00.yaml",
174 dict(telescope="Simonyi Survey Telescope",
175 instrument="LSSTCam",
176 boresight_rotation_coord="unknown",
177 can_see_sky=False,
178 dark_time=1007.422*u.s,
179 detector_exposure_id=0x269b02831b,
180 detector_group="R10",
181 detector_name="S00",
182 detector_num=27,
183 detector_serial="ITL-3800C-145",
184 exposure_id=3019040600643,
185 exposure_group="3019040600643",
186 exposure_time=999.99*u.s,
187 exposure_time_requested=999.99*u.s,
188 focus_z=0.0*u.mm,
189 group_counter_end=643,
190 group_counter_start=643,
191 has_simulated_content=False,
192 object="UNKNOWN",
193 observation_counter=643,
194 observation_id="MC_C_20190406_000643",
195 observation_type="flat",
196 observation_reason="lambda",
197 observing_day=20190406,
198 observing_day_offset=astropy.time.TimeDelta(25200.0, scale="tai", format="sec"),
199 physical_filter="950nm",
200 pressure=None,
201 relative_humidity=None,
202 science_program="6549D",
203 temperature=None,
204 visit_id=3019040600643)),
205 ("lsstCam-faked-future-ccs.yaml", # Old CCS observation with date in future for exp_id
206 dict(telescope="Simonyi Survey Telescope",
207 instrument="LSSTCam",
208 boresight_rotation_coord="unknown",
209 can_see_sky=False,
210 dark_time=0.0*u.s,
211 detector_exposure_id=0xdb480011d,
212 detector_group="R10",
213 detector_name="S02",
214 detector_num=29,
215 detector_serial="ITL-3800C-041",
216 exposure_id=2029031900001,
217 exposure_group="2029031900001",
218 exposure_time=0.0*u.s,
219 exposure_time_requested=0.0*u.s,
220 focus_z=0.0*u.mm,
221 group_counter_end=1,
222 group_counter_start=1,
223 has_simulated_content=False,
224 object="UNKNOWN",
225 observation_counter=1,
226 observation_id="MC_C_20190319_000001",
227 observation_type="bias",
228 observation_reason="bias",
229 observing_day=20290319,
230 observing_day_offset=astropy.time.TimeDelta(25200.0, scale="tai", format="sec"),
231 physical_filter="unknown",
232 pressure=None,
233 relative_humidity=None,
234 science_program="unknown",
235 temperature=None,
236 visit_id=2029031900001)),
237 ("lsstCam-MC_C_20231107_000078_R01_S01.json",
238 dict(telescope="Simonyi Survey Telescope",
239 instrument="LSSTCam",
240 boresight_rotation_coord="unknown",
241 can_see_sky=False,
242 dark_time=0.092*u.s,
243 detector_exposure_id=0x9e1004e01,
244 detector_group="R01",
245 detector_name="S01",
246 detector_num=1,
247 detector_serial="ITL-3800C-226",
248 exposure_id=2023110700078,
249 exposure_group="2023110700078",
250 exposure_time=0.0*u.s,
251 exposure_time_requested=0.0*u.s,
252 focus_z=0.0*u.mm,
253 group_counter_end=78,
254 group_counter_start=78,
255 has_simulated_content=False,
256 object="UNKNOWN",
257 observation_counter=78,
258 observation_id="MC_C_20231107_000078",
259 observation_type="bias",
260 observation_reason="bot_persistence",
261 observing_day=20231107,
262 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
263 physical_filter="ph_5",
264 pressure=None,
265 relative_humidity=None,
266 science_program="13518",
267 temperature=None,
268 visit_id=2023110700078)),
269 ("lsstCam-MC_O_20250415_000060_R01_S01.yaml",
270 dict(telescope="Simonyi Survey Telescope",
271 instrument="LSSTCam",
272 boresight_rotation_coord="sky",
273 boresight_rotation_angle=-43.62470328866432*u.deg,
274 can_see_sky=True,
275 dark_time=15.9548*u.s,
276 detector_exposure_id=0xae7803c01,
277 detector_group="R01",
278 detector_name="S01",
279 detector_num=1,
280 detector_serial="ITL-3800C-226",
281 exposure_id=2025041500060,
282 exposure_group="2025-04-16T00:53:10.143",
283 exposure_time=15.000998497009277*u.s,
284 exposure_time_requested=15.0*u.s,
285 focus_z=-2.856403126427015*u.mm,
286 group_counter_end=60,
287 group_counter_start=60,
288 has_simulated_content=False,
289 object="Vela_SNR",
290 observation_counter=60,
291 observation_id="MC_O_20250415_000060",
292 observation_type="acq",
293 observation_reason="first_focus",
294 observing_day=20250415,
295 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
296 physical_filter="i_39",
297 pressure=74390.0*u.Pa,
298 relative_humidity=33.400001525878906,
299 science_program="BLOCK-T434",
300 temperature=11.024999618530273*u.deg_C,
301 visit_id=3246943901430000)),
302 ("lsstCam-MC_O_20250415_000228_R10_S20.yaml",
303 dict(telescope="Simonyi Survey Telescope",
304 instrument="LSSTCam",
305 boresight_rotation_coord="sky",
306 boresight_rotation_angle=28.988651816521724*u.deg,
307 can_see_sky=True,
308 dark_time=30.9422*u.s,
309 detector_exposure_id=0xae780e421,
310 detector_group="R10",
311 detector_name="S20",
312 detector_num=33,
313 detector_serial="ITL-3800C-377",
314 exposure_id=2025041500228,
315 exposure_group="2025-04-16T07:03:14.565#1",
316 exposure_time=30.001051664352417*u.s,
317 exposure_time_requested=30.0*u.s,
318 focus_z=-2.8329331104974114*u.mm,
319 group_counter_end=228,
320 group_counter_start=228,
321 has_simulated_content=False,
322 object="UNKNOWN",
323 observation_counter=228,
324 observation_id="MC_O_20250415_000228",
325 observation_type="acq",
326 observation_reason="infocus_clt-001",
327 observing_day=20250415,
328 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
329 physical_filter="i_39",
330 pressure=74225.0*u.Pa,
331 relative_humidity=25.475000381469727,
332 science_program="BLOCK-T417",
333 temperature=10.350000381469727*u.deg_C,
334 visit_id=3247165945650001)),
335 ("lsstCam-MC_O_20250422_000250_R01_S01.yaml",
336 dict(telescope="Simonyi Survey Telescope",
337 instrument="LSSTCam",
338 boresight_rotation_coord="sky",
339 boresight_rotation_angle=138.6291409919304*u.deg,
340 can_see_sky=True,
341 dark_time=15.9482*u.s,
342 detector_exposure_id=0xaeb00fa01,
343 detector_group="R01",
344 detector_name="S01",
345 detector_num=1,
346 detector_serial="ITL-3800C-226",
347 exposure_id=2025042200250,
348 exposure_group="2025-04-23T03:52:21.287",
349 exposure_time=15.000065088272095*u.s,
350 exposure_time_requested=15.0*u.s,
351 focus_z=-4.0921929561356105*u.mm,
352 group_counter_end=250,
353 group_counter_start=250,
354 has_simulated_content=False,
355 object="Rubin_SV_216_-17",
356 observation_counter=250,
357 observation_id="MC_O_20250422_000250",
358 observation_type="acq",
359 observation_reason="infocus_clt-001",
360 observing_day=20250422,
361 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
362 physical_filter="r_57",
363 pressure=74255.0*u.Pa,
364 relative_humidity=29.475000381469727,
365 science_program="BLOCK-T417",
366 temperature=11.274999618530273*u.deg_C,
367 visit_id=3253099412870000)),
368 ("lsstCam-MC_C_20250425_000031_R01_S01.yaml",
369 dict(telescope="Simonyi Survey Telescope",
370 instrument="LSSTCam",
371 boresight_rotation_coord="unknown",
372 boresight_rotation_angle=0.0*u.deg,
373 can_see_sky=None,
374 dark_time=1469.57*u.s,
375 detector_exposure_id=0xaec801f01,
376 detector_group="R01",
377 detector_name="S01",
378 detector_num=1,
379 detector_serial="ITL-3800C-226",
380 exposure_id=2025042500031,
381 exposure_group="2025042500031",
382 exposure_time=2.767*u.s,
383 exposure_time_requested=2.767*u.s,
384 focus_z=0.0*u.mm,
385 group_counter_end=31,
386 group_counter_start=31,
387 has_simulated_content=False,
388 object="UNKNOWN",
389 observation_counter=31,
390 observation_id="MC_C_20250425_000031",
391 observation_type="unknown",
392 observation_reason="unknown",
393 observing_day=20250425,
394 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
395 physical_filter="unknown",
396 pressure=None,
397 relative_humidity=None,
398 science_program="unknown",
399 temperature=None,
400 visit_id=2025042500031)),
401 ("lsstCam-MC_O_20250609_000578_R01_S01.yaml",
402 dict(telescope="Simonyi Survey Telescope",
403 instrument="LSSTCam",
404 boresight_rotation_coord="sky",
405 boresight_rotation_angle=131.35723576573005*u.deg,
406 can_see_sky=True,
407 dark_time=30.9487*u.s,
408 detector_exposure_id=0xb03024201,
409 detector_group="R01",
410 detector_name="S01",
411 detector_num=1,
412 detector_serial="ITL-3800C-226",
413 exposure_id=2025060900578,
414 exposure_group="2025-06-10T07:31:26.692",
415 exposure_time=30.000904321670532*u.s,
416 exposure_time_requested=30.0*u.s,
417 focus_z=-3.200530845386125*u.mm,
418 group_counter_end=578,
419 group_counter_start=578,
420 has_simulated_content=False,
421 object="Rubin_SV_320_-15",
422 observation_counter=578,
423 observation_id="MC_O_20250609_000578",
424 observation_type="science",
425 observation_reason="field_survey_science",
426 observing_day=20250609,
427 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
428 physical_filter="z_20",
429 pressure=74210.0*u.Pa,
430 relative_humidity=11.175000190734863,
431 science_program="BLOCK-365",
432 temperature=9.699999809265137*u.deg_C,
433 visit_id=3294702866920000)),
434 ("lsstCam-MC_O_20251121_000156_R44_SW0.json",
435 dict(telescope="Simonyi Survey Telescope",
436 instrument="LSSTCam",
437 boresight_rotation_coord="sky",
438 boresight_rotation_angle=290.31522740370315*u.deg,
439 can_see_sky=True,
440 dark_time=30.9318*u.s,
441 detector_exposure_id=0xb55809ccb,
442 detector_group="R44",
443 detector_name="SW0",
444 detector_num=203,
445 detector_serial="ITL-4400B-025",
446 exposure_id=2025112100156,
447 exposure_group="2025-11-22T03:25:16.951",
448 exposure_time=30.00100302696228*u.s,
449 exposure_time_requested=30.0*u.s,
450 focus_z=-1.903796731126306*u.mm,
451 group_counter_end=156,
452 group_counter_start=156,
453 has_simulated_content=False,
454 object="lowdust GW_case_large_1",
455 observation_counter=156,
456 observation_id="MC_O_20251121_000156",
457 observation_type="science",
458 observation_reason="too_gw_case_large_1_i3",
459 observing_day=20251121,
460 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
461 physical_filter="i_39",
462 pressure=74225.0*u.Pa,
463 relative_humidity=29.75,
464 science_program="BLOCK-407",
465 temperature=12.350000381469727*u.deg_C,
466 wcs_params=dict(max_sep=2.0),
467 visit_id=3437115169510000)),
468 )
469 for filename, expected in test_data:
470 with self.subTest(f"Testing {filename}"):
471 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
473 def test_phoSimLsstCam_translator(self):
474 test_data = (("lsstCam-MC_H_20100217_000032_R22_S00.yaml",
475 dict(telescope="Simonyi Survey Telescope",
476 instrument="LSSTCam",
477 boresight_rotation_coord="sky",
478 can_see_sky=True,
479 dark_time=15.0*u.s,
480 detector_exposure_id=0x401780205a,
481 detector_group="R22",
482 detector_name="S00",
483 detector_num=90,
484 detector_serial="E2V-CCD250-369",
485 detector_unique_name="R22_S00",
486 exposure_group="4010021700032",
487 exposure_id=4010021700032,
488 exposure_time=15.0*u.s,
489 exposure_time_requested=15.0*u.s,
490 focus_z=0.0*u.mm,
491 group_counter_end=32,
492 group_counter_start=32,
493 has_simulated_content=True,
494 object="UNKNOWN",
495 observation_counter=32,
496 observation_id="MC_H_20100217_000032",
497 observation_reason="phosim",
498 observation_type="science",
499 observing_day=20100217,
500 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
501 physical_filter="g",
502 pressure=None,
503 relative_humidity=None,
504 science_program="9006001",
505 temperature=None,
506 visit_id=4010021700032)),
507 )
508 for filename, expected in test_data:
509 with self.subTest(f"Testing {filename}"):
510 self.assertObservationInfoFromYaml(filename, dir=self.datadir,
511 check_wcs=False, **expected)
513 def test_lsstCamSim_translator(self):
514 test_data = (("lsstCamSim-MC_S_20240321_000720_R22_S11.yaml",
515 dict(telescope="Simonyi Survey Telescope",
516 instrument="LSSTCamSim",
517 boresight_rotation_coord="sky",
518 boresight_rotation_angle=81.12326734428959 * u.deg,
519 can_see_sky=True,
520 dark_time=30.0*u.s,
521 detector_exposure_id=730756993118,
522 detector_group="R22",
523 detector_name="S11",
524 detector_num=94,
525 detector_serial="E2V-CCD250-382",
526 detector_unique_name="R22_S11",
527 exposure_group="7024032100720",
528 exposure_id=7024032100720,
529 exposure_time=30.0*u.s,
530 exposure_time_requested=30.0*u.s,
531 focus_z=0.0*u.mm,
532 group_counter_end=720,
533 group_counter_start=720,
534 has_simulated_content=True,
535 object="UNKNOWN",
536 observation_counter=720,
537 observation_id="MC_S_20240321_000720",
538 observation_reason="survey",
539 observation_type="science",
540 observing_day=20240321,
541 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
542 physical_filter="r_57",
543 pressure=None,
544 relative_humidity=None,
545 science_program="720",
546 temperature=None,
547 visit_id=7024032100720)),
548 )
549 for filename, expected in test_data:
550 with self.subTest(f"Testing {filename}"):
551 self.assertObservationInfoFromYaml(filename, dir=self.datadir,
552 check_wcs=False, **expected)
554 def test_comCam_translator(self):
555 test_data = (("comCam-CC_C_20190530_000001_R22_S00.yaml",
556 dict(telescope="Simonyi Survey Telescope",
557 instrument="LSSTComCam",
558 boresight_rotation_coord="unknown",
559 can_see_sky=False,
560 dark_time=0.398*u.s,
561 detector_exposure_id=0x26b6000100,
562 detector_group="R22",
563 detector_name="S00",
564 detector_num=0,
565 detector_serial="ITL-3800C-229",
566 exposure_id=3019053000001,
567 exposure_group="3019053000001",
568 exposure_time=0.0*u.s,
569 exposure_time_requested=0.0*u.s,
570 focus_z=0.0*u.mm,
571 group_counter_end=1,
572 group_counter_start=1,
573 has_simulated_content=False,
574 object="UNKNOWN",
575 observation_counter=1,
576 observation_id="CC_C_20190530_000001",
577 observation_type="bias",
578 observation_reason="bias",
579 observing_day=20190530,
580 observing_day_offset=astropy.time.TimeDelta(25200.0, scale="tai", format="sec"),
581 physical_filter="unknown",
582 pressure=None,
583 relative_humidity=None,
584 science_program="unknown",
585 temperature=None,
586 visit_id=3019053000001)),
587 ("comCam-CC_C_20190526_000223_R22_S01.yaml",
588 dict(telescope="Simonyi Survey Telescope",
589 instrument="LSSTComCam",
590 boresight_rotation_coord="unknown",
591 can_see_sky=False,
592 dark_time=0.034*u.s,
593 detector_exposure_id=0x26b400df01,
594 detector_group="R22",
595 detector_name="S01",
596 detector_num=1,
597 detector_serial="ITL-3800C-251",
598 exposure_id=3019052600223,
599 exposure_group="3019052600223",
600 exposure_time=0.0*u.s,
601 exposure_time_requested=0.0*u.s,
602 focus_z=0.0*u.mm,
603 group_counter_end=223,
604 group_counter_start=223,
605 has_simulated_content=False,
606 object="UNKNOWN",
607 observation_counter=223,
608 observation_id="CC_C_20190526_000223",
609 observation_type="bias",
610 observation_reason="dark",
611 observing_day=20190526,
612 observing_day_offset=astropy.time.TimeDelta(25200.0, scale="tai", format="sec"),
613 physical_filter="unknown",
614 pressure=None,
615 relative_humidity=None,
616 science_program="unknown",
617 temperature=None,
618 visit_id=3019052600223)),
619 ("comCam-CC_O_20240806_000006_R22_S00.yaml",
620 dict(telescope="Simonyi Survey Telescope",
621 instrument="LSSTComCam",
622 boresight_rotation_coord="unknown",
623 can_see_sky=False,
624 wcs_params=dict(max_sep=2.5),
625 dark_time=0.660616*u.s,
626 detector_exposure_id=44719670784,
627 detector_group="R22",
628 detector_name="S00",
629 detector_num=0,
630 detector_serial="ITL-3800C-229",
631 exposure_id=2024080600006,
632 exposure_group="2024-08-06T15:35:02.269",
633 exposure_time=0.2*u.s,
634 exposure_time_requested=0.2*u.s,
635 focus_z=0.0*u.mm,
636 group_counter_end=6,
637 group_counter_start=6,
638 has_simulated_content=True,
639 object="UNKNOWN",
640 observation_counter=6,
641 observation_id="CC_O_20240806_000006",
642 observation_type="flat",
643 observation_reason="flat",
644 observing_day=20240806,
645 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
646 physical_filter="g_01",
647 pressure=74060.0 * u.Pa,
648 relative_humidity=47.400001525878906,
649 science_program="unknown",
650 temperature=1.3250000476837158 * u.deg_C,
651 visit_id=3028881022690000)),
652 ("comCam-CC_O_20241108_000266_R22_S00.yaml",
653 dict(telescope="Simonyi Survey Telescope",
654 instrument="LSSTComCam",
655 boresight_rotation_coord="sky",
656 can_see_sky=True,
657 boresight_rotation_angle=102.79926387330579 * u.deg,
658 wcs_params=dict(max_sep=2.5),
659 dark_time=30.4306*u.s,
660 detector_exposure_id=45508266496,
661 detector_group="R22",
662 detector_name="S00",
663 detector_num=0,
664 detector_serial="ITL-3800C-229",
665 exposure_id=2024110800266,
666 exposure_group="2024-11-09T06:33:55.311",
667 exposure_time=30.0*u.s,
668 exposure_time_requested=30.0*u.s,
669 focus_z=2.0585230644024572*u.mm,
670 group_counter_end=266,
671 group_counter_start=266,
672 has_simulated_content=False,
673 object="slew_icrs",
674 observation_counter=266,
675 observation_id="CC_O_20241108_000266",
676 observation_type="science",
677 observation_reason="science",
678 observing_day=20241108,
679 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
680 physical_filter="g_01",
681 pressure=74120.0 * u.Pa,
682 relative_humidity=22.299999237060547,
683 science_program="PP-SURVEY",
684 temperature=13.725000381469727 * u.deg_C,
685 visit_id=3110636353110000)),
686 )
687 for filename, expected in test_data:
688 with self.subTest(f"Testing {filename}"):
689 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
691 def test_comCamSim_translator(self):
692 test_data = (("comCamSim-IM_P_20240117_000000_R22_S00.yaml",
693 dict(telescope="Simonyi Survey Telescope",
694 instrument="LSSTComCamSim",
695 boresight_rotation_coord="unknown",
696 can_see_sky=False,
697 dark_time=0.0*u.s,
698 detector_group="R22",
699 detector_name="S00",
700 detector_num=0,
701 detector_serial="ITL-3800C-229",
702 exposure_id=5024011700000,
703 exposure_group="5024011700000",
704 exposure_time=0.0*u.s,
705 focus_z=0.0 * u.mm,
706 group_counter_end=5024011700000,
707 group_counter_start=5024011700000,
708 has_simulated_content=True,
709 object="UNKNOWN",
710 observation_counter=0,
711 observation_id="IM_P_20240117_000000",
712 observation_type="bias",
713 observation_reason="calibration",
714 observing_day=20240117,
715 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
716 physical_filter="r_03",
717 pressure=None,
718 relative_humidity=None,
719 science_program="calibration",
720 temperature=None,
721 visit_id=5024011700000,
722 )),
723 ("comCamSim-CC_S_20240321_000093_R22_S22.yaml",
724 dict(telescope="Simonyi Survey Telescope",
725 instrument="LSSTComCamSim",
726 boresight_rotation_coord="sky",
727 can_see_sky=True,
728 dark_time=33.0546 * u.s,
729 detector_group="R22",
730 detector_name="S22",
731 detector_num=8,
732 detector_serial="ITL-3800C-206",
733 exposure_id=2026032100093,
734 exposure_group="2024-03-22T03:41:54.994",
735 exposure_time=30.0 * u.s,
736 exposure_time_requested=30.0 * u.s,
737 focus_z=0.0 * u.mm,
738 group_counter_end=93,
739 group_counter_start=93,
740 has_simulated_content=True,
741 object="TEST",
742 observation_counter=93,
743 observation_id="CC_S_20260321_000093",
744 observation_type="science",
745 observation_reason="object",
746 observing_day=20260321,
747 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
748 physical_filter="r_03",
749 pressure=None,
750 relative_humidity=None,
751 science_program="unknown",
752 temperature=None,
753 visit_id=2910085149940000,
754 )),
755 )
756 for filename, expected in test_data:
757 with self.subTest(f"Testing {filename}"):
758 self.assertObservationInfoFromYaml(
759 filename, dir=self.datadir, check_wcs=False, **expected
760 )
762 def test_phoSimComCam_translator(self):
763 test_data = (("comCam-CC_H_20100217_006001_R22_S00.yaml",
764 dict(telescope="Simonyi Survey Telescope",
765 instrument="LSSTComCam",
766 boresight_rotation_coord="sky",
767 can_see_sky=True,
768 dark_time=1.0*u.s,
769 detector_exposure_id=0x4017977100,
770 detector_group="R22",
771 detector_name="S00",
772 detector_num=0,
773 detector_serial="ITL-3800C-229",
774 exposure_id=4010021706001,
775 exposure_group="4010021706001",
776 exposure_time=1.0*u.s,
777 focus_z=0.0*u.mm,
778 group_counter_end=6001,
779 group_counter_start=6001,
780 has_simulated_content=True,
781 object="UNKNOWN",
782 observation_counter=6001,
783 observation_id="CC_H_20100217_006001",
784 observation_type="science",
785 observation_reason="test",
786 observing_day=20100217,
787 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
788 physical_filter="g_01",
789 pressure=None,
790 relative_humidity=None,
791 science_program="9006001",
792 temperature=None,
793 visit_id=4010021706001)),
794 )
795 for filename, expected in test_data:
796 with self.subTest(f"Testing {filename}"):
797 self.assertObservationInfoFromYaml(filename, dir=self.datadir,
798 check_wcs=False, **expected)
800 def test_phosim_translator(self):
801 test_data = (("phosim-lsst_a_204595_f3_R11_S02_E000.yaml",
802 dict(telescope="Simonyi Survey Telescope",
803 instrument="LSSTCam-PhoSim",
804 boresight_rotation_coord="sky",
805 can_see_sky=True,
806 dark_time=30.0*u.s,
807 detector_exposure_id=204595038,
808 detector_group="R11",
809 detector_name="S02",
810 detector_num=38,
811 detector_serial="R11_S02",
812 exposure_id=204595,
813 exposure_group="204595",
814 exposure_time=30.0*u.s,
815 focus_z=0.0*u.mm,
816 group_counter_end=204595,
817 group_counter_start=204595,
818 has_simulated_content=True,
819 object="UNKNOWN",
820 observation_counter=0,
821 observation_id="204595",
822 observation_type="science",
823 observation_reason="phosim",
824 observing_day=20221005,
825 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"),
826 physical_filter="i",
827 pressure=520.0*cds.mmHg,
828 relative_humidity=40.0,
829 science_program="204595",
830 temperature=20.0*u.deg_C,
831 visit_id=204595,
832 wcs_params=dict(max_sep=3000.))), # 2022
833 )
834 for filename, expected in test_data:
835 with self.subTest(f"Testing {filename}"):
836 with warnings.catch_warnings():
837 # Avoid warnings from too-long FITS header keys.
838 warnings.simplefilter("ignore", VerifyWarning)
839 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
841 def test_latiss_translator(self):
842 test_data = (("latiss-2018-09-20-05700065-det000.yaml",
843 dict(telescope="Rubin Auxiliary Telescope",
844 instrument="LATISS",
845 boresight_rotation_coord="unknown",
846 can_see_sky=None,
847 dark_time=27.0*u.s,
848 detector_exposure_id=0x2638004100,
849 detector_group="RXX",
850 detector_name="S00",
851 detector_num=0,
852 detector_serial="ITL-3800C-098",
853 exposure_id=3018092000065,
854 exposure_group="3018092000065",
855 exposure_time=27.0*u.s,
856 exposure_time_requested=27.0*u.s,
857 focus_z=0.0*u.mm,
858 group_counter_end=65,
859 group_counter_start=65,
860 has_simulated_content=False,
861 object="UNKNOWN",
862 observation_counter=65,
863 observation_id="AT_C_20180920_000065",
864 observation_type="unknown",
865 observation_reason="unknown",
866 observing_day=20180920,
867 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
868 physical_filter="unknown~unknown",
869 pressure=None,
870 relative_humidity=None,
871 science_program="unknown",
872 temperature=None,
873 visit_id=3018092000065,
874 )),
875 ("latiss-AT_O_20190306_000014.yaml",
876 dict(telescope="Rubin Auxiliary Telescope",
877 instrument="LATISS",
878 boresight_rotation_coord="unknown",
879 can_see_sky=None,
880 dark_time=1.06*u.s,
881 detector_exposure_id=0x68b800e00,
882 detector_group="RXX",
883 detector_name="S00",
884 detector_num=0,
885 detector_serial="ITL-3800C-098",
886 exposure_id=2019030600014,
887 exposure_group="2019030600014",
888 exposure_time=1.06*u.s,
889 exposure_time_requested=1.06*u.s,
890 focus_z=0.0*u.mm,
891 group_counter_end=14,
892 group_counter_start=14,
893 has_simulated_content=False,
894 object="UNKNOWN",
895 observation_counter=14,
896 observation_id="AT_O_20190306_000014",
897 observation_type="unknown",
898 observation_reason="unknown",
899 observing_day=20190306,
900 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
901 physical_filter="unknown~unknown",
902 pressure=None,
903 relative_humidity=None,
904 science_program="unknown",
905 temperature=None,
906 visit_id=2019030600014,
907 )),
908 ("latiss-AT_O_20190329_000022-ats-wfs_ccd.yaml",
909 dict(telescope="Rubin Auxiliary Telescope",
910 instrument="LATISS",
911 boresight_rotation_coord="unknown",
912 can_see_sky=False,
913 dark_time=0.0*u.s,
914 detector_exposure_id=0x697001600,
915 detector_group="RXX",
916 detector_name="S00",
917 detector_num=0,
918 detector_serial="ITL-3800C-098",
919 exposure_id=2019032900022,
920 exposure_group="2019032900022",
921 exposure_time=0.0*u.s,
922 exposure_time_requested=0.0*u.s,
923 focus_z=0.0*u.mm,
924 group_counter_end=22,
925 group_counter_start=22,
926 has_simulated_content=False,
927 object="UNKNOWN",
928 observation_counter=22,
929 observation_id="AT_O_20190329_000022",
930 observation_type="bias",
931 observation_reason="unknown",
932 observing_day=20190329,
933 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
934 physical_filter="unknown~unknown",
935 pressure=None,
936 relative_humidity=None,
937 science_program="unknown",
938 temperature=None,
939 visit_id=2019032900022,
940 )),
941 ("latiss-future.yaml",
942 dict(telescope="Rubin Auxiliary Telescope",
943 instrument="LATISS",
944 boresight_rotation_coord="unknown",
945 can_see_sky=False,
946 dark_time=0.0*u.s,
947 detector_exposure_id=0x74e001600,
948 detector_group="RXX",
949 detector_name="S00",
950 detector_num=0,
951 detector_serial="ITL-3800C-068",
952 exposure_id=2020032900022,
953 exposure_group="2020-03-29T16:55:00.012#24",
954 exposure_time=0.0*u.s,
955 exposure_time_requested=0.0*u.s,
956 focus_z=0.0*u.mm,
957 group_counter_end=22,
958 group_counter_start=22,
959 has_simulated_content=False,
960 object="UNKNOWN",
961 observation_counter=22,
962 observation_id="AT_X_20200329_000022",
963 observation_type="bias",
964 observation_reason="unknown",
965 observing_day=20200329,
966 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
967 physical_filter="unknown~unknown",
968 pressure=None,
969 relative_humidity=None,
970 science_program="unknown",
971 temperature=None,
972 visit_id=1654305000120024,
973 )),
974 ("latiss-AT_O_20190915_000037.yaml",
975 dict(telescope="Rubin Auxiliary Telescope",
976 instrument="LATISS",
977 boresight_rotation_coord="unknown",
978 can_see_sky=False,
979 dark_time=0.0*u.s,
980 detector_exposure_id=0x6ec002500,
981 detector_group="RXX",
982 detector_name="S00",
983 detector_num=0,
984 detector_serial="ITL-3800C-068",
985 exposure_id=2019091500037,
986 exposure_group="bias_0027_0100",
987 exposure_time=0.0*u.s,
988 exposure_time_requested=0.0*u.s,
989 focus_z=0.0*u.mm,
990 group_counter_end=37,
991 group_counter_start=37,
992 has_simulated_content=False,
993 object="UNKNOWN",
994 observation_counter=37,
995 observation_id="AT_O_20190915_000037",
996 observation_type="bias",
997 observation_reason="unknown",
998 observing_day=20190915,
999 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1000 physical_filter="unknown~unknown",
1001 pressure=None,
1002 relative_humidity=None,
1003 science_program="unknown",
1004 temperature=None,
1005 visit_id=3575576933793566714,
1006 )),
1007 ("latiss-AT_O_20191031_000004.yaml",
1008 dict(telescope="Rubin Auxiliary Telescope",
1009 instrument="LATISS",
1010 boresight_rotation_coord="unknown",
1011 can_see_sky=None,
1012 dark_time=3.0*u.s,
1013 detector_exposure_id=0x703000400,
1014 detector_group="RXX",
1015 detector_name="S00",
1016 detector_num=0,
1017 detector_serial="ITL-3800C-068",
1018 exposure_id=2019103100004,
1019 exposure_group="TEST01",
1020 exposure_time=3.0*u.s,
1021 exposure_time_requested=3.0*u.s,
1022 focus_z=0.0*u.mm,
1023 group_counter_end=4,
1024 group_counter_start=4,
1025 has_simulated_content=False,
1026 object="UNKNOWN",
1027 observation_counter=4,
1028 observation_id="AT_O_20191031_000004",
1029 observation_type="engtest",
1030 observation_reason="unknown",
1031 observing_day=20191031,
1032 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1033 physical_filter="unknown~unknown",
1034 pressure=None,
1035 relative_humidity=None,
1036 science_program="unknown",
1037 temperature=None,
1038 visit_id=1123819875881954006,
1039 )),
1040 ("latiss-AT_O_20191104_000003.yaml",
1041 dict(telescope="Rubin Auxiliary Telescope",
1042 instrument="LATISS",
1043 boresight_rotation_coord="unknown",
1044 can_see_sky=None,
1045 dark_time=3.0*u.s,
1046 detector_exposure_id=0x705000300,
1047 detector_group="RXX",
1048 detector_name="S00",
1049 detector_num=0,
1050 detector_serial="ITL-3800C-068",
1051 exposure_id=2019110400003,
1052 exposure_group="TEST01",
1053 exposure_time=3.0*u.s,
1054 exposure_time_requested=3.0*u.s,
1055 focus_z=0.0*u.mm,
1056 group_counter_end=3,
1057 group_counter_start=3,
1058 has_simulated_content=False,
1059 object="UNKNOWN",
1060 observation_counter=3,
1061 observation_id="AT_O_20191104_000003",
1062 observation_type="engtest",
1063 observation_reason="unknown",
1064 observing_day=20191104,
1065 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1066 physical_filter="unknown~unknown",
1067 pressure=None,
1068 relative_humidity=None,
1069 science_program="unknown",
1070 temperature=None,
1071 visit_id=1123819875881954006,
1072 )),
1073 ("latiss-AT_O_20191113_000061.yaml",
1074 dict(telescope="Rubin Auxiliary Telescope",
1075 instrument="LATISS",
1076 boresight_rotation_coord="unknown",
1077 can_see_sky=None,
1078 dark_time=0.5*u.s,
1079 detector_exposure_id=0x709803d00,
1080 detector_group="RXX",
1081 detector_name="S00",
1082 detector_num=0,
1083 detector_serial="ITL-3800C-068",
1084 exposure_id=2019111300061,
1085 exposure_group="wave,Focus,455,32.0PH=5um",
1086 exposure_time=0.5*u.s,
1087 exposure_time_requested=0.5*u.s,
1088 focus_z=0.0*u.mm,
1089 group_counter_end=61,
1090 group_counter_start=61,
1091 has_simulated_content=False,
1092 object="UNKNOWN",
1093 observation_counter=61,
1094 observation_id="AT_O_20191113_000061",
1095 observation_type="engtest",
1096 observation_reason="unknown",
1097 observing_day=20191113,
1098 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1099 physical_filter="empty~ronchi90lpmm",
1100 pressure=None,
1101 relative_humidity=None,
1102 science_program="unknown",
1103 temperature=None,
1104 visit_id=1892608703001301325,
1105 )),
1106 ("latiss-AT_O_20191118_000011.yaml",
1107 dict(telescope="Rubin Auxiliary Telescope",
1108 instrument="LATISS",
1109 boresight_rotation_coord="unknown",
1110 can_see_sky=False,
1111 dark_time=15.0*u.s,
1112 detector_exposure_id=0x70c000b00,
1113 detector_group="RXX",
1114 detector_name="S00",
1115 detector_num=0,
1116 detector_serial="ITL-3800C-068",
1117 exposure_id=2019111800011,
1118 exposure_group="dark_0002_0005",
1119 exposure_time=15.0*u.s,
1120 exposure_time_requested=15.0*u.s,
1121 focus_z=0.0*u.mm,
1122 group_counter_end=11,
1123 group_counter_start=11,
1124 has_simulated_content=False,
1125 object="UNKNOWN",
1126 observation_counter=11,
1127 observation_id="AT_O_20191118_000011",
1128 observation_type="dark",
1129 observation_reason="unknown",
1130 observing_day=20191118,
1131 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1132 physical_filter="diffuser~ronchi170lpmm",
1133 pressure=None,
1134 relative_humidity=None,
1135 science_program="unknown",
1136 temperature=None,
1137 visit_id=6861884254113212214,
1138 )),
1139 ("latiss-AT_O_20200121_000045.yaml",
1140 dict(telescope="Rubin Auxiliary Telescope",
1141 instrument="LATISS",
1142 boresight_rotation_coord="sky",
1143 can_see_sky=None,
1144 dark_time=100.0*u.s,
1145 detector_exposure_id=0x72c002d00,
1146 detector_group="RXX",
1147 detector_name="S00",
1148 detector_num=0,
1149 detector_serial="ITL-3800C-068",
1150 exposure_id=2020012100045,
1151 exposure_group="test",
1152 exposure_time=100.0*u.s,
1153 exposure_time_requested=100.0*u.s,
1154 focus_z=0.560002659202*u.mm,
1155 group_counter_end=45,
1156 group_counter_start=45,
1157 has_simulated_content=False,
1158 object="UNKNOWN",
1159 observation_counter=45,
1160 observation_id="AT_O_20200121_000045",
1161 observation_type="engtest",
1162 observation_reason="unknown",
1163 observing_day=20200121,
1164 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1165 physical_filter="blank_bk7_wg05~empty",
1166 pressure=None,
1167 relative_humidity=None,
1168 science_program="unknown",
1169 temperature=None,
1170 visit_id=4702443654717948604,
1171 check_altaz=True,
1172 )),
1173 ("latiss-AT_O_20200128_000379.yaml",
1174 dict(telescope="Rubin Auxiliary Telescope",
1175 instrument="LATISS",
1176 boresight_rotation_coord="sky",
1177 can_see_sky=True,
1178 dark_time=5.0*u.s,
1179 detector_exposure_id=0x72f817b00,
1180 detector_group="RXX",
1181 detector_name="S00",
1182 detector_num=0,
1183 detector_serial="ITL-3800C-068",
1184 exposure_id=2020012800379,
1185 exposure_group="2020-01-29T07:25:52.166",
1186 exposure_time=5.0*u.s,
1187 exposure_time_requested=5.0*u.s,
1188 focus_z=0.35416568455*u.mm,
1189 group_counter_end=379,
1190 group_counter_start=379,
1191 has_simulated_content=False,
1192 object="HD107696",
1193 observation_counter=379,
1194 observation_id="AT_O_20200128_000379",
1195 observation_type="science",
1196 observation_reason="science",
1197 observing_day=20200128,
1198 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1199 physical_filter="KPNO_406_828nm~empty",
1200 pressure=None,
1201 relative_humidity=None,
1202 science_program="unknown",
1203 temperature=None,
1204 visit_id=1602123521660000,
1205 # We have some timing discrepancies in the headers
1206 # that make it hard to match the demand RA/DEC to
1207 # the recorded AZ/EL/TIME.
1208 wcs_params=dict(max_sep=7.),
1209 )),
1210 ("latiss-AT_O_20220405_000348.yaml",
1211 dict(telescope="Rubin Auxiliary Telescope",
1212 instrument="LATISS",
1213 boresight_rotation_coord="sky",
1214 can_see_sky=True,
1215 dark_time=30.3176279067993*u.s,
1216 detector_exposure_id=0x8be815c00,
1217 detector_group="RXX",
1218 detector_name="S00",
1219 detector_num=0,
1220 detector_serial="ITL-3800C-068",
1221 exposure_id=2022040500348,
1222 exposure_group="2022-04-06T02:58:07.181",
1223 exposure_time=30.0*u.s,
1224 exposure_time_requested=30.0*u.s,
1225 focus_z=0.0697081759572029*u.mm,
1226 group_counter_end=349,
1227 group_counter_start=348,
1228 has_simulated_content=False,
1229 object="LATISS_E6A_00000040",
1230 observation_counter=348,
1231 observation_id="AT_O_20220405_000348",
1232 observation_type="science",
1233 observation_reason="object",
1234 observing_day=20220405,
1235 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1236 physical_filter="SDSSr~empty",
1237 pressure=744.3*u.hPa,
1238 relative_humidity=19.0,
1239 science_program="LATISS_E6A",
1240 temperature=12.3*u.deg_C,
1241 visit_id=2291434871810000,
1242 # We have some timing discrepancies in the headers
1243 # that make it hard to match the demand RA/DEC to
1244 # the recorded AZ/EL/TIME.
1245 wcs_params=dict(max_sep=7.),
1246 )),
1247 ("latiss-AT_O_20220405_000349.yaml",
1248 dict(telescope="Rubin Auxiliary Telescope",
1249 instrument="LATISS",
1250 boresight_rotation_coord="sky",
1251 can_see_sky=True,
1252 dark_time=30.2387452125549*u.s,
1253 detector_exposure_id=0x8be815d00,
1254 detector_group="RXX",
1255 detector_name="S00",
1256 detector_num=0,
1257 detector_serial="ITL-3800C-068",
1258 exposure_id=2022040500349,
1259 exposure_group="2022-04-06T02:58:07.181",
1260 exposure_time=30.0*u.s,
1261 exposure_time_requested=30.0*u.s,
1262 focus_z=0.0697081759572029*u.mm,
1263 group_counter_end=349,
1264 group_counter_start=348,
1265 has_simulated_content=False,
1266 object="LATISS_E6A_00000040",
1267 observation_counter=349,
1268 observation_id="AT_O_20220405_000349",
1269 observation_type="science",
1270 observation_reason="object",
1271 observing_day=20220405,
1272 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1273 physical_filter="SDSSr~empty",
1274 pressure=744.3*u.hPa,
1275 relative_humidity=19.0,
1276 science_program="LATISS_E6A",
1277 temperature=12.3*u.deg_C,
1278 visit_id=2291434871810000,
1279 # We have some timing discrepancies in the headers
1280 # that make it hard to match the demand RA/DEC to
1281 # the recorded AZ/EL/TIME.
1282 wcs_params=dict(max_sep=7.),
1283 )),
1284 ("latiss-AT_C_20220426_000004_R00_S00.yaml",
1285 dict(telescope="Rubin Auxiliary Telescope",
1286 instrument="LATISS",
1287 boresight_rotation_coord="unknown",
1288 can_see_sky=None,
1289 dark_time=537.406*u.s,
1290 detector_exposure_id=0x28c9000400,
1291 detector_group="RXX",
1292 detector_name="S00",
1293 detector_num=0,
1294 detector_serial="ITL-3800C-068",
1295 exposure_id=3022042600004,
1296 exposure_group="3022042600004",
1297 exposure_time=-1.0*u.s,
1298 exposure_time_requested=-1.0*u.s,
1299 focus_z=0.0*u.mm,
1300 group_counter_end=4,
1301 group_counter_start=4,
1302 has_simulated_content=False,
1303 object="UNKNOWN",
1304 observation_counter=4,
1305 observation_id="AT_C_20220426_000004",
1306 observation_type="unknown",
1307 observation_reason="unknown",
1308 observing_day=20220426,
1309 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1310 physical_filter="unknown~unknown",
1311 pressure=None,
1312 relative_humidity=None,
1313 science_program="unknown",
1314 temperature=None,
1315 visit_id=3022042600004,
1316 )),
1317 ("latiss-AT_O_20230321_000053.yaml",
1318 dict(telescope="Rubin Auxiliary Telescope",
1319 instrument="LATISS",
1320 boresight_rotation_coord="unknown",
1321 can_see_sky=False,
1322 dark_time=30.0126*u.s,
1323 detector_exposure_id=0x96d803500,
1324 detector_group="RXX",
1325 detector_name="S00",
1326 detector_num=0,
1327 detector_serial="ITL-3800C-068",
1328 exposure_id=2023032100053,
1329 exposure_group="2023-03-21T16:11:07.633",
1330 exposure_time=30.0*u.s,
1331 exposure_time_requested=30.0*u.s,
1332 focus_z=0.0*u.mm,
1333 group_counter_end=53,
1334 group_counter_start=53,
1335 has_simulated_content=False,
1336 object="slew_icrs",
1337 observation_counter=53,
1338 observation_id="AT_O_20230321_000053",
1339 observation_type="dark",
1340 observation_reason="dark",
1341 observing_day=20230321,
1342 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1343 physical_filter="empty~empty",
1344 pressure=None,
1345 relative_humidity=None,
1346 science_program="unknown",
1347 temperature=None,
1348 visit_id=2593446676330000,
1349 check_altaz=True,
1350 )),
1351 ("latiss-AT_O_20230705_000379_R00_S00.json",
1352 dict(telescope="Rubin Auxiliary Telescope",
1353 instrument="LATISS",
1354 boresight_rotation_coord="sky",
1355 can_see_sky=True,
1356 dark_time=30.2418*u.s,
1357 detector_exposure_id=0x9a2817b00,
1358 detector_group="RXX",
1359 detector_name="S00",
1360 detector_num=0,
1361 detector_serial="ITL-3800C-068",
1362 exposure_id=2023070500379,
1363 exposure_group="2023-07-06T04:53:15.609",
1364 exposure_time=30.0*u.s,
1365 exposure_time_requested=30.0*u.s,
1366 focus_z=-0.008921561762690544*u.mm,
1367 group_counter_end=379,
1368 group_counter_start=379,
1369 has_simulated_content=False,
1370 object="HD165763",
1371 observation_counter=379,
1372 observation_id="AT_O_20230705_000379",
1373 observation_type="science",
1374 observation_reason="sitcom-857",
1375 observing_day=20230705,
1376 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1377 physical_filter="empty~holo4_003",
1378 pressure=777.80*u.hPa,
1379 relative_humidity=15.149999618530273,
1380 science_program="BLOCK-59",
1381 temperature=5.775000095367432*u.deg_C,
1382 visit_id=2685487956090000,
1383 check_altaz=True,
1384 )),
1385 ("latiss-AT_O_20240624_000106_R00_S00.yaml",
1386 dict(telescope="Rubin Auxiliary Telescope",
1387 instrument="LATISS",
1388 boresight_rotation_coord="sky",
1389 can_see_sky=True,
1390 dark_time=30.2407*u.s,
1391 detector_exposure_id=44358986240,
1392 detector_group="RXX",
1393 detector_name="S00",
1394 detector_num=0,
1395 detector_serial="ITL-3800C-068",
1396 exposure_id=2024062400106,
1397 exposure_group="2024-06-25T01:26:31.895#1",
1398 exposure_time=30.0*u.s,
1399 exposure_time_requested=30.0*u.s,
1400 focus_z=0.742219865322113*u.mm,
1401 group_counter_end=106,
1402 group_counter_start=106,
1403 has_simulated_content=False,
1404 object="HD 131586",
1405 observation_counter=106,
1406 observation_id="AT_O_20240624_000106",
1407 observation_type="cwfs",
1408 observation_reason="intra",
1409 observing_day=20240624,
1410 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1411 physical_filter="SDSSr_65mm~empty",
1412 pressure=73880*u.Pa,
1413 relative_humidity=40.650001525878906,
1414 science_program="cwfs",
1415 temperature=1.5750000476837158*u.deg_C,
1416 visit_id=2992083918950001,
1417 check_altaz=True,
1418 )),
1419 ("latiss-AT_O_20240624_000106_R00_S00-patched.yaml",
1420 dict(telescope="Rubin Auxiliary Telescope",
1421 instrument="LATISS",
1422 boresight_rotation_coord="sky",
1423 can_see_sky=False,
1424 dark_time=30.2407*u.s,
1425 detector_exposure_id=44358986240,
1426 detector_group="RXX",
1427 detector_name="S00",
1428 detector_num=0,
1429 detector_serial="ITL-3800C-068",
1430 exposure_id=2024062400106,
1431 exposure_group="2024-06-25T01:26:31.895#1",
1432 exposure_time=30.0*u.s,
1433 exposure_time_requested=30.0*u.s,
1434 focus_z=0.742219865322113*u.mm,
1435 group_counter_end=106,
1436 group_counter_start=106,
1437 has_simulated_content=False,
1438 object="HD 131586",
1439 observation_counter=106,
1440 observation_id="AT_O_20240624_000106",
1441 observation_type="science",
1442 observation_reason="intra",
1443 observing_day=20240624,
1444 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1445 physical_filter="SDSSr_65mm~empty",
1446 pressure=73880*u.Pa,
1447 relative_humidity=40.650001525878906,
1448 science_program="cwfs",
1449 temperature=1.5750000476837158*u.deg_C,
1450 visit_id=2992083918950001,
1451 check_altaz=True,
1452 )),
1453 ("latiss-AT_O_20240624_000169_R00_S00.yaml",
1454 dict(telescope="Rubin Auxiliary Telescope",
1455 instrument="LATISS",
1456 boresight_rotation_coord="unknown",
1457 can_see_sky=False,
1458 dark_time=30.0096*u.s,
1459 detector_exposure_id=44359002368,
1460 detector_group="RXX",
1461 detector_name="S00",
1462 detector_num=0,
1463 detector_serial="ITL-3800C-068",
1464 exposure_id=2024062400169,
1465 exposure_group="2024-06-25T07:10:40.297",
1466 exposure_time=30.0*u.s,
1467 exposure_time_requested=30.0*u.s,
1468 focus_z=0.0*u.mm,
1469 group_counter_end=169,
1470 group_counter_start=169,
1471 has_simulated_content=False,
1472 object="FlatField position",
1473 observation_counter=169,
1474 observation_id="AT_O_20240624_000169",
1475 observation_type="dark",
1476 observation_reason="dark",
1477 observing_day=20240624,
1478 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1479 physical_filter="SDSSr_65mm~empty",
1480 pressure=73760*u.Pa,
1481 relative_humidity=44.42499923706055,
1482 science_program="unknown",
1483 temperature=0.02500000037252903*u.deg_C,
1484 visit_id=2992290402970000,
1485 check_altaz=True,
1486 )),
1487 )
1488 with warnings.catch_warnings():
1489 # Avoid warnings from too-long FITS header keys.
1490 warnings.simplefilter("ignore", VerifyWarning)
1491 self.assertObservationInfoFromYaml("latiss-future.yaml", dir=self.datadir)
1492 for filename, expected in test_data:
1493 with self.subTest(f"Testing {filename}"):
1494 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
1496 # This translation should fail
1497 with self.assertRaises(KeyError):
1498 self.assertObservationInfoFromYaml("latiss-future-bad.yaml", dir=self.datadir)
1500 def test_imsim_translator(self):
1501 test_data = (("imsim-bias-lsst_a_3010002_R11_S00.yaml",
1502 dict(telescope="Simonyi Survey Telescope",
1503 instrument="LSSTCam-imSim",
1504 boresight_rotation_coord="sky",
1505 can_see_sky=True,
1506 dark_time=0.0*u.s,
1507 detector_exposure_id=3010002036,
1508 detector_group="R11",
1509 detector_name="S00",
1510 detector_num=36,
1511 detector_serial="LCA-11021_RTM-000",
1512 exposure_id=3010002,
1513 exposure_group="3010002",
1514 exposure_time=0.0*u.s,
1515 focus_z=0.0*u.mm,
1516 group_counter_end=3010002,
1517 group_counter_start=3010002,
1518 has_simulated_content=True,
1519 object="UNKNOWN",
1520 observation_counter=0,
1521 observation_id="3010002",
1522 observation_type="science", # The header is wrong
1523 observation_reason="imsim",
1524 observing_day=20220101,
1525 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"),
1526 physical_filter="i",
1527 pressure=None,
1528 relative_humidity=40.0,
1529 science_program="42",
1530 temperature=None,
1531 visit_id=3010002,
1532 wcs_params=dict(max_sep=3000.), # 2022
1533 )),
1534 ("imsim-lsst_a_204595_R11_S02_i.yaml",
1535 dict(telescope="Simonyi Survey Telescope",
1536 instrument="LSSTCam-imSim",
1537 boresight_rotation_coord="sky",
1538 can_see_sky=True,
1539 dark_time=30.0*u.s,
1540 detector_exposure_id=204595038,
1541 detector_group="R11",
1542 detector_name="S02",
1543 detector_num=38,
1544 detector_serial="LCA-11021_RTM-000",
1545 exposure_id=204595,
1546 exposure_group="204595",
1547 exposure_time=30.0*u.s,
1548 exposure_time_requested=30.0*u.s,
1549 focus_z=0.0*u.mm,
1550 group_counter_end=204595,
1551 group_counter_start=204595,
1552 has_simulated_content=True,
1553 object="UNKNOWN",
1554 observation_counter=0,
1555 observation_id="204595",
1556 observation_type="science", # The header is wrong
1557 observation_reason="imsim",
1558 observing_day=20221005,
1559 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"),
1560 physical_filter="i_sim_1.4",
1561 pressure=None,
1562 relative_humidity=40.0,
1563 science_program="204595",
1564 temperature=None,
1565 visit_id=204595,
1566 wcs_params=dict(max_sep=3000.), # 2022
1567 )),
1568 ("imsim-flats-lsst_a_5000007_R11_S20_i.yaml",
1569 dict(telescope="Simonyi Survey Telescope",
1570 instrument="LSSTCam-imSim",
1571 boresight_rotation_coord="sky",
1572 can_see_sky=False,
1573 dark_time=30.0*u.s,
1574 detector_exposure_id=5000007042,
1575 detector_group="R11",
1576 detector_name="S20",
1577 detector_num=42,
1578 detector_serial="LCA-11021_RTM-000",
1579 exposure_id=5000007,
1580 exposure_group="5000007",
1581 exposure_time=30.0*u.s,
1582 focus_z=0.0*u.mm,
1583 group_counter_end=5000007,
1584 group_counter_start=5000007,
1585 has_simulated_content=True,
1586 object="UNKNOWN",
1587 observation_counter=0,
1588 observation_id="5000007",
1589 observation_type="flat",
1590 observation_reason="imsim",
1591 observing_day=20220806,
1592 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"),
1593 physical_filter="i",
1594 pressure=None,
1595 relative_humidity=40.0,
1596 science_program="5000007",
1597 temperature=None,
1598 visit_id=5000007,
1599 )),
1600 ("imsim-dark-lsst_a_4010003_R11_S11.yaml",
1601 dict(telescope="Simonyi Survey Telescope",
1602 instrument="LSSTCam-imSim",
1603 boresight_rotation_coord="sky",
1604 can_see_sky=True,
1605 dark_time=500.0*u.s,
1606 detector_exposure_id=4010003040,
1607 detector_group="R11",
1608 detector_name="S11",
1609 detector_num=40,
1610 detector_serial="LCA-11021_RTM-000",
1611 exposure_id=4010003,
1612 exposure_group="4010003",
1613 exposure_time=500.0*u.s,
1614 focus_z=0.0*u.mm,
1615 group_counter_end=4010003,
1616 group_counter_start=4010003,
1617 has_simulated_content=True,
1618 object="UNKNOWN",
1619 observation_counter=0,
1620 observation_id="4010003",
1621 observation_type="science", # The header is wrong
1622 observation_reason="imsim",
1623 observing_day=20220101,
1624 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"),
1625 physical_filter="i",
1626 pressure=None,
1627 relative_humidity=40.0,
1628 science_program="42",
1629 temperature=None,
1630 visit_id=4010003,
1631 wcs_params=dict(max_sep=3000.), # 2022
1632 )),
1633 )
1634 for filename, expected in test_data:
1635 with self.subTest(f"Testing {filename}"):
1636 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
1638 def test_ts3_translator(self):
1639 test_data = (("ts3-E2V-CCD250-411_lambda_flat_1000_025_20181115075559.yaml",
1640 dict(telescope=None,
1641 instrument="LSST-TS3",
1642 can_see_sky=False,
1643 dark_time=44.631*u.s,
1644 detector_exposure_id=201811151255111433,
1645 detector_group="R433",
1646 detector_name="S00",
1647 detector_num=433,
1648 detector_serial="E2V-CCD250-411",
1649 exposure_id=201811151255111,
1650 exposure_group="201811151255111",
1651 exposure_time=44.631*u.s,
1652 exposure_time_requested=44.631*u.s,
1653 focus_z=0.0*u.mm,
1654 group_counter_end=25,
1655 group_counter_start=25,
1656 has_simulated_content=False,
1657 observation_counter=25,
1658 observation_id="E2V-CCD250-411_lambda_flat_1000_025_20181115075559",
1659 observation_type="flat",
1660 observation_reason="lambda",
1661 observing_day=20181115,
1662 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1663 physical_filter="550CutOn",
1664 science_program="2018-11-15",
1665 visit_id=201811151255111)),
1666 ("ts3-ITL-3800C-098_lambda_flat_1000_067_20160722020740.yaml",
1667 dict(telescope=None,
1668 instrument="LSST-TS3",
1669 can_see_sky=False,
1670 dark_time=30.611*u.s,
1671 detector_exposure_id=201607220607067071,
1672 detector_group="R071",
1673 detector_name="S00",
1674 detector_num=71,
1675 detector_serial="ITL-3800C-098",
1676 exposure_id=201607220607067,
1677 exposure_group="201607220607067",
1678 exposure_time=30.611*u.s,
1679 focus_z=0.0*u.mm,
1680 group_counter_end=67,
1681 group_counter_start=67,
1682 has_simulated_content=False,
1683 observation_counter=67,
1684 observation_id="ITL-3800C-098_lambda_flat_1000_067_20160722020740",
1685 observation_type="flat",
1686 observation_reason="lambda",
1687 observing_day=20160721,
1688 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1689 physical_filter="550CutOn",
1690 science_program="2016-07-22",
1691 visit_id=201607220607067)),
1692 )
1693 for filename, expected in test_data:
1694 with self.subTest(f"Testing {filename}"):
1695 with warnings.catch_warnings():
1696 # Avoid warnings from too-long FITS header keys.
1697 warnings.simplefilter("ignore", VerifyWarning)
1698 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
1700 def test_ts8_translator(self):
1701 test_data = (("ts8-E2V-CCD250-179_lambda_bias_024_6006D_20180724104156.yaml",
1702 dict(telescope=None,
1703 instrument="LSST-TS8",
1704 can_see_sky=False,
1705 dark_time=0.0*u.s,
1706 detector_exposure_id=201807241041568067,
1707 detector_group="RTM-010",
1708 detector_name="S11",
1709 detector_num=67,
1710 detector_serial="E2V-CCD250-179",
1711 exposure_id=201807241041568,
1712 exposure_group="201807241041568",
1713 exposure_time=0.0*u.s,
1714 focus_z=0.0*u.mm,
1715 group_counter_end=24,
1716 group_counter_start=24,
1717 has_simulated_content=False,
1718 observation_counter=24,
1719 observation_id="E2V-CCD250-179_lambda_bias_024_6006D_20180724104156",
1720 observation_type="bias",
1721 observation_reason="lambda",
1722 observing_day=20180724,
1723 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1724 physical_filter="y",
1725 science_program="6006D",
1726 visit_id=201807241041568)),
1727 ("ts8-E2V-CCD250-200-Dev_lambda_flat_0700_6006D_20180724102845.yaml",
1728 dict(telescope=None,
1729 instrument="LSST-TS8",
1730 can_see_sky=False,
1731 dark_time=21.913*u.s,
1732 detector_exposure_id=201807241028453065,
1733 detector_group="RTM-010",
1734 detector_name="S02",
1735 detector_num=65,
1736 detector_serial="E2V-CCD250-200",
1737 exposure_id=201807241028453,
1738 exposure_group="201807241028453",
1739 exposure_time=21.913*u.s,
1740 focus_z=0.0*u.mm,
1741 group_counter_end=17,
1742 group_counter_start=17,
1743 has_simulated_content=False,
1744 observation_counter=17,
1745 observation_id="E2V-CCD250-200-Dev_lambda_flat_0700_6006D_20180724102845",
1746 observation_type="flat",
1747 observation_reason="lambda",
1748 observing_day=20180724,
1749 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1750 physical_filter="z",
1751 science_program="6006D",
1752 visit_id=201807241028453)),
1753 ("ts8-E2V-CCD250-220_fe55_fe55_094_6288_20171215114006.yaml",
1754 dict(telescope=None,
1755 instrument="LSST-TS8",
1756 can_see_sky=False,
1757 dark_time=300.0*u.s,
1758 detector_exposure_id=201712151140062027,
1759 detector_group="RTM-005",
1760 detector_name="S00",
1761 detector_num=27,
1762 detector_serial="E2V-CCD250-220",
1763 exposure_id=201712151140062,
1764 exposure_group="201712151140062",
1765 exposure_time=300.0*u.s,
1766 exposure_time_requested=300.0*u.s,
1767 focus_z=0.0*u.mm,
1768 group_counter_end=94,
1769 group_counter_start=94,
1770 has_simulated_content=False,
1771 observation_counter=94,
1772 observation_id="E2V-CCD250-220_fe55_fe55_094_6288_20171215114006",
1773 observation_type="fe55",
1774 observation_reason="fe55",
1775 observing_day=20171215,
1776 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1777 physical_filter="i",
1778 science_program="6288",
1779 visit_id=201712151140062)),
1780 ("ts8-TS_C_20220711_000174_R22_S00.yaml",
1781 dict(telescope=None,
1782 instrument="LSST-TS8",
1783 can_see_sky=False,
1784 dark_time=210.315*u.s,
1785 detector_exposure_id=202207111714459018,
1786 detector_group="RTM-004",
1787 detector_name="S00",
1788 detector_num=18,
1789 detector_serial="ITL-3800C-372",
1790 exposure_id=202207111714459,
1791 exposure_group="202207111714459",
1792 exposure_time=210.0*u.s,
1793 focus_z=0.0*u.mm,
1794 group_counter_end=174,
1795 group_counter_start=174,
1796 has_simulated_content=False,
1797 observation_counter=174,
1798 observation_id="TS_C_20220711_000174",
1799 observation_type="spot",
1800 observation_reason="spot_flat",
1801 observing_day=20220711,
1802 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1803 physical_filter="unknown",
1804 science_program="7074D",
1805 visit_id=202207111714459)),
1806 ("ts8-TS_C_20230512_000021_R22_S02.yaml",
1807 dict(telescope=None,
1808 instrument="LSST-TS8",
1809 can_see_sky=False,
1810 dark_time=15.165*u.s,
1811 detector_exposure_id=202305121917591020,
1812 detector_group="RTM-004",
1813 detector_name="S02",
1814 detector_num=20,
1815 detector_serial="ITL-3800C-380",
1816 exposure_id=202305121917591,
1817 exposure_group="202305121917591",
1818 exposure_time=15.0*u.s,
1819 focus_z=0.0*u.mm,
1820 group_counter_end=21,
1821 group_counter_start=21,
1822 has_simulated_content=False,
1823 observation_counter=21,
1824 observation_id="TS_C_20230512_000021",
1825 observation_type="flat",
1826 observation_reason="sflat_hi",
1827 observing_day=20230512,
1828 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1829 physical_filter="HIGH",
1830 science_program="7187D",
1831 visit_id=202305121917591)),
1832 ("ts8-TS_C_20230512_000021_R22_S02-fixed.yaml", # Will not apply header fixups
1833 dict(telescope=None,
1834 instrument="LSST-TS8",
1835 can_see_sky=False,
1836 dark_time=15.165*u.s,
1837 detector_exposure_id=202305121917591020,
1838 detector_group="RTM-004",
1839 detector_name="S02",
1840 detector_num=20,
1841 detector_serial="ITL-3800C-380",
1842 exposure_id=202305121917591,
1843 exposure_group="202305121917591",
1844 exposure_time=15.0*u.s,
1845 focus_z=0.0*u.mm,
1846 group_counter_end=21,
1847 group_counter_start=21,
1848 has_simulated_content=False,
1849 observation_counter=21,
1850 observation_id="TS_C_20230512_000021",
1851 observation_type="flat",
1852 observation_reason="sflat_hi",
1853 observing_day=20230512,
1854 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1855 physical_filter="HIGH",
1856 science_program="7187D",
1857 visit_id=202305121917591)),
1858 ("ts8-TS_C_20230523_000127_R22_S00.yaml",
1859 dict(telescope=None,
1860 instrument="LSST-TS8",
1861 can_see_sky=False,
1862 dark_time=15.16*u.s,
1863 detector_exposure_id=202305231936194018,
1864 detector_group="RTM-004",
1865 detector_name="S00",
1866 detector_num=18,
1867 detector_serial="ITL-3800C-372",
1868 exposure_id=202305231936194,
1869 exposure_group="202305231936194",
1870 exposure_time=15.0*u.s,
1871 focus_z=0.0*u.mm,
1872 group_counter_end=127,
1873 group_counter_start=127,
1874 has_simulated_content=False,
1875 observation_counter=127,
1876 observation_id="TS_C_20230523_000127",
1877 observation_type="flat",
1878 observation_reason="flat",
1879 observing_day=20230523,
1880 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1881 physical_filter="unknown",
1882 science_program="7220D",
1883 visit_id=202305231936194)),
1884 ("ts8-TS_C_20230525_000041_R22_S00.yaml",
1885 dict(telescope=None,
1886 instrument="LSST-TS8",
1887 can_see_sky=False,
1888 dark_time=30.151*u.s,
1889 detector_exposure_id=3023052500041018,
1890 detector_group="RTM-004",
1891 detector_name="S00",
1892 detector_num=18,
1893 detector_serial="ITL-3800C-372",
1894 exposure_id=3023052500041,
1895 exposure_group="3023052500041",
1896 exposure_time=30.0*u.s,
1897 focus_z=0.0*u.mm,
1898 group_counter_end=41,
1899 group_counter_start=41,
1900 has_simulated_content=False,
1901 observation_counter=41,
1902 observation_id="TS_C_20230525_000041",
1903 observation_type="flat",
1904 observation_reason="flat",
1905 observing_day=20230525,
1906 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1907 physical_filter="unknown",
1908 science_program="7227D",
1909 visit_id=3023052500041)),
1910 )
1911 for filename, expected in test_data:
1912 with self.subTest(f"Testing {filename}"):
1913 with warnings.catch_warnings():
1914 # Avoid warnings from too-long FITS header keys.
1915 warnings.simplefilter("ignore", VerifyWarning)
1916 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
1918 def test_ucdcam_translator(self):
1919 test_data = (("UCD-E2V-CCD250-TS_C_20231031_000227_R21_S01.yaml",
1920 dict(telescope=None,
1921 instrument="LSST-UCDCam",
1922 can_see_sky=False,
1923 dark_time=2.07859*u.s,
1924 detector_exposure_id=42370917130,
1925 detector_group="R21",
1926 detector_name="S01",
1927 detector_num=10,
1928 detector_serial="E2V-CCD250-112-09",
1929 exposure_id=2023103100227,
1930 exposure_group="2023103100227",
1931 exposure_time=1.0*u.s,
1932 exposure_time_requested=1.0*u.s,
1933 focus_z=0.0*u.mm,
1934 group_counter_end=227,
1935 group_counter_start=227,
1936 has_simulated_content=False,
1937 observation_counter=227,
1938 observation_id="TS_C_20231031_000227",
1939 observation_type="flat",
1940 observation_reason="flat",
1941 observing_day=20231031,
1942 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"),
1943 physical_filter="r",
1944 science_program="unknown",
1945 visit_id=2023103100227)),
1946 ("UCD-ITL-3800C-TS_C_20230730_000237_R22_S01.yaml",
1947 dict(telescope=None,
1948 instrument="LSST-UCDCam",
1949 can_see_sky=False,
1950 dark_time=3.082*u.s,
1951 detector_exposure_id=179029732609,
1952 detector_group="R22",
1953 detector_name="S01",
1954 detector_num=1,
1955 detector_serial="ITL-3800C-002",
1956 exposure_id=3023073000237,
1957 exposure_group="3023073000237",
1958 exposure_time=2.0*u.s,
1959 focus_z=0.0*u.mm,
1960 group_counter_end=237,
1961 group_counter_start=237,
1962 has_simulated_content=False,
1963 observation_counter=237,
1964 observation_id="TS_C_20230730_000237",
1965 observation_type="flat",
1966 observation_reason="flat",
1967 observing_day=20230730,
1968 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"),
1969 physical_filter="r",
1970 science_program="unknown",
1971 visit_id=3023073000237)),
1972 )
1973 for filename, expected in test_data:
1974 with self.subTest(f"Testing {filename}"):
1975 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
1977 def test_compute_exposure_id(self):
1978 test_data = {
1979 (20240318, 43): 2024031800043,
1980 (20240318, 43, None): 2024031800043,
1981 ("2024-03-18", "42", "O"): 2024031800042,
1982 (20240318, "1", "H"): 4024031800001,
1983 # Pre phase-out of offsets
1984 (20231004, "1", "C"): 3023100400001,
1985 ("2025-04-17", 101, "P"): 5025041700101,
1986 (20250417, 42, "Q"): 6025041700042,
1987 (20250417, 42, "S"): 7025041700042,
1988 # Post phase-out of offsets
1989 (20250418, 43): 2025041800043,
1990 ("2023-10-05", 1, "C"): 2023100500001,
1991 ("2025-04-18", 101, "P"): 2025041800101,
1992 (20250418, 42, "Q"): 2025041800042,
1993 (20250418, 42, "S"): 2025041800042,
1994 }
1996 for inputs, expected in test_data.items():
1997 with self.subTest(inputs=inputs):
1998 self.assertEqual(
1999 lsst.obs.lsst.translators.lsst.LsstBaseTranslator.compute_exposure_id(*inputs),
2000 expected
2001 )
2003 def test_checker(self):
2004 filename = "latiss-future.yaml"
2005 from astro_metadata_translator.tests import read_test_file
2006 from astro_metadata_translator import ObservationInfo
2007 header = read_test_file(filename, self.datadir)
2008 obsInfo = ObservationInfo(header, pedantic=True, filename=filename)
2009 self.assertTrue(obsInfo)
2011 def test_fix_header(self):
2012 from astro_metadata_translator import fix_header
2013 from astro_metadata_translator.tests import read_test_file
2014 # Test that header fix up is working
2015 # Not all headers are used in metadata translation
2016 test_data = (
2017 ("latiss-AT_O_20210212_000006.yaml",
2018 dict(RASTART=260.024385071917)),
2019 ("latiss-AT_O_20210210_000011.yaml",
2020 dict(RASTART=355.41750341182313)),
2021 )
2022 for filename, expected in test_data:
2023 with self.subTest(f"Testing {filename}"):
2024 header = read_test_file(filename, dir=self.datadir)
2025 modified = fix_header(header)
2026 self.assertTrue(modified)
2027 for k, v in expected.items():
2028 self.assertEqual(header[k], v, f"Testing {k} in {filename}")
2031if __name__ == "__main__": 2031 ↛ 2032line 2031 didn't jump to line 2032 because the condition on line 2031 was never true
2032 unittest.main()