Skip to content

Commit e7c729f

Browse files
committed
working!
cleanup
1 parent 2a41aac commit e7c729f

File tree

3 files changed

+35
-31
lines changed

3 files changed

+35
-31
lines changed

src/NSO/Image/Asdf.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ data DataTree meta info = DataTree
233233
}
234234
deriving (Generic)
235235
instance (ToAsdf (meta info), KnownText info) => ToAsdf (DataTree meta info) where
236-
schema _ = "asdf://dkist.nso.edu/tags/dataset-1.2.0"
236+
-- schema _ = "asdf://dkist.nso.edu/tags/dataset-1.2.0"
237237
anchor _ = Just $ Anchor $ knownText @info
238238
toValue q =
239239
Object
@@ -398,7 +398,7 @@ data ProfileTree fit = ProfileTree
398398
deriving (Generic)
399399
instance (KnownText fit) => ToAsdf (ProfileTree fit) where
400400
-- anchor _ = Just $ Anchor $ knownText @fit
401-
schema _ = "asdf://dkist.nso.edu/tags/dataset-1.2.0"
401+
-- schema _ = "asdf://dkist.nso.edu/tags/dataset-1.2.0"
402402
toValue p =
403403
Object
404404
[ ("unit", toNode p.unit)

src/NSO/Image/GWCS.hs

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Data.Massiv.Array (Array, D, Ix2, Ix3)
77
import Data.Massiv.Array qualified as M
88
import NSO.Image.Fits.Profile
99
import NSO.Image.Fits.Quantity
10-
import NSO.Image.GWCS.L1Transform (HPLat, HPLon, L1WCSTransform (..), Time, l1WCSTransform)
10+
import NSO.Image.GWCS.L1Transform (HPLat, HPLon, L1WCSTransform (..), Time, Zero, l1WCSTransform)
1111
import NSO.Image.Headers (Observation (..), Obsgeo (..))
1212
import NSO.Image.Headers.Types (Degrees (..), Key (..), Meters (..))
1313
import NSO.Image.Headers.WCS (PC (..), PCXY (..), WCSAxisKeywords (..), WCSCommon (..), WCSHeader (..), Wav, X, Y, toWCSAxis)
@@ -16,6 +16,7 @@ import NSO.Image.Types.Frame (Depth, Frames (..), Stokes, middleFrame)
1616
import NSO.Image.Types.Quantity (OpticalDepth)
1717
import NSO.Prelude as Prelude
1818
import NSO.Types.Common (DateTime (..))
19+
import Numeric (showFFloat)
1920
import Telescope.Asdf (Anchor (..), ToAsdf (..), Value (..))
2021
import Telescope.Asdf.Core (Quantity (..), Unit (Arcseconds, Pixel, Unit))
2122
import Telescope.Asdf.Core qualified as Unit
@@ -49,39 +50,43 @@ transformProfile common axes =
4950

5051
transformQuantity
5152
:: L1WCSTransform
52-
-> WCSCommon
5353
-> Frames (QuantityAxes 'WCSMain)
5454
-> Transform (Pix Depth, Pix X, Pix Y) (Linear Depth, HPLon, HPLat, Time)
55-
transformQuantity l1trans common axes =
56-
let mid = middleFrame axes
57-
in transformOpticalDepth (toWCSAxis mid.depth.keys) <&> l1WCSTransform l1trans -- varyingCelestialTransform common (fmap wcsFrame axes)
55+
transformQuantity l1trans axes =
56+
dropUnusedZeros fullTransform
5857
where
59-
wcsFrame :: QuantityAxes 'WCSMain -> WCSFrame QuantityAxes
60-
wcsFrame axs =
61-
WCSFrame
62-
{ x = toWCSAxis axs.slitX.keys
63-
, y = toWCSAxis axs.dummyY.keys
64-
, pcxy = pcs axs
65-
}
66-
67-
pcs :: QuantityAxes 'WCSMain -> PCXY QuantityAxes 'WCSMain
68-
pcs axs = fromMaybe identityPCXY $ do
69-
pcx <- axs.slitX.pcs
70-
pcy <- axs.dummyY.pcs
71-
pure $ PCXY{xx = pcx.slitX, xy = pcx.dummyY, yx = pcy.slitX, yy = pcy.dummyY}
58+
fullTransform :: Transform (Pix Depth, Pix X, Pix Y) (Linear Depth, HPLon, HPLat, Time, Zero Wav, Zero Stokes)
59+
fullTransform =
60+
let mid = middleFrame axes
61+
in transformOpticalDepth (toWCSAxis mid.depth.keys) <&> l1WCSTransform l1trans
62+
63+
dropUnusedZeros :: Transform inp (a, b, c, d, Zero z1, Zero z2) -> Transform inp (w, x, y, z)
64+
dropUnusedZeros (Transform t) = Transform t
7265

7366

7467
identityPCXY :: PCXY s 'WCSMain
7568
identityPCXY =
7669
PCXY{xx = PC 1, xy = PC 0, yx = PC 0, yy = PC 1}
7770

7871

72+
data LinearOpticalDepth = LinearOpticalDepth {intercept :: Quantity, slope :: Quantity}
73+
deriving (Generic)
74+
instance ToAsdf LinearOpticalDepth where
75+
schema _ = "!transform/linear1d-1.0.0"
76+
77+
7978
transformOpticalDepth :: WCSAxis 'WCSMain Depth -> Transform (Pix Depth) (Linear Depth)
8079
transformOpticalDepth wcsOD =
81-
linear (wcsIntercept wcsOD) (Scale $ factor1digit wcsOD.cdelt)
80+
let Intercept i = wcsIntercept wcsOD
81+
s = wcsOD.cdelt
82+
in transform $ LinearOpticalDepth (Quantity Pixel (factor1digit i)) (Quantity (Unit "pix.pixel**-1") (factor1digit s))
8283
where
83-
factor1digit :: Double -> Double
84-
factor1digit d = fromIntegral (round @Double @Integer (d * 10)) / 10
84+
-- intercept: !unit/quantity-1.1.0 {datatype: float64, unit: !unit/unit-1.0.0 pix, value: 853.7012736084624}
85+
-- slope: !unit/quantity-1.1.0 {datatype: float64, unit: !unit/unit-1.0.0 pix.pixel**-1, value: 9.99852488051306e-4}
86+
-- linear (wcsIntercept wcsOD) (Scale $ factor1digit wcsOD.cdelt)
87+
88+
factor1digit :: Double -> Value
89+
factor1digit d = String $ cs $ showFFloat (Just 1) d "" -- fromIntegral (round @Double @Integer (d * 10)) / 10
8590

8691

8792
transformSpatial
@@ -168,11 +173,10 @@ quantityGWCS :: L1WCSTransform -> Frames PrimaryHeader -> Frames (QuantityHeader
168173
quantityGWCS l1trans primaries quants =
169174
let midPrim = middleFrame primaries
170175
firstPrim = head primaries.frames
171-
midQuan = middleFrame quants
172-
in QuantityGWCS $ GWCS (inputStep midQuan.wcs.common) (outputStep firstPrim midPrim)
176+
in QuantityGWCS $ GWCS inputStep (outputStep firstPrim midPrim)
173177
where
174-
inputStep :: WCSCommon -> GWCSStep CoordinateFrame
175-
inputStep common = GWCSStep pixelFrame (Just (transformQuantity l1trans common (fmap axis quants)).transformation)
178+
inputStep :: GWCSStep CoordinateFrame
179+
inputStep = GWCSStep pixelFrame (Just (transformQuantity l1trans (fmap axis quants)).transformation)
176180
where
177181
axis :: QuantityHeader x -> QuantityAxes 'WCSMain
178182
axis q = q.wcs.axes

src/NSO/Image/GWCS/L1Transform.hs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ instance ToAsdf L1WCSTransform where
5353
toValue (L1WCSTransform n) = n.value
5454

5555

56-
l1WCSTransform :: L1WCSTransform -> Transform (Pix X, Pix Y) (HPLon, HPLat, Time)
57-
l1WCSTransform t = fixL1Inputs |> zeroWavStokes |> originalL1Transform |> reorderDropOutput
56+
l1WCSTransform :: L1WCSTransform -> Transform (Pix X, Pix Y) (HPLon, HPLat, Time, Zero Wav, Zero Stokes)
57+
l1WCSTransform t = fixL1Inputs |> zeroWavStokes |> originalL1Transform |> reorderOutput
5858
where
5959
originalL1Transform :: Transform (Pix X, Zero Wav, Pix Y, Zero Stokes) (HPLon, Wav, HPLat, Time, Stokes)
6060
originalL1Transform = transform t
@@ -68,5 +68,5 @@ l1WCSTransform t = fixL1Inputs |> zeroWavStokes |> originalL1Transform |> reorde
6868
zeroWavStokes :: Transform (Pix X, Pix Wav, Pix Y, Pix Stokes) (Pix X, Zero Wav, Pix Y, Zero Stokes)
6969
zeroWavStokes = identity @(Pix X) <&> zero <&> identity @(Pix Y) <&> zero
7070

71-
reorderDropOutput :: Transform (HPLon, Wav, HPLat, Time, Stokes) (HPLon, HPLat, Time)
72-
reorderDropOutput = transform $ Mapping [0, 2, 3, 1, 4]
71+
reorderOutput :: Transform (HPLon, Wav, HPLat, Time, Stokes) (HPLon, HPLat, Time, Zero Wav, Zero Stokes)
72+
reorderOutput = transform $ Mapping [0, 2, 3, 1, 4]

0 commit comments

Comments
 (0)