Coverage for tests / test_translator.py: 21%
108 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-24 08:43 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-24 08:43 +0000
1# This file is part of obs_lsst.
2#
3# Developed for the LSST Data Management System.
4# This product includes software developed by the LSST Project
5# (http://www.lsst.org).
6# See the COPYRIGHT file at the top-level directory of this distribution
7# for details of code ownership.
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program. If not, see <http://www.gnu.org/licenses/>.
22import os.path
23import unittest
24import warnings
25import astropy.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_20241108_000266_R22_S00.yaml",
620 dict(telescope="Simonyi Survey Telescope",
621 instrument="LSSTComCam",
622 boresight_rotation_coord="sky",
623 can_see_sky=True,
624 boresight_rotation_angle=102.79926387330579 * u.deg,
625 wcs_params=dict(max_sep=2.5),
626 dark_time=30.4306*u.s,
627 detector_exposure_id=45508266496,
628 detector_group="R22",
629 detector_name="S00",
630 detector_num=0,
631 detector_serial="ITL-3800C-229",
632 exposure_id=2024110800266,
633 exposure_group="2024-11-09T06:33:55.311",
634 exposure_time=30.0*u.s,
635 exposure_time_requested=30.0*u.s,
636 focus_z=2.0585230644024572*u.mm,
637 group_counter_end=266,
638 group_counter_start=266,
639 has_simulated_content=False,
640 object="slew_icrs",
641 observation_counter=266,
642 observation_id="CC_O_20241108_000266",
643 observation_type="science",
644 observation_reason="science",
645 observing_day=20241108,
646 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
647 physical_filter="g_01",
648 pressure=74120.0 * u.Pa,
649 relative_humidity=22.299999237060547,
650 science_program="PP-SURVEY",
651 temperature=13.725000381469727 * u.deg_C,
652 visit_id=3110636353110000)),
653 )
654 for filename, expected in test_data:
655 with self.subTest(f"Testing {filename}"):
656 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
658 def test_comCamSim_translator(self):
659 test_data = (("comCamSim-IM_P_20240117_000000_R22_S00.yaml",
660 dict(telescope="Simonyi Survey Telescope",
661 instrument="LSSTComCamSim",
662 boresight_rotation_coord="unknown",
663 can_see_sky=False,
664 dark_time=0.0*u.s,
665 detector_group="R22",
666 detector_name="S00",
667 detector_num=0,
668 detector_serial="ITL-3800C-229",
669 exposure_id=5024011700000,
670 exposure_group="5024011700000",
671 exposure_time=0.0*u.s,
672 focus_z=0.0 * u.mm,
673 group_counter_end=5024011700000,
674 group_counter_start=5024011700000,
675 has_simulated_content=True,
676 object="UNKNOWN",
677 observation_counter=0,
678 observation_id="IM_P_20240117_000000",
679 observation_type="bias",
680 observation_reason="calibration",
681 observing_day=20240117,
682 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
683 physical_filter="r_03",
684 pressure=None,
685 relative_humidity=None,
686 science_program="calibration",
687 temperature=None,
688 visit_id=5024011700000,
689 )),
690 ("comCamSim-CC_S_20240321_000093_R22_S22.yaml",
691 dict(telescope="Simonyi Survey Telescope",
692 instrument="LSSTComCamSim",
693 boresight_rotation_coord="sky",
694 can_see_sky=True,
695 dark_time=33.0546 * u.s,
696 detector_group="R22",
697 detector_name="S22",
698 detector_num=8,
699 detector_serial="ITL-3800C-206",
700 exposure_id=2026032100093,
701 exposure_group="2024-03-22T03:41:54.994",
702 exposure_time=30.0 * u.s,
703 exposure_time_requested=30.0 * u.s,
704 focus_z=0.0 * u.mm,
705 group_counter_end=93,
706 group_counter_start=93,
707 has_simulated_content=True,
708 object="TEST",
709 observation_counter=93,
710 observation_id="CC_S_20260321_000093",
711 observation_type="science",
712 observation_reason="object",
713 observing_day=20260321,
714 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
715 physical_filter="r_03",
716 pressure=None,
717 relative_humidity=None,
718 science_program="unknown",
719 temperature=None,
720 visit_id=2910085149940000,
721 )),
722 )
723 for filename, expected in test_data:
724 with self.subTest(f"Testing {filename}"):
725 self.assertObservationInfoFromYaml(
726 filename, dir=self.datadir, check_wcs=False, **expected
727 )
729 def test_phoSimComCam_translator(self):
730 test_data = (("comCam-CC_H_20100217_006001_R22_S00.yaml",
731 dict(telescope="Simonyi Survey Telescope",
732 instrument="LSSTComCam",
733 boresight_rotation_coord="sky",
734 can_see_sky=True,
735 dark_time=1.0*u.s,
736 detector_exposure_id=0x4017977100,
737 detector_group="R22",
738 detector_name="S00",
739 detector_num=0,
740 detector_serial="ITL-3800C-229",
741 exposure_id=4010021706001,
742 exposure_group="4010021706001",
743 exposure_time=1.0*u.s,
744 focus_z=0.0*u.mm,
745 group_counter_end=6001,
746 group_counter_start=6001,
747 has_simulated_content=True,
748 object="UNKNOWN",
749 observation_counter=6001,
750 observation_id="CC_H_20100217_006001",
751 observation_type="science",
752 observation_reason="test",
753 observing_day=20100217,
754 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
755 physical_filter="g_01",
756 pressure=None,
757 relative_humidity=None,
758 science_program="9006001",
759 temperature=None,
760 visit_id=4010021706001)),
761 )
762 for filename, expected in test_data:
763 with self.subTest(f"Testing {filename}"):
764 self.assertObservationInfoFromYaml(filename, dir=self.datadir,
765 check_wcs=False, **expected)
767 def test_phosim_translator(self):
768 test_data = (("phosim-lsst_a_204595_f3_R11_S02_E000.yaml",
769 dict(telescope="Simonyi Survey Telescope",
770 instrument="LSSTCam-PhoSim",
771 boresight_rotation_coord="sky",
772 can_see_sky=True,
773 dark_time=30.0*u.s,
774 detector_exposure_id=204595038,
775 detector_group="R11",
776 detector_name="S02",
777 detector_num=38,
778 detector_serial="R11_S02",
779 exposure_id=204595,
780 exposure_group="204595",
781 exposure_time=30.0*u.s,
782 focus_z=0.0*u.mm,
783 group_counter_end=204595,
784 group_counter_start=204595,
785 has_simulated_content=True,
786 object="UNKNOWN",
787 observation_counter=0,
788 observation_id="204595",
789 observation_type="science",
790 observation_reason="phosim",
791 observing_day=20221005,
792 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"),
793 physical_filter="i",
794 pressure=520.0*cds.mmHg,
795 relative_humidity=40.0,
796 science_program="204595",
797 temperature=20.0*u.deg_C,
798 visit_id=204595,
799 wcs_params=dict(max_sep=3000.))), # 2022
800 )
801 for filename, expected in test_data:
802 with self.subTest(f"Testing {filename}"):
803 with warnings.catch_warnings():
804 # Avoid warnings from too-long FITS header keys.
805 warnings.simplefilter("ignore", VerifyWarning)
806 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
808 def test_latiss_translator(self):
809 test_data = (("latiss-2018-09-20-05700065-det000.yaml",
810 dict(telescope="Rubin Auxiliary Telescope",
811 instrument="LATISS",
812 boresight_rotation_coord="unknown",
813 can_see_sky=None,
814 dark_time=27.0*u.s,
815 detector_exposure_id=0x2638004100,
816 detector_group="RXX",
817 detector_name="S00",
818 detector_num=0,
819 detector_serial="ITL-3800C-098",
820 exposure_id=3018092000065,
821 exposure_group="3018092000065",
822 exposure_time=27.0*u.s,
823 exposure_time_requested=27.0*u.s,
824 focus_z=0.0*u.mm,
825 group_counter_end=65,
826 group_counter_start=65,
827 has_simulated_content=False,
828 object="UNKNOWN",
829 observation_counter=65,
830 observation_id="AT_C_20180920_000065",
831 observation_type="unknown",
832 observation_reason="unknown",
833 observing_day=20180920,
834 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
835 physical_filter="unknown~unknown",
836 pressure=None,
837 relative_humidity=None,
838 science_program="unknown",
839 temperature=None,
840 visit_id=3018092000065,
841 )),
842 ("latiss-AT_O_20190306_000014.yaml",
843 dict(telescope="Rubin Auxiliary Telescope",
844 instrument="LATISS",
845 boresight_rotation_coord="unknown",
846 can_see_sky=None,
847 dark_time=1.06*u.s,
848 detector_exposure_id=0x68b800e00,
849 detector_group="RXX",
850 detector_name="S00",
851 detector_num=0,
852 detector_serial="ITL-3800C-098",
853 exposure_id=2019030600014,
854 exposure_group="2019030600014",
855 exposure_time=1.06*u.s,
856 exposure_time_requested=1.06*u.s,
857 focus_z=0.0*u.mm,
858 group_counter_end=14,
859 group_counter_start=14,
860 has_simulated_content=False,
861 object="UNKNOWN",
862 observation_counter=14,
863 observation_id="AT_O_20190306_000014",
864 observation_type="unknown",
865 observation_reason="unknown",
866 observing_day=20190306,
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=2019030600014,
874 )),
875 ("latiss-AT_O_20190329_000022-ats-wfs_ccd.yaml",
876 dict(telescope="Rubin Auxiliary Telescope",
877 instrument="LATISS",
878 boresight_rotation_coord="unknown",
879 can_see_sky=False,
880 dark_time=0.0*u.s,
881 detector_exposure_id=0x697001600,
882 detector_group="RXX",
883 detector_name="S00",
884 detector_num=0,
885 detector_serial="ITL-3800C-098",
886 exposure_id=2019032900022,
887 exposure_group="2019032900022",
888 exposure_time=0.0*u.s,
889 exposure_time_requested=0.0*u.s,
890 focus_z=0.0*u.mm,
891 group_counter_end=22,
892 group_counter_start=22,
893 has_simulated_content=False,
894 object="UNKNOWN",
895 observation_counter=22,
896 observation_id="AT_O_20190329_000022",
897 observation_type="bias",
898 observation_reason="unknown",
899 observing_day=20190329,
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=2019032900022,
907 )),
908 ("latiss-future.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=0x74e001600,
915 detector_group="RXX",
916 detector_name="S00",
917 detector_num=0,
918 detector_serial="ITL-3800C-068",
919 exposure_id=2020032900022,
920 exposure_group="2020-03-29T16:55:00.012#24",
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_X_20200329_000022",
930 observation_type="bias",
931 observation_reason="unknown",
932 observing_day=20200329,
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=1654305000120024,
940 )),
941 ("latiss-AT_O_20190915_000037.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=0x6ec002500,
948 detector_group="RXX",
949 detector_name="S00",
950 detector_num=0,
951 detector_serial="ITL-3800C-068",
952 exposure_id=2019091500037,
953 exposure_group="bias_0027_0100",
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=37,
958 group_counter_start=37,
959 has_simulated_content=False,
960 object="UNKNOWN",
961 observation_counter=37,
962 observation_id="AT_O_20190915_000037",
963 observation_type="bias",
964 observation_reason="unknown",
965 observing_day=20190915,
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=3575576933793566714,
973 )),
974 ("latiss-AT_O_20191031_000004.yaml",
975 dict(telescope="Rubin Auxiliary Telescope",
976 instrument="LATISS",
977 boresight_rotation_coord="unknown",
978 can_see_sky=None,
979 dark_time=3.0*u.s,
980 detector_exposure_id=0x703000400,
981 detector_group="RXX",
982 detector_name="S00",
983 detector_num=0,
984 detector_serial="ITL-3800C-068",
985 exposure_id=2019103100004,
986 exposure_group="TEST01",
987 exposure_time=3.0*u.s,
988 exposure_time_requested=3.0*u.s,
989 focus_z=0.0*u.mm,
990 group_counter_end=4,
991 group_counter_start=4,
992 has_simulated_content=False,
993 object="UNKNOWN",
994 observation_counter=4,
995 observation_id="AT_O_20191031_000004",
996 observation_type="engtest",
997 observation_reason="unknown",
998 observing_day=20191031,
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=1123819875881954006,
1006 )),
1007 ("latiss-AT_O_20191104_000003.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=0x705000300,
1014 detector_group="RXX",
1015 detector_name="S00",
1016 detector_num=0,
1017 detector_serial="ITL-3800C-068",
1018 exposure_id=2019110400003,
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=3,
1024 group_counter_start=3,
1025 has_simulated_content=False,
1026 object="UNKNOWN",
1027 observation_counter=3,
1028 observation_id="AT_O_20191104_000003",
1029 observation_type="engtest",
1030 observation_reason="unknown",
1031 observing_day=20191104,
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_20191113_000061.yaml",
1041 dict(telescope="Rubin Auxiliary Telescope",
1042 instrument="LATISS",
1043 boresight_rotation_coord="unknown",
1044 can_see_sky=None,
1045 dark_time=0.5*u.s,
1046 detector_exposure_id=0x709803d00,
1047 detector_group="RXX",
1048 detector_name="S00",
1049 detector_num=0,
1050 detector_serial="ITL-3800C-068",
1051 exposure_id=2019111300061,
1052 exposure_group="wave,Focus,455,32.0PH=5um",
1053 exposure_time=0.5*u.s,
1054 exposure_time_requested=0.5*u.s,
1055 focus_z=0.0*u.mm,
1056 group_counter_end=61,
1057 group_counter_start=61,
1058 has_simulated_content=False,
1059 object="UNKNOWN",
1060 observation_counter=61,
1061 observation_id="AT_O_20191113_000061",
1062 observation_type="engtest",
1063 observation_reason="unknown",
1064 observing_day=20191113,
1065 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1066 physical_filter="empty~ronchi90lpmm",
1067 pressure=None,
1068 relative_humidity=None,
1069 science_program="unknown",
1070 temperature=None,
1071 visit_id=1892608703001301325,
1072 )),
1073 ("latiss-AT_O_20191118_000011.yaml",
1074 dict(telescope="Rubin Auxiliary Telescope",
1075 instrument="LATISS",
1076 boresight_rotation_coord="unknown",
1077 can_see_sky=False,
1078 dark_time=15.0*u.s,
1079 detector_exposure_id=0x70c000b00,
1080 detector_group="RXX",
1081 detector_name="S00",
1082 detector_num=0,
1083 detector_serial="ITL-3800C-068",
1084 exposure_id=2019111800011,
1085 exposure_group="dark_0002_0005",
1086 exposure_time=15.0*u.s,
1087 exposure_time_requested=15.0*u.s,
1088 focus_z=0.0*u.mm,
1089 group_counter_end=11,
1090 group_counter_start=11,
1091 has_simulated_content=False,
1092 object="UNKNOWN",
1093 observation_counter=11,
1094 observation_id="AT_O_20191118_000011",
1095 observation_type="dark",
1096 observation_reason="unknown",
1097 observing_day=20191118,
1098 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1099 physical_filter="diffuser~ronchi170lpmm",
1100 pressure=None,
1101 relative_humidity=None,
1102 science_program="unknown",
1103 temperature=None,
1104 visit_id=6861884254113212214,
1105 )),
1106 ("latiss-AT_O_20200121_000045.yaml",
1107 dict(telescope="Rubin Auxiliary Telescope",
1108 instrument="LATISS",
1109 boresight_rotation_coord="sky",
1110 can_see_sky=None,
1111 dark_time=100.0*u.s,
1112 detector_exposure_id=0x72c002d00,
1113 detector_group="RXX",
1114 detector_name="S00",
1115 detector_num=0,
1116 detector_serial="ITL-3800C-068",
1117 exposure_id=2020012100045,
1118 exposure_group="test",
1119 exposure_time=100.0*u.s,
1120 exposure_time_requested=100.0*u.s,
1121 focus_z=0.560002659202*u.mm,
1122 group_counter_end=45,
1123 group_counter_start=45,
1124 has_simulated_content=False,
1125 object="UNKNOWN",
1126 observation_counter=45,
1127 observation_id="AT_O_20200121_000045",
1128 observation_type="engtest",
1129 observation_reason="unknown",
1130 observing_day=20200121,
1131 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1132 physical_filter="blank_bk7_wg05~empty",
1133 pressure=None,
1134 relative_humidity=None,
1135 science_program="unknown",
1136 temperature=None,
1137 visit_id=4702443654717948604,
1138 check_altaz=True,
1139 )),
1140 ("latiss-AT_O_20200128_000379.yaml",
1141 dict(telescope="Rubin Auxiliary Telescope",
1142 instrument="LATISS",
1143 boresight_rotation_coord="sky",
1144 can_see_sky=True,
1145 dark_time=5.0*u.s,
1146 detector_exposure_id=0x72f817b00,
1147 detector_group="RXX",
1148 detector_name="S00",
1149 detector_num=0,
1150 detector_serial="ITL-3800C-068",
1151 exposure_id=2020012800379,
1152 exposure_group="2020-01-29T07:25:52.166",
1153 exposure_time=5.0*u.s,
1154 exposure_time_requested=5.0*u.s,
1155 focus_z=0.35416568455*u.mm,
1156 group_counter_end=379,
1157 group_counter_start=379,
1158 has_simulated_content=False,
1159 object="HD107696",
1160 observation_counter=379,
1161 observation_id="AT_O_20200128_000379",
1162 observation_type="science",
1163 observation_reason="science",
1164 observing_day=20200128,
1165 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1166 physical_filter="KPNO_406_828nm~empty",
1167 pressure=None,
1168 relative_humidity=None,
1169 science_program="unknown",
1170 temperature=None,
1171 visit_id=1602123521660000,
1172 # We have some timing discrepancies in the headers
1173 # that make it hard to match the demand RA/DEC to
1174 # the recorded AZ/EL/TIME.
1175 wcs_params=dict(max_sep=7.),
1176 )),
1177 ("latiss-AT_O_20220405_000348.yaml",
1178 dict(telescope="Rubin Auxiliary Telescope",
1179 instrument="LATISS",
1180 boresight_rotation_coord="sky",
1181 can_see_sky=True,
1182 dark_time=30.3176279067993*u.s,
1183 detector_exposure_id=0x8be815c00,
1184 detector_group="RXX",
1185 detector_name="S00",
1186 detector_num=0,
1187 detector_serial="ITL-3800C-068",
1188 exposure_id=2022040500348,
1189 exposure_group="2022-04-06T02:58:07.181",
1190 exposure_time=30.0*u.s,
1191 exposure_time_requested=30.0*u.s,
1192 focus_z=0.0697081759572029*u.mm,
1193 group_counter_end=349,
1194 group_counter_start=348,
1195 has_simulated_content=False,
1196 object="LATISS_E6A_00000040",
1197 observation_counter=348,
1198 observation_id="AT_O_20220405_000348",
1199 observation_type="science",
1200 observation_reason="object",
1201 observing_day=20220405,
1202 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1203 physical_filter="SDSSr~empty",
1204 pressure=744.3*u.hPa,
1205 relative_humidity=19.0,
1206 science_program="LATISS_E6A",
1207 temperature=12.3*u.deg_C,
1208 visit_id=2291434871810000,
1209 # We have some timing discrepancies in the headers
1210 # that make it hard to match the demand RA/DEC to
1211 # the recorded AZ/EL/TIME.
1212 wcs_params=dict(max_sep=7.),
1213 )),
1214 ("latiss-AT_O_20220405_000349.yaml",
1215 dict(telescope="Rubin Auxiliary Telescope",
1216 instrument="LATISS",
1217 boresight_rotation_coord="sky",
1218 can_see_sky=True,
1219 dark_time=30.2387452125549*u.s,
1220 detector_exposure_id=0x8be815d00,
1221 detector_group="RXX",
1222 detector_name="S00",
1223 detector_num=0,
1224 detector_serial="ITL-3800C-068",
1225 exposure_id=2022040500349,
1226 exposure_group="2022-04-06T02:58:07.181",
1227 exposure_time=30.0*u.s,
1228 exposure_time_requested=30.0*u.s,
1229 focus_z=0.0697081759572029*u.mm,
1230 group_counter_end=349,
1231 group_counter_start=348,
1232 has_simulated_content=False,
1233 object="LATISS_E6A_00000040",
1234 observation_counter=349,
1235 observation_id="AT_O_20220405_000349",
1236 observation_type="science",
1237 observation_reason="object",
1238 observing_day=20220405,
1239 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1240 physical_filter="SDSSr~empty",
1241 pressure=744.3*u.hPa,
1242 relative_humidity=19.0,
1243 science_program="LATISS_E6A",
1244 temperature=12.3*u.deg_C,
1245 visit_id=2291434871810000,
1246 # We have some timing discrepancies in the headers
1247 # that make it hard to match the demand RA/DEC to
1248 # the recorded AZ/EL/TIME.
1249 wcs_params=dict(max_sep=7.),
1250 )),
1251 ("latiss-AT_C_20220426_000004_R00_S00.yaml",
1252 dict(telescope="Rubin Auxiliary Telescope",
1253 instrument="LATISS",
1254 boresight_rotation_coord="unknown",
1255 can_see_sky=None,
1256 dark_time=537.406*u.s,
1257 detector_exposure_id=0x28c9000400,
1258 detector_group="RXX",
1259 detector_name="S00",
1260 detector_num=0,
1261 detector_serial="ITL-3800C-068",
1262 exposure_id=3022042600004,
1263 exposure_group="3022042600004",
1264 exposure_time=-1.0*u.s,
1265 exposure_time_requested=-1.0*u.s,
1266 focus_z=0.0*u.mm,
1267 group_counter_end=4,
1268 group_counter_start=4,
1269 has_simulated_content=False,
1270 object="UNKNOWN",
1271 observation_counter=4,
1272 observation_id="AT_C_20220426_000004",
1273 observation_type="unknown",
1274 observation_reason="unknown",
1275 observing_day=20220426,
1276 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1277 physical_filter="unknown~unknown",
1278 pressure=None,
1279 relative_humidity=None,
1280 science_program="unknown",
1281 temperature=None,
1282 visit_id=3022042600004,
1283 )),
1284 ("latiss-AT_O_20230321_000053.yaml",
1285 dict(telescope="Rubin Auxiliary Telescope",
1286 instrument="LATISS",
1287 boresight_rotation_coord="unknown",
1288 can_see_sky=False,
1289 dark_time=30.0126*u.s,
1290 detector_exposure_id=0x96d803500,
1291 detector_group="RXX",
1292 detector_name="S00",
1293 detector_num=0,
1294 detector_serial="ITL-3800C-068",
1295 exposure_id=2023032100053,
1296 exposure_group="2023-03-21T16:11:07.633",
1297 exposure_time=30.0*u.s,
1298 exposure_time_requested=30.0*u.s,
1299 focus_z=0.0*u.mm,
1300 group_counter_end=53,
1301 group_counter_start=53,
1302 has_simulated_content=False,
1303 object="slew_icrs",
1304 observation_counter=53,
1305 observation_id="AT_O_20230321_000053",
1306 observation_type="dark",
1307 observation_reason="dark",
1308 observing_day=20230321,
1309 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1310 physical_filter="empty~empty",
1311 pressure=None,
1312 relative_humidity=None,
1313 science_program="unknown",
1314 temperature=None,
1315 visit_id=2593446676330000,
1316 check_altaz=True,
1317 )),
1318 ("latiss-AT_O_20230705_000379_R00_S00.json",
1319 dict(telescope="Rubin Auxiliary Telescope",
1320 instrument="LATISS",
1321 boresight_rotation_coord="sky",
1322 can_see_sky=True,
1323 dark_time=30.2418*u.s,
1324 detector_exposure_id=0x9a2817b00,
1325 detector_group="RXX",
1326 detector_name="S00",
1327 detector_num=0,
1328 detector_serial="ITL-3800C-068",
1329 exposure_id=2023070500379,
1330 exposure_group="2023-07-06T04:53:15.609",
1331 exposure_time=30.0*u.s,
1332 exposure_time_requested=30.0*u.s,
1333 focus_z=-0.008921561762690544*u.mm,
1334 group_counter_end=379,
1335 group_counter_start=379,
1336 has_simulated_content=False,
1337 object="HD165763",
1338 observation_counter=379,
1339 observation_id="AT_O_20230705_000379",
1340 observation_type="science",
1341 observation_reason="sitcom-857",
1342 observing_day=20230705,
1343 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1344 physical_filter="empty~holo4_003",
1345 pressure=777.80*u.hPa,
1346 relative_humidity=15.149999618530273,
1347 science_program="BLOCK-59",
1348 temperature=5.775000095367432*u.deg_C,
1349 visit_id=2685487956090000,
1350 check_altaz=True,
1351 )),
1352 ("latiss-AT_O_20240624_000106_R00_S00.yaml",
1353 dict(telescope="Rubin Auxiliary Telescope",
1354 instrument="LATISS",
1355 boresight_rotation_coord="sky",
1356 can_see_sky=True,
1357 dark_time=30.2407*u.s,
1358 detector_exposure_id=44358986240,
1359 detector_group="RXX",
1360 detector_name="S00",
1361 detector_num=0,
1362 detector_serial="ITL-3800C-068",
1363 exposure_id=2024062400106,
1364 exposure_group="2024-06-25T01:26:31.895#1",
1365 exposure_time=30.0*u.s,
1366 exposure_time_requested=30.0*u.s,
1367 focus_z=0.742219865322113*u.mm,
1368 group_counter_end=106,
1369 group_counter_start=106,
1370 has_simulated_content=False,
1371 object="HD 131586",
1372 observation_counter=106,
1373 observation_id="AT_O_20240624_000106",
1374 observation_type="cwfs",
1375 observation_reason="intra",
1376 observing_day=20240624,
1377 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1378 physical_filter="SDSSr_65mm~empty",
1379 pressure=73880*u.Pa,
1380 relative_humidity=40.650001525878906,
1381 science_program="cwfs",
1382 temperature=1.5750000476837158*u.deg_C,
1383 visit_id=2992083918950001,
1384 check_altaz=True,
1385 )),
1386 ("latiss-AT_O_20240624_000106_R00_S00-patched.yaml",
1387 dict(telescope="Rubin Auxiliary Telescope",
1388 instrument="LATISS",
1389 boresight_rotation_coord="sky",
1390 can_see_sky=False,
1391 dark_time=30.2407*u.s,
1392 detector_exposure_id=44358986240,
1393 detector_group="RXX",
1394 detector_name="S00",
1395 detector_num=0,
1396 detector_serial="ITL-3800C-068",
1397 exposure_id=2024062400106,
1398 exposure_group="2024-06-25T01:26:31.895#1",
1399 exposure_time=30.0*u.s,
1400 exposure_time_requested=30.0*u.s,
1401 focus_z=0.742219865322113*u.mm,
1402 group_counter_end=106,
1403 group_counter_start=106,
1404 has_simulated_content=False,
1405 object="HD 131586",
1406 observation_counter=106,
1407 observation_id="AT_O_20240624_000106",
1408 observation_type="science",
1409 observation_reason="intra",
1410 observing_day=20240624,
1411 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1412 physical_filter="SDSSr_65mm~empty",
1413 pressure=73880*u.Pa,
1414 relative_humidity=40.650001525878906,
1415 science_program="cwfs",
1416 temperature=1.5750000476837158*u.deg_C,
1417 visit_id=2992083918950001,
1418 check_altaz=True,
1419 )),
1420 ("latiss-AT_O_20240624_000169_R00_S00.yaml",
1421 dict(telescope="Rubin Auxiliary Telescope",
1422 instrument="LATISS",
1423 boresight_rotation_coord="unknown",
1424 can_see_sky=False,
1425 dark_time=30.0096*u.s,
1426 detector_exposure_id=44359002368,
1427 detector_group="RXX",
1428 detector_name="S00",
1429 detector_num=0,
1430 detector_serial="ITL-3800C-068",
1431 exposure_id=2024062400169,
1432 exposure_group="2024-06-25T07:10:40.297",
1433 exposure_time=30.0*u.s,
1434 exposure_time_requested=30.0*u.s,
1435 focus_z=0.0*u.mm,
1436 group_counter_end=169,
1437 group_counter_start=169,
1438 has_simulated_content=False,
1439 object="FlatField position",
1440 observation_counter=169,
1441 observation_id="AT_O_20240624_000169",
1442 observation_type="dark",
1443 observation_reason="dark",
1444 observing_day=20240624,
1445 observing_day_offset=astropy.time.TimeDelta(43200.0, scale="tai", format="sec"),
1446 physical_filter="SDSSr_65mm~empty",
1447 pressure=73760*u.Pa,
1448 relative_humidity=44.42499923706055,
1449 science_program="unknown",
1450 temperature=0.02500000037252903*u.deg_C,
1451 visit_id=2992290402970000,
1452 check_altaz=True,
1453 )),
1454 )
1455 with warnings.catch_warnings():
1456 # Avoid warnings from too-long FITS header keys.
1457 warnings.simplefilter("ignore", VerifyWarning)
1458 self.assertObservationInfoFromYaml("latiss-future.yaml", dir=self.datadir)
1459 for filename, expected in test_data:
1460 with self.subTest(f"Testing {filename}"):
1461 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
1463 # This translation should fail
1464 with self.assertRaises(KeyError):
1465 self.assertObservationInfoFromYaml("latiss-future-bad.yaml", dir=self.datadir)
1467 def test_imsim_translator(self):
1468 test_data = (("imsim-bias-lsst_a_3010002_R11_S00.yaml",
1469 dict(telescope="Simonyi Survey Telescope",
1470 instrument="LSSTCam-imSim",
1471 boresight_rotation_coord="sky",
1472 can_see_sky=True,
1473 dark_time=0.0*u.s,
1474 detector_exposure_id=3010002036,
1475 detector_group="R11",
1476 detector_name="S00",
1477 detector_num=36,
1478 detector_serial="LCA-11021_RTM-000",
1479 exposure_id=3010002,
1480 exposure_group="3010002",
1481 exposure_time=0.0*u.s,
1482 focus_z=0.0*u.mm,
1483 group_counter_end=3010002,
1484 group_counter_start=3010002,
1485 has_simulated_content=True,
1486 object="UNKNOWN",
1487 observation_counter=0,
1488 observation_id="3010002",
1489 observation_type="science", # The header is wrong
1490 observation_reason="imsim",
1491 observing_day=20220101,
1492 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"),
1493 physical_filter="i",
1494 pressure=None,
1495 relative_humidity=40.0,
1496 science_program="42",
1497 temperature=None,
1498 visit_id=3010002,
1499 wcs_params=dict(max_sep=3000.), # 2022
1500 )),
1501 ("imsim-lsst_a_204595_R11_S02_i.yaml",
1502 dict(telescope="Simonyi Survey Telescope",
1503 instrument="LSSTCam-imSim",
1504 boresight_rotation_coord="sky",
1505 can_see_sky=True,
1506 dark_time=30.0*u.s,
1507 detector_exposure_id=204595038,
1508 detector_group="R11",
1509 detector_name="S02",
1510 detector_num=38,
1511 detector_serial="LCA-11021_RTM-000",
1512 exposure_id=204595,
1513 exposure_group="204595",
1514 exposure_time=30.0*u.s,
1515 exposure_time_requested=30.0*u.s,
1516 focus_z=0.0*u.mm,
1517 group_counter_end=204595,
1518 group_counter_start=204595,
1519 has_simulated_content=True,
1520 object="UNKNOWN",
1521 observation_counter=0,
1522 observation_id="204595",
1523 observation_type="science", # The header is wrong
1524 observation_reason="imsim",
1525 observing_day=20221005,
1526 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"),
1527 physical_filter="i_sim_1.4",
1528 pressure=None,
1529 relative_humidity=40.0,
1530 science_program="204595",
1531 temperature=None,
1532 visit_id=204595,
1533 wcs_params=dict(max_sep=3000.), # 2022
1534 )),
1535 ("imsim-flats-lsst_a_5000007_R11_S20_i.yaml",
1536 dict(telescope="Simonyi Survey Telescope",
1537 instrument="LSSTCam-imSim",
1538 boresight_rotation_coord="sky",
1539 can_see_sky=False,
1540 dark_time=30.0*u.s,
1541 detector_exposure_id=5000007042,
1542 detector_group="R11",
1543 detector_name="S20",
1544 detector_num=42,
1545 detector_serial="LCA-11021_RTM-000",
1546 exposure_id=5000007,
1547 exposure_group="5000007",
1548 exposure_time=30.0*u.s,
1549 focus_z=0.0*u.mm,
1550 group_counter_end=5000007,
1551 group_counter_start=5000007,
1552 has_simulated_content=True,
1553 object="UNKNOWN",
1554 observation_counter=0,
1555 observation_id="5000007",
1556 observation_type="flat",
1557 observation_reason="imsim",
1558 observing_day=20220806,
1559 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"),
1560 physical_filter="i",
1561 pressure=None,
1562 relative_humidity=40.0,
1563 science_program="5000007",
1564 temperature=None,
1565 visit_id=5000007,
1566 )),
1567 ("imsim-dark-lsst_a_4010003_R11_S11.yaml",
1568 dict(telescope="Simonyi Survey Telescope",
1569 instrument="LSSTCam-imSim",
1570 boresight_rotation_coord="sky",
1571 can_see_sky=True,
1572 dark_time=500.0*u.s,
1573 detector_exposure_id=4010003040,
1574 detector_group="R11",
1575 detector_name="S11",
1576 detector_num=40,
1577 detector_serial="LCA-11021_RTM-000",
1578 exposure_id=4010003,
1579 exposure_group="4010003",
1580 exposure_time=500.0*u.s,
1581 focus_z=0.0*u.mm,
1582 group_counter_end=4010003,
1583 group_counter_start=4010003,
1584 has_simulated_content=True,
1585 object="UNKNOWN",
1586 observation_counter=0,
1587 observation_id="4010003",
1588 observation_type="science", # The header is wrong
1589 observation_reason="imsim",
1590 observing_day=20220101,
1591 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"),
1592 physical_filter="i",
1593 pressure=None,
1594 relative_humidity=40.0,
1595 science_program="42",
1596 temperature=None,
1597 visit_id=4010003,
1598 wcs_params=dict(max_sep=3000.), # 2022
1599 )),
1600 )
1601 for filename, expected in test_data:
1602 with self.subTest(f"Testing {filename}"):
1603 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
1605 def test_ts3_translator(self):
1606 test_data = (("ts3-E2V-CCD250-411_lambda_flat_1000_025_20181115075559.yaml",
1607 dict(telescope=None,
1608 instrument="LSST-TS3",
1609 can_see_sky=False,
1610 dark_time=44.631*u.s,
1611 detector_exposure_id=201811151255111433,
1612 detector_group="R433",
1613 detector_name="S00",
1614 detector_num=433,
1615 detector_serial="E2V-CCD250-411",
1616 exposure_id=201811151255111,
1617 exposure_group="201811151255111",
1618 exposure_time=44.631*u.s,
1619 exposure_time_requested=44.631*u.s,
1620 focus_z=0.0*u.mm,
1621 group_counter_end=25,
1622 group_counter_start=25,
1623 has_simulated_content=False,
1624 observation_counter=25,
1625 observation_id="E2V-CCD250-411_lambda_flat_1000_025_20181115075559",
1626 observation_type="flat",
1627 observation_reason="lambda",
1628 observing_day=20181115,
1629 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1630 physical_filter="550CutOn",
1631 science_program="2018-11-15",
1632 visit_id=201811151255111)),
1633 ("ts3-ITL-3800C-098_lambda_flat_1000_067_20160722020740.yaml",
1634 dict(telescope=None,
1635 instrument="LSST-TS3",
1636 can_see_sky=False,
1637 dark_time=30.611*u.s,
1638 detector_exposure_id=201607220607067071,
1639 detector_group="R071",
1640 detector_name="S00",
1641 detector_num=71,
1642 detector_serial="ITL-3800C-098",
1643 exposure_id=201607220607067,
1644 exposure_group="201607220607067",
1645 exposure_time=30.611*u.s,
1646 focus_z=0.0*u.mm,
1647 group_counter_end=67,
1648 group_counter_start=67,
1649 has_simulated_content=False,
1650 observation_counter=67,
1651 observation_id="ITL-3800C-098_lambda_flat_1000_067_20160722020740",
1652 observation_type="flat",
1653 observation_reason="lambda",
1654 observing_day=20160721,
1655 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1656 physical_filter="550CutOn",
1657 science_program="2016-07-22",
1658 visit_id=201607220607067)),
1659 )
1660 for filename, expected in test_data:
1661 with self.subTest(f"Testing {filename}"):
1662 with warnings.catch_warnings():
1663 # Avoid warnings from too-long FITS header keys.
1664 warnings.simplefilter("ignore", VerifyWarning)
1665 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
1667 def test_ts8_translator(self):
1668 test_data = (("ts8-E2V-CCD250-179_lambda_bias_024_6006D_20180724104156.yaml",
1669 dict(telescope=None,
1670 instrument="LSST-TS8",
1671 can_see_sky=False,
1672 dark_time=0.0*u.s,
1673 detector_exposure_id=201807241041568067,
1674 detector_group="RTM-010",
1675 detector_name="S11",
1676 detector_num=67,
1677 detector_serial="E2V-CCD250-179",
1678 exposure_id=201807241041568,
1679 exposure_group="201807241041568",
1680 exposure_time=0.0*u.s,
1681 focus_z=0.0*u.mm,
1682 group_counter_end=24,
1683 group_counter_start=24,
1684 has_simulated_content=False,
1685 observation_counter=24,
1686 observation_id="E2V-CCD250-179_lambda_bias_024_6006D_20180724104156",
1687 observation_type="bias",
1688 observation_reason="lambda",
1689 observing_day=20180724,
1690 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1691 physical_filter="y",
1692 science_program="6006D",
1693 visit_id=201807241041568)),
1694 ("ts8-E2V-CCD250-200-Dev_lambda_flat_0700_6006D_20180724102845.yaml",
1695 dict(telescope=None,
1696 instrument="LSST-TS8",
1697 can_see_sky=False,
1698 dark_time=21.913*u.s,
1699 detector_exposure_id=201807241028453065,
1700 detector_group="RTM-010",
1701 detector_name="S02",
1702 detector_num=65,
1703 detector_serial="E2V-CCD250-200",
1704 exposure_id=201807241028453,
1705 exposure_group="201807241028453",
1706 exposure_time=21.913*u.s,
1707 focus_z=0.0*u.mm,
1708 group_counter_end=17,
1709 group_counter_start=17,
1710 has_simulated_content=False,
1711 observation_counter=17,
1712 observation_id="E2V-CCD250-200-Dev_lambda_flat_0700_6006D_20180724102845",
1713 observation_type="flat",
1714 observation_reason="lambda",
1715 observing_day=20180724,
1716 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1717 physical_filter="z",
1718 science_program="6006D",
1719 visit_id=201807241028453)),
1720 ("ts8-E2V-CCD250-220_fe55_fe55_094_6288_20171215114006.yaml",
1721 dict(telescope=None,
1722 instrument="LSST-TS8",
1723 can_see_sky=False,
1724 dark_time=300.0*u.s,
1725 detector_exposure_id=201712151140062027,
1726 detector_group="RTM-005",
1727 detector_name="S00",
1728 detector_num=27,
1729 detector_serial="E2V-CCD250-220",
1730 exposure_id=201712151140062,
1731 exposure_group="201712151140062",
1732 exposure_time=300.0*u.s,
1733 exposure_time_requested=300.0*u.s,
1734 focus_z=0.0*u.mm,
1735 group_counter_end=94,
1736 group_counter_start=94,
1737 has_simulated_content=False,
1738 observation_counter=94,
1739 observation_id="E2V-CCD250-220_fe55_fe55_094_6288_20171215114006",
1740 observation_type="fe55",
1741 observation_reason="fe55",
1742 observing_day=20171215,
1743 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1744 physical_filter="i",
1745 science_program="6288",
1746 visit_id=201712151140062)),
1747 ("ts8-TS_C_20220711_000174_R22_S00.yaml",
1748 dict(telescope=None,
1749 instrument="LSST-TS8",
1750 can_see_sky=False,
1751 dark_time=210.315*u.s,
1752 detector_exposure_id=202207111714459018,
1753 detector_group="RTM-004",
1754 detector_name="S00",
1755 detector_num=18,
1756 detector_serial="ITL-3800C-372",
1757 exposure_id=202207111714459,
1758 exposure_group="202207111714459",
1759 exposure_time=210.0*u.s,
1760 focus_z=0.0*u.mm,
1761 group_counter_end=174,
1762 group_counter_start=174,
1763 has_simulated_content=False,
1764 observation_counter=174,
1765 observation_id="TS_C_20220711_000174",
1766 observation_type="spot",
1767 observation_reason="spot_flat",
1768 observing_day=20220711,
1769 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1770 physical_filter="unknown",
1771 science_program="7074D",
1772 visit_id=202207111714459)),
1773 ("ts8-TS_C_20230512_000021_R22_S02.yaml",
1774 dict(telescope=None,
1775 instrument="LSST-TS8",
1776 can_see_sky=False,
1777 dark_time=15.165*u.s,
1778 detector_exposure_id=202305121917591020,
1779 detector_group="RTM-004",
1780 detector_name="S02",
1781 detector_num=20,
1782 detector_serial="ITL-3800C-380",
1783 exposure_id=202305121917591,
1784 exposure_group="202305121917591",
1785 exposure_time=15.0*u.s,
1786 focus_z=0.0*u.mm,
1787 group_counter_end=21,
1788 group_counter_start=21,
1789 has_simulated_content=False,
1790 observation_counter=21,
1791 observation_id="TS_C_20230512_000021",
1792 observation_type="flat",
1793 observation_reason="sflat_hi",
1794 observing_day=20230512,
1795 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1796 physical_filter="HIGH",
1797 science_program="7187D",
1798 visit_id=202305121917591)),
1799 ("ts8-TS_C_20230512_000021_R22_S02-fixed.yaml", # Will not apply header fixups
1800 dict(telescope=None,
1801 instrument="LSST-TS8",
1802 can_see_sky=False,
1803 dark_time=15.165*u.s,
1804 detector_exposure_id=202305121917591020,
1805 detector_group="RTM-004",
1806 detector_name="S02",
1807 detector_num=20,
1808 detector_serial="ITL-3800C-380",
1809 exposure_id=202305121917591,
1810 exposure_group="202305121917591",
1811 exposure_time=15.0*u.s,
1812 focus_z=0.0*u.mm,
1813 group_counter_end=21,
1814 group_counter_start=21,
1815 has_simulated_content=False,
1816 observation_counter=21,
1817 observation_id="TS_C_20230512_000021",
1818 observation_type="flat",
1819 observation_reason="sflat_hi",
1820 observing_day=20230512,
1821 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1822 physical_filter="HIGH",
1823 science_program="7187D",
1824 visit_id=202305121917591)),
1825 ("ts8-TS_C_20230523_000127_R22_S00.yaml",
1826 dict(telescope=None,
1827 instrument="LSST-TS8",
1828 can_see_sky=False,
1829 dark_time=15.16*u.s,
1830 detector_exposure_id=202305231936194018,
1831 detector_group="RTM-004",
1832 detector_name="S00",
1833 detector_num=18,
1834 detector_serial="ITL-3800C-372",
1835 exposure_id=202305231936194,
1836 exposure_group="202305231936194",
1837 exposure_time=15.0*u.s,
1838 focus_z=0.0*u.mm,
1839 group_counter_end=127,
1840 group_counter_start=127,
1841 has_simulated_content=False,
1842 observation_counter=127,
1843 observation_id="TS_C_20230523_000127",
1844 observation_type="flat",
1845 observation_reason="flat",
1846 observing_day=20230523,
1847 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1848 physical_filter="unknown",
1849 science_program="7220D",
1850 visit_id=202305231936194)),
1851 ("ts8-TS_C_20230525_000041_R22_S00.yaml",
1852 dict(telescope=None,
1853 instrument="LSST-TS8",
1854 can_see_sky=False,
1855 dark_time=30.151*u.s,
1856 detector_exposure_id=3023052500041018,
1857 detector_group="RTM-004",
1858 detector_name="S00",
1859 detector_num=18,
1860 detector_serial="ITL-3800C-372",
1861 exposure_id=3023052500041,
1862 exposure_group="3023052500041",
1863 exposure_time=30.0*u.s,
1864 focus_z=0.0*u.mm,
1865 group_counter_end=41,
1866 group_counter_start=41,
1867 has_simulated_content=False,
1868 observation_counter=41,
1869 observation_id="TS_C_20230525_000041",
1870 observation_type="flat",
1871 observation_reason="flat",
1872 observing_day=20230525,
1873 observing_day_offset=astropy.time.TimeDelta(28800.0, scale="tai", format="sec"),
1874 physical_filter="unknown",
1875 science_program="7227D",
1876 visit_id=3023052500041)),
1877 )
1878 for filename, expected in test_data:
1879 with self.subTest(f"Testing {filename}"):
1880 with warnings.catch_warnings():
1881 # Avoid warnings from too-long FITS header keys.
1882 warnings.simplefilter("ignore", VerifyWarning)
1883 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
1885 def test_ucdcam_translator(self):
1886 test_data = (("UCD-E2V-CCD250-TS_C_20231031_000227_R21_S01.yaml",
1887 dict(telescope=None,
1888 instrument="LSST-UCDCam",
1889 can_see_sky=False,
1890 dark_time=2.07859*u.s,
1891 detector_exposure_id=42370917130,
1892 detector_group="R21",
1893 detector_name="S01",
1894 detector_num=10,
1895 detector_serial="E2V-CCD250-112-09",
1896 exposure_id=2023103100227,
1897 exposure_group="2023103100227",
1898 exposure_time=1.0*u.s,
1899 exposure_time_requested=1.0*u.s,
1900 focus_z=0.0*u.mm,
1901 group_counter_end=227,
1902 group_counter_start=227,
1903 has_simulated_content=False,
1904 observation_counter=227,
1905 observation_id="TS_C_20231031_000227",
1906 observation_type="flat",
1907 observation_reason="flat",
1908 observing_day=20231031,
1909 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"),
1910 physical_filter="r",
1911 science_program="unknown",
1912 visit_id=2023103100227)),
1913 ("UCD-ITL-3800C-TS_C_20230730_000237_R22_S01.yaml",
1914 dict(telescope=None,
1915 instrument="LSST-UCDCam",
1916 can_see_sky=False,
1917 dark_time=3.082*u.s,
1918 detector_exposure_id=179029732609,
1919 detector_group="R22",
1920 detector_name="S01",
1921 detector_num=1,
1922 detector_serial="ITL-3800C-002",
1923 exposure_id=3023073000237,
1924 exposure_group="3023073000237",
1925 exposure_time=2.0*u.s,
1926 focus_z=0.0*u.mm,
1927 group_counter_end=237,
1928 group_counter_start=237,
1929 has_simulated_content=False,
1930 observation_counter=237,
1931 observation_id="TS_C_20230730_000237",
1932 observation_type="flat",
1933 observation_reason="flat",
1934 observing_day=20230730,
1935 observing_day_offset=astropy.time.TimeDelta(0.0, scale="tai", format="sec"),
1936 physical_filter="r",
1937 science_program="unknown",
1938 visit_id=3023073000237)),
1939 )
1940 for filename, expected in test_data:
1941 with self.subTest(f"Testing {filename}"):
1942 self.assertObservationInfoFromYaml(filename, dir=self.datadir, **expected)
1944 def test_compute_exposure_id(self):
1945 test_data = {
1946 (20240318, 43): 2024031800043,
1947 (20240318, 43, None): 2024031800043,
1948 ("2024-03-18", "42", "O"): 2024031800042,
1949 (20240318, "1", "H"): 4024031800001,
1950 # Pre phase-out of offsets
1951 (20231004, "1", "C"): 3023100400001,
1952 ("2025-04-17", 101, "P"): 5025041700101,
1953 (20250417, 42, "Q"): 6025041700042,
1954 (20250417, 42, "S"): 7025041700042,
1955 # Post phase-out of offsets
1956 (20250418, 43): 2025041800043,
1957 ("2023-10-05", 1, "C"): 2023100500001,
1958 ("2025-04-18", 101, "P"): 2025041800101,
1959 (20250418, 42, "Q"): 2025041800042,
1960 (20250418, 42, "S"): 2025041800042,
1961 }
1963 for inputs, expected in test_data.items():
1964 with self.subTest(inputs=inputs):
1965 self.assertEqual(
1966 lsst.obs.lsst.translators.lsst.LsstBaseTranslator.compute_exposure_id(*inputs),
1967 expected
1968 )
1970 def test_checker(self):
1971 filename = "latiss-future.yaml"
1972 from astro_metadata_translator.tests import read_test_file
1973 from astro_metadata_translator import ObservationInfo
1974 header = read_test_file(filename, self.datadir)
1975 obsInfo = ObservationInfo(header, pedantic=True, filename=filename)
1976 self.assertTrue(obsInfo)
1978 def test_fix_header(self):
1979 from astro_metadata_translator import fix_header
1980 from astro_metadata_translator.tests import read_test_file
1981 # Test that header fix up is working
1982 # Not all headers are used in metadata translation
1983 test_data = (
1984 ("latiss-AT_O_20210212_000006.yaml",
1985 dict(RASTART=260.024385071917)),
1986 ("latiss-AT_O_20210210_000011.yaml",
1987 dict(RASTART=355.41750341182313)),
1988 )
1989 for filename, expected in test_data:
1990 with self.subTest(f"Testing {filename}"):
1991 header = read_test_file(filename, dir=self.datadir)
1992 modified = fix_header(header)
1993 self.assertTrue(modified)
1994 for k, v in expected.items():
1995 self.assertEqual(header[k], v, f"Testing {k} in {filename}")
1998if __name__ == "__main__": 1998 ↛ 1999line 1998 didn't jump to line 1999 because the condition on line 1998 was never true
1999 unittest.main()