Skip to content
test_fits_header_ops.py 3.64 KiB
Newer Older
BO ZHANG's avatar
BO ZHANG committed
"""
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
BO ZHANG committed
    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
"""
BO ZHANG's avatar
BO ZHANG committed

import unittest
BO ZHANG's avatar
BO ZHANG committed

from astropy.io import fits

BO ZHANG's avatar
BO ZHANG committed
from csst_common.io import append_header, reformat_header, delete_section
BO ZHANG's avatar
BO ZHANG committed

BO ZHANG's avatar
BO ZHANG committed
class TestFitsHeaderOps(unittest.TestCase):
    def test_append_header(self):
        h1 = fits.Header()
        h2 = fits.Header()

        h1.set("A", 1, "comment")
BO ZHANG's avatar
BO ZHANG committed
        h1.set("B", 1, "comment")
        h1.set("C", 1, "comment")
        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
        h2.set("B", 2, "comment")
        h2.set("C", 2, "comment")
        h2.set("D", 2, "comment")
        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
        h_update = append_header(h1, h2, duplicates="update")
        self.assertEqual(
BO ZHANG's avatar
BO ZHANG committed
            tuple(h_update.keys()),
            (
                "COMMENT",
                "COMMENT",
                "COMMENT",
                "A",
                "B",
BO ZHANG's avatar
BO ZHANG committed
                "C",
                "COMMENT",
                "COMMENT",
                "COMMENT",
BO ZHANG's avatar
BO ZHANG committed
                "D",
            ),
            "update mode failed",
        )
BO ZHANG's avatar
BO ZHANG committed
        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")
        self.assertEqual(
BO ZHANG's avatar
BO ZHANG committed
            tuple(h_delete.keys()),
            (
                "COMMENT",
                "COMMENT",
                "COMMENT",
                "A",
                "COMMENT",
                "COMMENT",
                "COMMENT",
                "B",
                "C",
BO ZHANG's avatar
BO ZHANG committed
                "D",
            ),
            "delete mode failed",
        )
BO ZHANG's avatar
BO ZHANG committed
        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

    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

    def test_delete_section(self):
        h = fits.Header()
BO ZHANG's avatar
BO ZHANG committed
        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

        h_del = delete_section(h, title="WCS")
        self.assertEqual(len(h_del.cards), 7)