File: test_darkflat.py

package info (click to toggle)
pynpoint 0.11.1-2
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 2,352 kB
  • sloc: python: 15,971; makefile: 73
file content (135 lines) | stat: -rw-r--r-- 4,039 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import os

import h5py
import pytest
import numpy as np

from pynpoint.core.pypeline import Pypeline
from pynpoint.processing.darkflat import DarkCalibrationModule, FlatCalibrationModule
from pynpoint.util.tests import create_config, remove_test_data


class TestDarkFlat:

    def setup_class(self) -> None:

        self.limit = 1e-10
        self.test_dir = os.path.dirname(__file__) + "/"

        np.random.seed(1)

        images = np.random.normal(loc=0, scale=2e-4, size=(5, 11, 11))
        dark = np.random.normal(loc=0, scale=2e-4, size=(5, 11, 11))
        flat = np.random.normal(loc=0, scale=2e-4, size=(5, 11, 11))
        crop = np.random.normal(loc=0, scale=2e-4, size=(5, 7, 7))

        with h5py.File(self.test_dir + "PynPoint_database.hdf5", "w") as hdf_file:
            hdf_file.create_dataset("images", data=images)
            hdf_file.create_dataset("dark", data=dark)
            hdf_file.create_dataset("flat", data=flat)
            hdf_file.create_dataset("crop", data=crop)

        create_config(self.test_dir + "PynPoint_config.ini")

        self.pipeline = Pypeline(self.test_dir, self.test_dir, self.test_dir)

    def teardown_class(self) -> None:

        remove_test_data(self.test_dir)

    def test_input_data(self) -> None:

        data = self.pipeline.get_data("dark")
        assert np.sum(data) == pytest.approx(
            -2.0262345764957305e-05, rel=self.limit, abs=0.0
        )
        assert data.shape == (5, 11, 11)

        data = self.pipeline.get_data("flat")
        assert np.sum(data) == pytest.approx(
            0.0076413379497053, rel=self.limit, abs=0.0
        )
        assert data.shape == (5, 11, 11)

    def test_dark_calibration(self) -> None:

        module = DarkCalibrationModule(
            name_in="dark",
            image_in_tag="images",
            dark_in_tag="dark",
            image_out_tag="dark_cal",
        )

        self.pipeline.add_module(module)
        self.pipeline.run_module("dark")

        data = self.pipeline.get_data("dark_cal")
        assert np.sum(data) == pytest.approx(
            0.00717386583629883, rel=self.limit, abs=0.0
        )
        assert data.shape == (5, 11, 11)

    def test_flat_calibration(self) -> None:

        module = FlatCalibrationModule(
            name_in="flat",
            image_in_tag="dark_cal",
            flat_in_tag="flat",
            image_out_tag="flat_cal",
        )

        self.pipeline.add_module(module)
        self.pipeline.run_module("flat")

        data = self.pipeline.get_data("flat_cal")
        assert np.sum(data) == pytest.approx(
            0.00717439711853594, rel=self.limit, abs=0.0
        )
        assert data.shape == (5, 11, 11)

    def test_flat_crop(self) -> None:

        module = FlatCalibrationModule(
            name_in="flat_crop",
            image_in_tag="crop",
            flat_in_tag="flat",
            image_out_tag="flat_crop",
        )

        self.pipeline.add_module(module)

        with pytest.warns(UserWarning) as warning:
            self.pipeline.run_module("flat_crop")

        assert len(warning) == 1

        assert (
            warning[0].message.args[0]
            == "The calibration images were cropped around their "
            "center to match the shape of the science images."
        )

        data = self.pipeline.get_data("flat_crop")
        assert np.sum(data) == pytest.approx(
            -0.003242901413605404, rel=self.limit, abs=0.0
        )
        assert data.shape == (5, 7, 7)

    def test_flat_too_small(self) -> None:

        module = FlatCalibrationModule(
            name_in="flat_small",
            image_in_tag="flat",
            flat_in_tag="crop",
            image_out_tag="flat_small",
        )

        self.pipeline.add_module(module)

        with pytest.raises(ValueError) as error:
            self.pipeline.run_module("flat_small")

        assert (
            str(error.value) == "Shape of the calibration images is smaller than the "
            "science images."
        )