{-|
Module: Data.Astro.Effects.Aberration
Description: Calculation effects of aberration.
Copyright: Alexander Ignatyev, 2016

Calculation effects of aberration.
-}

module Data.Astro.Effects.Aberration
(
  includeAberration
)

where

import Data.Astro.Types (DecimalDegrees, toRadians, fromDMS)
import Data.Astro.Time.JulianDate (JulianDate)
import Data.Astro.Coordinate (EclipticCoordinates(..))


-- | Includes aberration effect.

-- It takes true Ecliptic Coordinates,

-- the Sun's longitude at the given Julian Day (the third parameter).

-- Returns apparent ecliptic coordinates.

-- The Sun's longitude can be calculated using 'sunEclipticLongitude1' or 'sunEclipticLongitude2' of "Data.Astro.Sun" module.

includeAberration :: EclipticCoordinates -> JulianDate -> DecimalDegrees -> EclipticCoordinates
includeAberration :: EclipticCoordinates
-> JulianDate -> DecimalDegrees -> EclipticCoordinates
includeAberration (EcC DecimalDegrees
beta DecimalDegrees
lambda) JulianDate
jd DecimalDegrees
sunLambda =
  let lambdaDiff :: Double
lambdaDiff = DecimalDegrees -> Double
toRadians (DecimalDegrees -> Double) -> DecimalDegrees -> Double
forall a b. (a -> b) -> a -> b
$ DecimalDegrees
sunLambda DecimalDegrees -> DecimalDegrees -> DecimalDegrees
forall a. Num a => a -> a -> a
- DecimalDegrees
lambda
      beta' :: Double
beta' = DecimalDegrees -> Double
toRadians DecimalDegrees
beta
      dLambda :: Double
dLambda = -Double
20.5 Double -> Double -> Double
forall a. Num a => a -> a -> a
* (Double -> Double
forall a. Floating a => a -> a
cos Double
lambdaDiff) Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ (Double -> Double
forall a. Floating a => a -> a
cos Double
beta')
      dBeta :: Double
dBeta = -Double
20.5 Double -> Double -> Double
forall a. Num a => a -> a -> a
* (Double -> Double
forall a. Floating a => a -> a
sin Double
lambdaDiff) Double -> Double -> Double
forall a. Num a => a -> a -> a
* (Double -> Double
forall a. Floating a => a -> a
sin Double
beta')
  in DecimalDegrees -> DecimalDegrees -> EclipticCoordinates
EcC (DecimalDegrees
beta DecimalDegrees -> DecimalDegrees -> DecimalDegrees
forall a. Num a => a -> a -> a
+ Int -> Int -> Double -> DecimalDegrees
forall a. RealFrac a => Int -> Int -> a -> DecimalDegrees
fromDMS Int
0 Int
0 Double
dBeta) (DecimalDegrees
lambda DecimalDegrees -> DecimalDegrees -> DecimalDegrees
forall a. Num a => a -> a -> a
+ Int -> Int -> Double -> DecimalDegrees
forall a. RealFrac a => Int -> Int -> a -> DecimalDegrees
fromDMS Int
0 Int
0 Double
dLambda)