|
2 | 2 |
|
3 | 3 | import numpy as np |
4 | 4 |
|
5 | | -from pySNOM.images import LineLevel, DataTypes |
| 5 | +from pySNOM.images import LineLevel, BackgroundPolyFit, SimpleNormalize, DataTypes, mask_from_datacondition |
6 | 6 |
|
7 | 7 |
|
8 | 8 | class TestLineLevel(unittest.TestCase): |
@@ -46,13 +46,131 @@ def test_difference(self): |
46 | 46 | d = np.arange(12).reshape(3, -1)[:, [0, 1, 3]] |
47 | 47 | l = LineLevel(method="difference", datatype=DataTypes.Phase) |
48 | 48 | out = l.transform(d) |
49 | | - np.testing.assert_almost_equal(out, [[-4.0, -3.0, -1.0], [0.0, 1.0, 3.0]]) |
| 49 | + np.testing.assert_almost_equal(out, [[-4., -3., -1.], [0., 1., 3.], [8., 9., 11.]]) |
50 | 50 | l = LineLevel(method="difference", datatype=DataTypes.Amplitude) |
51 | 51 | out = l.transform(d) |
52 | 52 | np.testing.assert_almost_equal( |
53 | | - out, [[0.0, 0.2, 0.6], [2.2222222, 2.7777778, 3.8888889]] |
| 53 | + out, [[0., 0.2, 0.6], [ 2.2222222, 2.7777778, 3.8888889], [8., 9., 11.]] |
54 | 54 | ) |
55 | 55 |
|
| 56 | + def test_masking_mean(self): |
| 57 | + d = np.zeros([8,10]) |
| 58 | + d[2:6,3:7] = 1 |
| 59 | + mask = np.ones([8,10]) |
| 60 | + mask[2:6,3:7] = np.nan |
| 61 | + |
| 62 | + l = LineLevel(method="mean", datatype=DataTypes.Phase) |
| 63 | + |
| 64 | + out = l.transform(d) |
| 65 | + np.testing.assert_almost_equal(out[5,0], -0.4) |
| 66 | + out = l.transform(d,mask=mask) |
| 67 | + np.testing.assert_almost_equal(out[5,0], 0.0) |
| 68 | + |
| 69 | + def test_masking_median(self): |
| 70 | + d = np.zeros([8,10]) |
| 71 | + d[2:6,2:9] = 1 |
| 72 | + mask = np.ones([8,10]) |
| 73 | + mask[2:6,2:9] = np.nan |
| 74 | + |
| 75 | + l = LineLevel(method="median", datatype=DataTypes.Phase) |
| 76 | + |
| 77 | + out = l.transform(d) |
| 78 | + np.testing.assert_almost_equal(out[5,0], -1.0) |
| 79 | + out = l.transform(d,mask=mask) |
| 80 | + np.testing.assert_almost_equal(out[5,0], 0.0) |
| 81 | + |
| 82 | + def test_difference_masking(self): |
| 83 | + d = np.zeros([8,10]) |
| 84 | + d[2:6,2:9] = 1 |
| 85 | + mask = np.ones([8,10]) |
| 86 | + mask[2:6,2:9] = np.nan |
| 87 | + |
| 88 | + l = LineLevel(method="difference", datatype=DataTypes.Phase) |
| 89 | + out = l.transform(d) |
| 90 | + np.testing.assert_almost_equal(out[5,0], 1.0) |
| 91 | + np.testing.assert_almost_equal(out[1,0], -1.0) |
| 92 | + np.testing.assert_almost_equal(out[5,2], 2.0) |
| 93 | + |
| 94 | +class TestBackgroundPolyFit(unittest.TestCase): |
| 95 | + def test_withmask(self): |
| 96 | + d = np.ones([10,10]) |
| 97 | + d[4:8,4:8] = 10 |
| 98 | + mask = np.ones([10,10]) |
| 99 | + mask[4:8,4:8] = np.nan |
| 100 | + |
| 101 | + t = BackgroundPolyFit(xorder=1,yorder=1,datatype=DataTypes.Phase) |
| 102 | + out = t.transform(d,mask=mask) |
| 103 | + np.testing.assert_almost_equal(out[0,0], 0.0) |
| 104 | + np.testing.assert_almost_equal(out[9,9], 0.0) |
| 105 | + |
| 106 | + t = BackgroundPolyFit(xorder=1,yorder=1,datatype=DataTypes.Amplitude) |
| 107 | + out = t.transform(d,mask=mask) |
| 108 | + np.testing.assert_almost_equal(out[0,0], 1.0) |
| 109 | + np.testing.assert_almost_equal(out[9,9], 1.0) |
| 110 | + |
| 111 | + def test_withoutmask(self): |
| 112 | + d = np.ones([10,10]) |
| 113 | + d[4:8,4:8] = 10 |
| 114 | + mask = np.ones([10,10]) |
| 115 | + mask[4:8,4:8] = np.nan |
| 116 | + |
| 117 | + t = BackgroundPolyFit(xorder=1,yorder=1,datatype=DataTypes.Phase) |
| 118 | + out = t.transform(d) |
| 119 | + np.testing.assert_almost_equal(out[0,0], -0.2975206611570238) |
| 120 | + np.testing.assert_almost_equal(out[9,9], -3.439338842975202) |
| 121 | + |
| 122 | + t = BackgroundPolyFit(xorder=1,yorder=1,datatype=DataTypes.Amplitude) |
| 123 | + out = t.transform(d) |
| 124 | + np.testing.assert_almost_equal(out[0,0], 0.7707006369426758) |
| 125 | + np.testing.assert_almost_equal(out[9,9], 0.22525876833718098) |
| 126 | + |
| 127 | +class TestHelperFunction(unittest.TestCase): |
| 128 | + |
| 129 | + def test_mask_from_condition(self): |
| 130 | + d = np.ones([2,2]) |
| 131 | + d[0,0] = 0 |
| 132 | + out = mask_from_datacondition(d<1) |
| 133 | + |
| 134 | + np.testing.assert_equal(out[0,0], np.nan) |
| 135 | + |
| 136 | +class TestSimpleNormalize(unittest.TestCase): |
| 137 | + |
| 138 | + def test_median(self): |
| 139 | + d = np.zeros([8,10]) |
| 140 | + d[2:9,1:9] = 1 |
| 141 | + mask = np.ones([8,10]) |
| 142 | + mask[2:9,1:9] = np.nan |
| 143 | + |
| 144 | + l = SimpleNormalize(method="median", datatype=DataTypes.Phase) |
| 145 | + |
| 146 | + out = l.transform(d) |
| 147 | + np.testing.assert_almost_equal(out[0,0], -1.0) |
| 148 | + out = l.transform(d,mask=mask) |
| 149 | + np.testing.assert_almost_equal(out[0,0], 0.0) |
| 150 | + |
| 151 | + def test_mean(self): |
| 152 | + d = np.zeros([8,10]) |
| 153 | + d[2:9,1:9] = 1 |
| 154 | + mask = np.ones([8,10]) |
| 155 | + mask[2:9,1:9] = np.nan |
| 156 | + |
| 157 | + l = SimpleNormalize(method="mean", datatype=DataTypes.Phase) |
| 158 | + |
| 159 | + out = l.transform(d) |
| 160 | + np.testing.assert_almost_equal(out[0,0], -0.6) |
| 161 | + out = l.transform(d,mask=mask) |
| 162 | + np.testing.assert_almost_equal(out[0,0], 0.0) |
| 163 | + |
| 164 | + def test_min(self): |
| 165 | + d=np.asarray([1.0, 2.0, 3.0]) |
| 166 | + mask = np.asarray([np.nan, 1, 1]) |
| 167 | + |
| 168 | + l = SimpleNormalize(method="min", datatype=DataTypes.Phase) |
| 169 | + |
| 170 | + out = l.transform(d) |
| 171 | + np.testing.assert_almost_equal(out, [0.0, 1.0, 2.0]) |
| 172 | + out = l.transform(d,mask=mask) |
| 173 | + np.testing.assert_almost_equal(out, [-1.0,0.0,1.0]) |
56 | 174 |
|
57 | 175 | if __name__ == "__main__": |
58 | 176 | unittest.main() |
0 commit comments