From d1fcb4b766a8a97b229d04539b13bd9f732efe2b Mon Sep 17 00:00:00 2001 From: michealroberts Date: Tue, 26 Nov 2024 15:51:31 +0000 Subject: [PATCH] fix: amend writeFloat() to handle scientific notation correctly in @observerly/iris fix: amend writeFloat() to handle scientific notation correctly in @observerly/iris --- coverage.txt | 213 +++++++++++++++++++++------------------- pkg/fits/header.go | 34 ++++++- pkg/fits/header_test.go | 72 ++++++++++++++ 3 files changed, 212 insertions(+), 107 deletions(-) diff --git a/coverage.txt b/coverage.txt index f80fe6a..f4c15dd 100644 --- a/coverage.txt +++ b/coverage.txt @@ -144,6 +144,13 @@ github.com/observerly/iris/pkg/ifd/entry.go:44.39,46.13 2 0 github.com/observerly/iris/pkg/ifd/entry.go:57.39,57.56 1 0 github.com/observerly/iris/pkg/ifd/entry.go:59.49,59.79 1 0 github.com/observerly/iris/pkg/ifd/entry.go:61.44,61.71 1 0 +github.com/observerly/iris/pkg/image/gray16.go:24.88,26.28 1 1 +github.com/observerly/iris/pkg/image/gray16.go:26.28,28.3 1 0 +github.com/observerly/iris/pkg/image/gray16.go:31.2,40.12 5 1 +github.com/observerly/iris/pkg/image/gray16.go:40.12,42.3 1 0 +github.com/observerly/iris/pkg/image/gray16.go:45.2,45.35 1 1 +github.com/observerly/iris/pkg/image/gray16.go:45.35,52.3 4 9 +github.com/observerly/iris/pkg/image/gray16.go:55.2,55.17 1 1 github.com/observerly/iris/pkg/frames/bias.go:30.144,36.31 3 7 github.com/observerly/iris/pkg/frames/bias.go:36.31,38.3 1 15 github.com/observerly/iris/pkg/frames/bias.go:41.2,50.21 2 7 @@ -198,13 +205,6 @@ github.com/observerly/iris/pkg/frames/light.go:74.2,120.8 7 1 github.com/observerly/iris/pkg/frames/master.go:17.79,21.16 2 1 github.com/observerly/iris/pkg/frames/master.go:21.16,23.3 1 0 github.com/observerly/iris/pkg/frames/master.go:26.2,35.8 2 1 -github.com/observerly/iris/pkg/image/gray16.go:24.88,26.28 1 1 -github.com/observerly/iris/pkg/image/gray16.go:26.28,28.3 1 0 -github.com/observerly/iris/pkg/image/gray16.go:31.2,40.12 5 1 -github.com/observerly/iris/pkg/image/gray16.go:40.12,42.3 1 0 -github.com/observerly/iris/pkg/image/gray16.go:45.2,45.35 1 1 -github.com/observerly/iris/pkg/image/gray16.go:45.35,52.3 4 9 -github.com/observerly/iris/pkg/image/gray16.go:55.2,55.17 1 1 github.com/observerly/iris/pkg/palette/palette.go:40.61,56.12 8 1 github.com/observerly/iris/pkg/palette/palette.go:56.12,63.17 5 1 github.com/observerly/iris/pkg/palette/palette.go:63.17,65.4 1 0 @@ -398,15 +398,15 @@ github.com/observerly/iris/pkg/statistics/stats.go:207.24,212.3 3 770008 github.com/observerly/iris/pkg/statistics/stats.go:216.2,218.11 2 5 github.com/observerly/iris/pkg/statistics/stats.go:234.100,240.24 3 3 github.com/observerly/iris/pkg/statistics/stats.go:240.24,242.7 2 769000 -github.com/observerly/iris/pkg/statistics/stats.go:242.7,245.43 2 769099 +github.com/observerly/iris/pkg/statistics/stats.go:242.7,245.43 2 769111 github.com/observerly/iris/pkg/statistics/stats.go:245.43,246.10 1 769000 github.com/observerly/iris/pkg/statistics/stats.go:250.3,250.16 1 769000 github.com/observerly/iris/pkg/statistics/stats.go:253.2,255.15 2 3 github.com/observerly/iris/pkg/statistics/stats.go:266.96,272.24 3 3 github.com/observerly/iris/pkg/statistics/stats.go:272.24,275.7 2 769000 -github.com/observerly/iris/pkg/statistics/stats.go:275.7,279.43 3 769136 -github.com/observerly/iris/pkg/statistics/stats.go:279.43,280.13 1 90 -github.com/observerly/iris/pkg/statistics/stats.go:283.4,284.45 2 769046 +github.com/observerly/iris/pkg/statistics/stats.go:275.7,279.43 3 769194 +github.com/observerly/iris/pkg/statistics/stats.go:279.43,280.13 1 127 +github.com/observerly/iris/pkg/statistics/stats.go:283.4,284.45 2 769067 github.com/observerly/iris/pkg/statistics/stats.go:284.45,285.10 1 769000 github.com/observerly/iris/pkg/statistics/stats.go:289.3,289.50 1 769000 github.com/observerly/iris/pkg/statistics/stats.go:294.2,296.11 2 3 @@ -576,18 +576,25 @@ github.com/observerly/iris/pkg/fits/header.go:530.18,532.3 1 0 github.com/observerly/iris/pkg/fits/header.go:534.2,534.23 1 85 github.com/observerly/iris/pkg/fits/header.go:534.23,536.3 1 8 github.com/observerly/iris/pkg/fits/header.go:538.2,538.59 1 85 -github.com/observerly/iris/pkg/fits/header.go:544.73,545.18 1 13 -github.com/observerly/iris/pkg/fits/header.go:545.18,547.3 1 0 -github.com/observerly/iris/pkg/fits/header.go:549.2,549.23 1 13 -github.com/observerly/iris/pkg/fits/header.go:549.23,551.3 1 2 -github.com/observerly/iris/pkg/fits/header.go:553.2,553.59 1 13 -github.com/observerly/iris/pkg/fits/header.go:557.33,560.2 2 11 -github.com/observerly/iris/pkg/fits/header.go:563.46,600.2 22 1 -github.com/observerly/iris/pkg/fits/header.go:605.92,612.37 3 0 -github.com/observerly/iris/pkg/fits/header.go:612.37,615.22 2 0 -github.com/observerly/iris/pkg/fits/header.go:615.22,617.4 1 0 -github.com/observerly/iris/pkg/fits/header.go:620.3,623.29 2 0 -github.com/observerly/iris/pkg/fits/header.go:626.2,626.18 1 0 +github.com/observerly/iris/pkg/fits/header.go:544.73,546.18 1 17 +github.com/observerly/iris/pkg/fits/header.go:546.18,548.3 1 0 +github.com/observerly/iris/pkg/fits/header.go:548.8,548.25 1 17 +github.com/observerly/iris/pkg/fits/header.go:548.25,550.3 1 14 +github.com/observerly/iris/pkg/fits/header.go:553.2,553.23 1 17 +github.com/observerly/iris/pkg/fits/header.go:553.23,555.3 1 2 +github.com/observerly/iris/pkg/fits/header.go:555.8,555.30 1 15 +github.com/observerly/iris/pkg/fits/header.go:555.30,557.3 1 14 +github.com/observerly/iris/pkg/fits/header.go:559.2,566.61 3 17 +github.com/observerly/iris/pkg/fits/header.go:566.61,569.3 1 4 +github.com/observerly/iris/pkg/fits/header.go:569.8,572.3 1 13 +github.com/observerly/iris/pkg/fits/header.go:575.2,575.66 1 17 +github.com/observerly/iris/pkg/fits/header.go:581.33,584.2 2 11 +github.com/observerly/iris/pkg/fits/header.go:587.46,624.2 22 1 +github.com/observerly/iris/pkg/fits/header.go:629.92,636.37 3 0 +github.com/observerly/iris/pkg/fits/header.go:636.37,639.22 2 0 +github.com/observerly/iris/pkg/fits/header.go:639.22,641.4 1 0 +github.com/observerly/iris/pkg/fits/header.go:644.3,647.29 2 0 +github.com/observerly/iris/pkg/fits/header.go:650.2,650.18 1 0 github.com/observerly/iris/pkg/photometry/convolution.go:17.94,20.36 2 1 github.com/observerly/iris/pkg/photometry/convolution.go:20.36,21.37 1 400 github.com/observerly/iris/pkg/photometry/convolution.go:21.37,32.23 5 240000 @@ -631,86 +638,86 @@ github.com/observerly/iris/pkg/photometry/noise.go:79.45,81.6 1 4138 github.com/observerly/iris/pkg/photometry/noise.go:85.4,85.25 1 465 github.com/observerly/iris/pkg/photometry/noise.go:89.3,89.15 1 31 github.com/observerly/iris/pkg/photometry/noise.go:93.2,95.19 2 1 -github.com/observerly/iris/pkg/photometry/stars.go:36.99,49.2 2 8 -github.com/observerly/iris/pkg/photometry/stars.go:51.51,53.2 1 7 -github.com/observerly/iris/pkg/photometry/stars.go:55.51,57.2 1 5 -github.com/observerly/iris/pkg/photometry/stars.go:59.59,61.2 1 6 -github.com/observerly/iris/pkg/photometry/stars.go:63.55,65.2 1 3 -github.com/observerly/iris/pkg/photometry/stars.go:67.101,73.2 3 2 -github.com/observerly/iris/pkg/photometry/stars.go:80.97,111.2 13 1 -github.com/observerly/iris/pkg/photometry/stars.go:121.119,125.25 2 95855 -github.com/observerly/iris/pkg/photometry/stars.go:125.25,129.39 2 862695 -github.com/observerly/iris/pkg/photometry/stars.go:129.39,132.4 2 862223 -github.com/observerly/iris/pkg/photometry/stars.go:135.2,137.23 2 95855 -github.com/observerly/iris/pkg/photometry/stars.go:148.89,152.25 2 7 -github.com/observerly/iris/pkg/photometry/stars.go:152.25,153.20 1 10253216 -github.com/observerly/iris/pkg/photometry/stars.go:153.20,164.22 2 12528 -github.com/observerly/iris/pkg/photometry/stars.go:164.22,168.83 2 12521 -github.com/observerly/iris/pkg/photometry/stars.go:168.83,170.6 1 4229 -github.com/observerly/iris/pkg/photometry/stars.go:174.4,174.29 1 12528 -github.com/observerly/iris/pkg/photometry/stars.go:178.2,178.14 1 7 -github.com/observerly/iris/pkg/photometry/stars.go:189.95,202.34 6 5 -github.com/observerly/iris/pkg/photometry/stars.go:202.34,208.3 3 85435 -github.com/observerly/iris/pkg/photometry/stars.go:210.2,217.29 4 5 -github.com/observerly/iris/pkg/photometry/stars.go:217.29,223.44 3 10420 -github.com/observerly/iris/pkg/photometry/stars.go:223.44,226.4 2 10174 -github.com/observerly/iris/pkg/photometry/stars.go:229.2,229.31 1 5 -github.com/observerly/iris/pkg/photometry/stars.go:232.85,249.26 8 6 -github.com/observerly/iris/pkg/photometry/stars.go:249.26,254.38 2 8582 -github.com/observerly/iris/pkg/photometry/stars.go:254.38,255.41 1 18284 -github.com/observerly/iris/pkg/photometry/stars.go:255.41,256.13 1 1130 -github.com/observerly/iris/pkg/photometry/stars.go:259.4,259.39 1 17154 -github.com/observerly/iris/pkg/photometry/stars.go:259.39,260.42 1 44144 -github.com/observerly/iris/pkg/photometry/stars.go:260.42,261.14 1 4636 -github.com/observerly/iris/pkg/photometry/stars.go:265.5,268.53 2 39508 -github.com/observerly/iris/pkg/photometry/stars.go:268.53,275.22 5 224935 -github.com/observerly/iris/pkg/photometry/stars.go:275.22,276.27 1 7278 -github.com/observerly/iris/pkg/photometry/stars.go:283.3,293.17 5 1304 -github.com/observerly/iris/pkg/photometry/stars.go:293.17,295.4 1 180 -github.com/observerly/iris/pkg/photometry/stars.go:295.9,296.24 1 1124 -github.com/observerly/iris/pkg/photometry/stars.go:296.24,298.5 1 3966 -github.com/observerly/iris/pkg/photometry/stars.go:300.4,300.38 1 1124 -github.com/observerly/iris/pkg/photometry/stars.go:303.3,303.19 1 1304 -github.com/observerly/iris/pkg/photometry/stars.go:306.2,309.31 3 6 -github.com/observerly/iris/pkg/photometry/stars.go:319.106,321.26 1 3 -github.com/observerly/iris/pkg/photometry/stars.go:321.26,324.71 2 665 -github.com/observerly/iris/pkg/photometry/stars.go:324.71,330.39 3 1285 -github.com/observerly/iris/pkg/photometry/stars.go:330.39,331.40 1 42405 -github.com/observerly/iris/pkg/photometry/stars.go:331.40,336.46 3 1399365 -github.com/observerly/iris/pkg/photometry/stars.go:336.46,338.20 2 1377090 -github.com/observerly/iris/pkg/photometry/stars.go:338.20,340.8 1 1362841 -github.com/observerly/iris/pkg/photometry/stars.go:343.6,345.19 3 1399365 -github.com/observerly/iris/pkg/photometry/stars.go:350.4,353.19 3 1285 -github.com/observerly/iris/pkg/photometry/stars.go:353.19,355.5 1 0 -github.com/observerly/iris/pkg/photometry/stars.go:357.4,372.44 10 1285 -github.com/observerly/iris/pkg/photometry/stars.go:372.44,374.5 1 1285 -github.com/observerly/iris/pkg/photometry/stars.go:376.4,384.16 2 1285 -github.com/observerly/iris/pkg/photometry/stars.go:388.2,388.14 1 3 -github.com/observerly/iris/pkg/photometry/stars.go:398.143,403.26 3 2 -github.com/observerly/iris/pkg/photometry/stars.go:403.26,411.32 4 417 -github.com/observerly/iris/pkg/photometry/stars.go:411.32,412.33 1 13761 -github.com/observerly/iris/pkg/photometry/stars.go:412.33,414.29 2 454113 -github.com/observerly/iris/pkg/photometry/stars.go:414.29,415.14 1 121764 -github.com/observerly/iris/pkg/photometry/stars.go:417.5,423.47 4 332349 -github.com/observerly/iris/pkg/photometry/stars.go:423.47,425.15 2 329125 -github.com/observerly/iris/pkg/photometry/stars.go:425.15,427.7 1 180226 -github.com/observerly/iris/pkg/photometry/stars.go:429.5,431.13 3 332349 -github.com/observerly/iris/pkg/photometry/stars.go:435.3,435.18 1 417 -github.com/observerly/iris/pkg/photometry/stars.go:435.18,437.4 1 0 -github.com/observerly/iris/pkg/photometry/stars.go:439.3,442.19 2 417 -github.com/observerly/iris/pkg/photometry/stars.go:442.19,443.12 1 0 -github.com/observerly/iris/pkg/photometry/stars.go:447.3,453.42 4 417 -github.com/observerly/iris/pkg/photometry/stars.go:453.42,454.43 1 6815 -github.com/observerly/iris/pkg/photometry/stars.go:454.43,457.29 2 116129 -github.com/observerly/iris/pkg/photometry/stars.go:457.29,458.14 1 44028 -github.com/observerly/iris/pkg/photometry/stars.go:461.5,465.47 3 72101 -github.com/observerly/iris/pkg/photometry/stars.go:465.47,467.15 2 71847 -github.com/observerly/iris/pkg/photometry/stars.go:467.15,469.7 1 54125 -github.com/observerly/iris/pkg/photometry/stars.go:471.5,472.18 2 72101 -github.com/observerly/iris/pkg/photometry/stars.go:477.3,481.81 3 417 -github.com/observerly/iris/pkg/photometry/stars.go:481.81,482.12 1 79 -github.com/observerly/iris/pkg/photometry/stars.go:486.3,495.25 5 338 -github.com/observerly/iris/pkg/photometry/stars.go:499.2,501.39 2 2 +github.com/observerly/iris/pkg/photometry/stars.go:54.99,67.2 2 8 +github.com/observerly/iris/pkg/photometry/stars.go:71.51,73.2 1 7 +github.com/observerly/iris/pkg/photometry/stars.go:77.51,79.2 1 5 +github.com/observerly/iris/pkg/photometry/stars.go:83.59,85.2 1 6 +github.com/observerly/iris/pkg/photometry/stars.go:89.55,91.2 1 3 +github.com/observerly/iris/pkg/photometry/stars.go:95.101,101.2 3 2 +github.com/observerly/iris/pkg/photometry/stars.go:106.97,137.2 13 1 +github.com/observerly/iris/pkg/photometry/stars.go:143.119,147.25 2 95855 +github.com/observerly/iris/pkg/photometry/stars.go:147.25,151.39 2 862695 +github.com/observerly/iris/pkg/photometry/stars.go:151.39,154.4 2 862167 +github.com/observerly/iris/pkg/photometry/stars.go:157.2,159.23 2 95855 +github.com/observerly/iris/pkg/photometry/stars.go:166.89,170.25 2 7 +github.com/observerly/iris/pkg/photometry/stars.go:170.25,171.20 1 10253216 +github.com/observerly/iris/pkg/photometry/stars.go:171.20,182.22 2 12528 +github.com/observerly/iris/pkg/photometry/stars.go:182.22,186.83 2 12521 +github.com/observerly/iris/pkg/photometry/stars.go:186.83,188.6 1 4229 +github.com/observerly/iris/pkg/photometry/stars.go:192.4,192.29 1 12528 +github.com/observerly/iris/pkg/photometry/stars.go:196.2,196.14 1 7 +github.com/observerly/iris/pkg/photometry/stars.go:203.95,216.34 6 5 +github.com/observerly/iris/pkg/photometry/stars.go:216.34,222.3 3 85435 +github.com/observerly/iris/pkg/photometry/stars.go:224.2,231.29 4 5 +github.com/observerly/iris/pkg/photometry/stars.go:231.29,237.44 3 10420 +github.com/observerly/iris/pkg/photometry/stars.go:237.44,240.4 2 10174 +github.com/observerly/iris/pkg/photometry/stars.go:243.2,243.31 1 5 +github.com/observerly/iris/pkg/photometry/stars.go:248.85,265.26 8 6 +github.com/observerly/iris/pkg/photometry/stars.go:265.26,270.38 2 8582 +github.com/observerly/iris/pkg/photometry/stars.go:270.38,271.41 1 18284 +github.com/observerly/iris/pkg/photometry/stars.go:271.41,272.13 1 1130 +github.com/observerly/iris/pkg/photometry/stars.go:275.4,275.39 1 17154 +github.com/observerly/iris/pkg/photometry/stars.go:275.39,276.42 1 44144 +github.com/observerly/iris/pkg/photometry/stars.go:276.42,277.14 1 4636 +github.com/observerly/iris/pkg/photometry/stars.go:281.5,284.53 2 39508 +github.com/observerly/iris/pkg/photometry/stars.go:284.53,291.22 5 224935 +github.com/observerly/iris/pkg/photometry/stars.go:291.22,292.27 1 7278 +github.com/observerly/iris/pkg/photometry/stars.go:299.3,309.17 5 1304 +github.com/observerly/iris/pkg/photometry/stars.go:309.17,311.4 1 180 +github.com/observerly/iris/pkg/photometry/stars.go:311.9,312.24 1 1124 +github.com/observerly/iris/pkg/photometry/stars.go:312.24,314.5 1 3966 +github.com/observerly/iris/pkg/photometry/stars.go:316.4,316.38 1 1124 +github.com/observerly/iris/pkg/photometry/stars.go:319.3,319.19 1 1304 +github.com/observerly/iris/pkg/photometry/stars.go:322.2,325.31 3 6 +github.com/observerly/iris/pkg/photometry/stars.go:331.106,333.26 1 3 +github.com/observerly/iris/pkg/photometry/stars.go:333.26,336.71 2 665 +github.com/observerly/iris/pkg/photometry/stars.go:336.71,342.39 3 1285 +github.com/observerly/iris/pkg/photometry/stars.go:342.39,343.40 1 42405 +github.com/observerly/iris/pkg/photometry/stars.go:343.40,348.46 3 1399365 +github.com/observerly/iris/pkg/photometry/stars.go:348.46,350.20 2 1377090 +github.com/observerly/iris/pkg/photometry/stars.go:350.20,352.8 1 1362841 +github.com/observerly/iris/pkg/photometry/stars.go:355.6,357.19 3 1399365 +github.com/observerly/iris/pkg/photometry/stars.go:362.4,365.19 3 1285 +github.com/observerly/iris/pkg/photometry/stars.go:365.19,367.5 1 0 +github.com/observerly/iris/pkg/photometry/stars.go:369.4,384.44 10 1285 +github.com/observerly/iris/pkg/photometry/stars.go:384.44,386.5 1 1285 +github.com/observerly/iris/pkg/photometry/stars.go:388.4,396.16 2 1285 +github.com/observerly/iris/pkg/photometry/stars.go:400.2,400.14 1 3 +github.com/observerly/iris/pkg/photometry/stars.go:407.143,412.26 3 2 +github.com/observerly/iris/pkg/photometry/stars.go:412.26,420.32 4 417 +github.com/observerly/iris/pkg/photometry/stars.go:420.32,421.33 1 13761 +github.com/observerly/iris/pkg/photometry/stars.go:421.33,423.29 2 454113 +github.com/observerly/iris/pkg/photometry/stars.go:423.29,424.14 1 121764 +github.com/observerly/iris/pkg/photometry/stars.go:426.5,432.47 4 332349 +github.com/observerly/iris/pkg/photometry/stars.go:432.47,434.15 2 329125 +github.com/observerly/iris/pkg/photometry/stars.go:434.15,436.7 1 180226 +github.com/observerly/iris/pkg/photometry/stars.go:438.5,440.13 3 332349 +github.com/observerly/iris/pkg/photometry/stars.go:444.3,444.18 1 417 +github.com/observerly/iris/pkg/photometry/stars.go:444.18,446.4 1 0 +github.com/observerly/iris/pkg/photometry/stars.go:448.3,451.19 2 417 +github.com/observerly/iris/pkg/photometry/stars.go:451.19,452.12 1 0 +github.com/observerly/iris/pkg/photometry/stars.go:456.3,462.42 4 417 +github.com/observerly/iris/pkg/photometry/stars.go:462.42,463.43 1 6815 +github.com/observerly/iris/pkg/photometry/stars.go:463.43,466.29 2 116129 +github.com/observerly/iris/pkg/photometry/stars.go:466.29,467.14 1 44028 +github.com/observerly/iris/pkg/photometry/stars.go:470.5,474.47 3 72101 +github.com/observerly/iris/pkg/photometry/stars.go:474.47,476.15 2 71847 +github.com/observerly/iris/pkg/photometry/stars.go:476.15,478.7 1 54125 +github.com/observerly/iris/pkg/photometry/stars.go:480.5,481.18 2 72101 +github.com/observerly/iris/pkg/photometry/stars.go:486.3,490.81 3 417 +github.com/observerly/iris/pkg/photometry/stars.go:490.81,491.12 1 79 +github.com/observerly/iris/pkg/photometry/stars.go:495.3,504.25 5 338 +github.com/observerly/iris/pkg/photometry/stars.go:508.2,510.39 2 2 github.com/observerly/iris/pkg/iris/monochrome.go:43.95,61.2 4 13 github.com/observerly/iris/pkg/iris/monochrome.go:65.79,70.16 3 13 github.com/observerly/iris/pkg/iris/monochrome.go:70.16,72.3 1 0 diff --git a/pkg/fits/header.go b/pkg/fits/header.go index 5fc71ea..a7c4c42 100644 --- a/pkg/fits/header.go +++ b/pkg/fits/header.go @@ -540,25 +540,51 @@ func writeInt(w io.Writer, key string, value int32, comment string) { /*****************************************************************************************************************/ -// Writes a FITS header float value +// Writes a FITS header float value to the FITS header with upper-case exponent func writeFloat(w io.Writer, key string, value float32, comment string) { + // Ensure the key is exactly 8 characters long: if len(key) > 8 { - key = key[0:8] + key = key[:8] + } else if len(key) < 8 { + key = fmt.Sprintf("%-8s", key) } + // Ensure the comment is exactly 47 characters long: if len(comment) > 47 { - comment = comment[0:47] + comment = comment[:47] + } else if len(comment) < 47 { + comment = fmt.Sprintf("%-47s", comment) + } + + absValue := math.Abs(float64(value)) + var formattedValue string + + // Format the float with upper-case 'E' and 6 decimal places + // The total width for the value field is 20 characters + // Example: " 2.460641E+06" + // Determine if the value requires scientific notation + if absValue >= 1e+04 || (absValue > 0 && absValue < 1e-04) { + // Use scientific notation with upper-case 'E' and 6 decimal places + formattedValue = fmt.Sprintf("%20.6E", value) + } else { + // Use standard decimal notation with 6 decimal places + formattedValue = fmt.Sprintf("%20.6f", value) } - fmt.Fprintf(w, "%-8s= %20g / %-47s", key, value, comment) + // Write the formatted header line + fmt.Fprintf(w, "%-8s= %s / %-47s", key, formattedValue, comment) } +/*****************************************************************************************************************/ + // Writes a FITS header end record func writeEnd(w io.Writer) bool { n, _ := fmt.Fprintf(w, "END%s", strings.Repeat(" ", 80-3)) return n > 0 } +/*****************************************************************************************************************/ + // Build regexp parser for FITS header lines func compileFITSHeaderRegEx() *regexp.Regexp { white := "\\s+" diff --git a/pkg/fits/header_test.go b/pkg/fits/header_test.go index 13378a3..22b8e84 100644 --- a/pkg/fits/header_test.go +++ b/pkg/fits/header_test.go @@ -178,6 +178,78 @@ func TestNewDefaultFITSHeaderWriteFloat(t *testing.T) { /*****************************************************************************************************************/ +func TestWriteFloatPositiveScientific(t *testing.T) { + var buf bytes.Buffer + key := "JD-OBS" + value := float32(2.460641e+06) // Requires scientific notation + comment := "Julian Date of the observation" + + writeFloat(&buf, key, value, comment) + + expected := "JD-OBS = 2.460641E+06 / Julian Date of the observation " + got := buf.String() + + if got != expected { + t.Errorf("writeFloat() = %q, want %q", got, expected) + } +} + +/*****************************************************************************************************************/ + +func TestWriteFloatNegativeScientific(t *testing.T) { + var buf bytes.Buffer + key := "TEMP" + value := float32(-3.14159e-05) // Requires scientific notation + comment := "Temperature in Celsius" + + writeFloat(&buf, key, value, comment) + + expected := "TEMP = -3.141590E-05 / Temperature in Celsius " + got := buf.String() + + if got != expected { + t.Errorf("writeFloat() = %q, want %q", got, expected) + } +} + +/*****************************************************************************************************************/ + +func TestWriteFloatPositiveDecimal(t *testing.T) { + var buf bytes.Buffer + key := "RA" + value := float32(150.025) // Does not require scientific notation + comment := "Right Ascension in decimal degrees" + + writeFloat(&buf, key, value, comment) + + expected := "RA = 150.024994 / Right Ascension in decimal degrees " + got := buf.String() + + if got != expected { + t.Errorf("writeFloat() = %q, want %q", got, expected) + } +} + +/*****************************************************************************************************************/ + +func TestWriteFloatNegativeDecimal(t *testing.T) { + var buf bytes.Buffer + key := "DEC" + value := float32(-25.75) // Does not require scientific notation + comment := "Declination in decimal degrees" + + writeFloat(&buf, key, value, comment) + + expected := "DEC = -25.750000 / Declination in decimal degrees " + got := buf.String() + + if got != expected { + t.Errorf("writeFloat() = %q, want %q", got, expected) + } +} + +/*****************************************************************************************************************/ + func TestNewDefaultFITSHeaderWriteEnd(t *testing.T) { var header = NewFITSHeader(2, 600, 800)