34 lines
896 B
Haskell
34 lines
896 B
Haskell
module Petzval.Merit where
|
|
|
|
import Petzval.Calculations
|
|
import Petzval.Types
|
|
import Petzval.Trace
|
|
import Petzval.Optics (Element, BakedIOR)
|
|
import Petzval.System
|
|
import Control.Lens
|
|
import Data.Either
|
|
import Linear
|
|
|
|
import qualified Data.Map as Map
|
|
|
|
type MeritPart a = [Element BakedIOR a] -> a
|
|
|
|
data Calcuable a => TracedSystem a =
|
|
TracedSystem { system :: [Element BakedIOR a]
|
|
, field_angles :: [Double]
|
|
, wavelengths :: [Double]
|
|
, tracePoints :: [(Ray a, HitRecord a)]
|
|
}
|
|
|
|
|
|
|
|
spotSize :: Calcuable a => a -> MeritPart a
|
|
spotSize fa system = rmsSize
|
|
. toListOf (each._pos._xy)
|
|
. rights
|
|
. map fst
|
|
. map (raytrace system)
|
|
. map (createRay Nothing ep fa)
|
|
$ hexapolarPattern 10
|
|
where ep = entrancePupil system
|