test_io.py 4.28 KB
Newer Older
BO ZHANG's avatar
BO ZHANG committed
1
2
3
4
5
6
7
"""
Identifier:     tests/test_fits_header_ops.py
Name:           test_fits_header_ops.py
Description:    test append_header
Author:         Bo Zhang
Created:        2023-12-15
Modified-History:
BO ZHANG's avatar
tweaks    
BO ZHANG committed
8
9
    2023-12-15, Bo Zhang, add TestFitsHeaderOps.test_append_header
    2023-12-15, Bo Zhang, add TestFitsHeaderOps.test_reformat_header
BO ZHANG's avatar
BO ZHANG committed
10
"""
BO ZHANG's avatar
BO ZHANG committed
11

BO ZHANG's avatar
BO ZHANG committed
12
import os
13
import unittest
BO ZHANG's avatar
BO ZHANG committed
14

15
16
from astropy.io import fits

BO ZHANG's avatar
tweaks    
BO ZHANG committed
17
18
19
20
21
22
from csst_common.io import (
    append_header,
    reformat_header,
    delete_section,
    get_proc_info,
    generate_meta,
BO ZHANG's avatar
BO ZHANG committed
23
    append_meta,
BO ZHANG's avatar
BO ZHANG committed
24
    extract_meta,
BO ZHANG's avatar
tweaks    
BO ZHANG committed
25
)
BO ZHANG's avatar
BO ZHANG committed
26

27

BO ZHANG's avatar
tweaks    
BO ZHANG committed
28
class TestFitsHeaderOps(unittest.TestCase):
29
30
31
32
33
    def test_append_header(self):
        h1 = fits.Header()
        h2 = fits.Header()

        h1.set("A", 1, "comment")
BO ZHANG's avatar
BO ZHANG committed
34
35
        h1.set("B", 1, "comment")
        h1.set("C", 1, "comment")
36
37
38
39
        h1.add_comment("=" * 72, before="A")
        h1.add_comment("one", before="A")
        h1.add_comment("=" * 72, before="A")

BO ZHANG's avatar
BO ZHANG committed
40
41
42
        h2.set("B", 2, "comment")
        h2.set("C", 2, "comment")
        h2.set("D", 2, "comment")
43
44
45
46
        h2.add_comment("=" * 72, before="B")
        h2.add_comment("another", before="B")
        h2.add_comment("=" * 72, before="B")

BO ZHANG's avatar
BO ZHANG committed
47
        h_update = append_header(h1, h2, duplicates="update")
48
        self.assertEqual(
BO ZHANG's avatar
BO ZHANG committed
49
            tuple(h_update.keys()),
50
51
52
53
54
55
            (
                "COMMENT",
                "COMMENT",
                "COMMENT",
                "A",
                "B",
BO ZHANG's avatar
BO ZHANG committed
56
                "C",
57
58
59
                "COMMENT",
                "COMMENT",
                "COMMENT",
BO ZHANG's avatar
BO ZHANG committed
60
                "D",
61
62
63
            ),
            "update mode failed",
        )
BO ZHANG's avatar
BO ZHANG committed
64
65
66
67
68
69
        self.assertEqual(h_update["A"], 1)
        self.assertEqual(h_update["B"], 2)
        self.assertEqual(h_update["C"], 2)
        self.assertEqual(h_update["D"], 2)

        h_delete = append_header(h1, h2, duplicates="delete")
70
        self.assertEqual(
BO ZHANG's avatar
BO ZHANG committed
71
            tuple(h_delete.keys()),
72
73
74
75
76
77
78
79
80
81
            (
                "COMMENT",
                "COMMENT",
                "COMMENT",
                "A",
                "COMMENT",
                "COMMENT",
                "COMMENT",
                "B",
                "C",
BO ZHANG's avatar
BO ZHANG committed
82
                "D",
83
84
85
            ),
            "delete mode failed",
        )
BO ZHANG's avatar
BO ZHANG committed
86
87
88
89
        self.assertEqual(h_delete["A"], 1)
        self.assertEqual(h_delete["B"], 2)
        self.assertEqual(h_delete["C"], 2)
        self.assertEqual(h_delete["D"], 2)
BO ZHANG's avatar
BO ZHANG committed
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112

    def test_reformat_header(self):
        h = fits.Header()
        h.add_comment("A")
        h.add_comment("B")
        h.add_comment("B")
        h.add_comment("C")
        h.add_comment("X")
        h.set("A", 1)
        h.set("SIMPLE", True)
        h.set("NAXIS1", 1)

        h_rfmt = reformat_header(h, strip=True, comment="WCS info")
        self.assertEqual(
            tuple(h_rfmt.keys()),
            ("COMMENT", "COMMENT", "COMMENT", "A", "NAXIS1"),
        )

        h_rfmt = reformat_header(h, strip=False, comment="WCS info")
        self.assertEqual(
            tuple(h_rfmt.keys()),
            ("COMMENT", "COMMENT", "COMMENT", "A", "SIMPLE", "NAXIS1"),
        )
BO ZHANG's avatar
BO ZHANG committed
113
114
115

    def test_delete_section(self):
        h = fits.Header()
BO ZHANG's avatar
BO ZHANG committed
116
117
118
119
120
121
122
123
124
125
126
        h.append(("COMMENT", "A", ""), bottom=True)
        h.append(("COMMENT", "C", ""), bottom=True)
        h.append(("COMMENT", "B", ""), bottom=True)
        h.append(("SIMPLE", True, ""), bottom=True)
        h.append(("NAXIS1", 1, ""), bottom=True)
        h.append(("COMMENT", "=" * 72, ""), bottom=True)
        h.append(("COMMENT", "WCS", ""), bottom=True)
        h.append(("COMMENT", "=" * 72, ""), bottom=True)
        h.append(("A", 1, ""), bottom=True)
        h.append(("COMMENT", "=" * 72, ""), bottom=True)
        h.append(("COMMENT", "=" * 72, ""), bottom=True)
BO ZHANG's avatar
BO ZHANG committed
127
128
129

        h_del = delete_section(h, title="WCS")
        self.assertEqual(len(h_del.cards), 7)
BO ZHANG's avatar
BO ZHANG committed
130
131
132

    def test_get_proc_info(self):
        proc_info = get_proc_info()
BO ZHANG's avatar
tweaks    
BO ZHANG committed
133
        self.assertEquals(proc_info["BUILD"], "__unset__")
BO ZHANG's avatar
tweaks    
BO ZHANG committed
134
135
136

    def test_generate_meta(self):
        h = generate_meta()
BO ZHANG's avatar
BO ZHANG committed
137
        self.assertIsInstance(h, dict)
BO ZHANG's avatar
tweaks    
BO ZHANG committed
138

BO ZHANG's avatar
BO ZHANG committed
139
    def test_append_meta(self):
BO ZHANG's avatar
BO ZHANG committed
140
        hdulist = fits.HDUList([fits.PrimaryHDU()])
BO ZHANG's avatar
BO ZHANG committed
141
142
        meta = generate_meta(obs_id="123456")
        hdulist = append_meta(hdulist, meta)
BO ZHANG's avatar
BO ZHANG committed
143
144
145
        self.assertIn("META", set(hdulist[0].header.keys()))
        meta = extract_meta(hdulist)
        self.assertEqual(meta["obs_id"], "123456")