cl3-posit-1.0.0.0: Clifford Algebra of three dimensional space, implemented with Posit numbers.
Copyright(C) 2018-2024 Nathan Waivio
LicenseBSD3
MaintainerNathan Waivio <nathan.waivio@gmail.com>
StabilityStable
Portabilityunportable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Posit.Cl3.JonesCalculus

Description

Library implementing standard functions for the Jones Calculus in the Cl3 Library. This implementation of the Jones Calculus is based on the convensions of SPIE's Field Guide to Polarization (ϕ = ω t − k z).

  • E. Collett, Field Guide to Polarization, SPIE Field Guides vol. FG05, SPIE (2005). ISBN 0-8194-5868-6.

Jones Vectors

Within the system of the Bloch Sphere, the Jones Vectors in Cl3 are calculated by generating the left ideal of the rotation of a unit vector to the e3 basis. Standard form for for a versor is 'rot = exp $ (-i/2) * theta * u' for angle theta and the rotational axis unit vector u.

Bloch Sphere Coordinates:

                e3
                |
                |____e2
               / 
              /
             e1
Synopsis

Jones Vectors

hpv :: PositF es => Cl3 es Source #

hpv horizontally polarized Jones vector

vpv :: PositF es => Cl3 es Source #

vpv vertically polarized Jones vector

dpv :: PositF es => Cl3 es Source #

dpv diagonally polarized Jones vector

apv :: PositF es => Cl3 es Source #

apv anti-diagonally polarized Jones vector

rpv :: PositF es => Cl3 es Source #

rpv right hand circularly polarized Jones vector

lpv :: PositF es => Cl3 es Source #

lpv left hand circularly polarized Jones vector

jv :: forall {es :: ES}. (PositC es, PositC (Next es), PositC (Prev es)) => Cl3 es -> Cl3 es Source #

jv function that returns Jones vector from input vector unit vector currently converts the input to a unit vector

Jones Matrices

hpm :: PositF es => Cl3 es Source #

hpm Horizontal Polarizer Jones Matrix

vpm :: PositF es => Cl3 es Source #

vpm Vertical Polarizer Jones Matrix

dpm :: PositF es => Cl3 es Source #

dpm Diagonal Polarizer Jones Matrix

apm :: PositF es => Cl3 es Source #

apm Anti-diagonal Polarizer Jones Matrix

rpm :: PositF es => Cl3 es Source #

rpm Right Hand Circular Polarizer Jones Matrix

lpm :: PositF es => Cl3 es Source #

lpm Left Hand Circular Polarizer Jones Matrix

jm :: forall {es :: ES}. (PositC es, PositC (Next es), PositC (Prev es)) => Cl3 es -> Cl3 es Source #

jm funciton that returns a Jones Matrix from an input Bloch Vector currently converts the input to a unit vector

hpmRot :: forall {es :: ES}. (PositC es, PositC (Next es), PositC (Prev es)) => Cl3 es -> Cl3 es Source #

hpmRot Jones matrix for a rotated ideal Linear Horizontal Polarizer. Input value should be a scalar angle in Radians.

Wave Plates

qwp :: PositF es => Cl3 es Source #

qwp Quarter Wave Plate Jones Matrix

hwp :: PositF es => Cl3 es Source #

hwp Half Wave Plate Jones Matrix

qwpRot :: forall {es :: ES}. (PositC es, PositC (Next es), PositC (Prev es)) => Cl3 es -> Cl3 es Source #

qwpRot Rotated Quarter Wave Plate Jones Matrix. Input value should be a scalar angle in Radians.

hwpRot :: forall {es :: ES}. (PositC es, PositC (Next es), PositC (Prev es)) => Cl3 es -> Cl3 es Source #

hwpRot Rotated Half Wave Plate Jones Matrix. Input value should be a scalar angle in Radians.

wp :: forall {es :: ES}. (PositC es, PositC (Next es), PositC (Prev es)) => Cl3 es -> Cl3 es Source #

wp a Wave Plate with phase shift of phi Jones Matrix. Input value should be a scalar angle in Radians.

wpRot :: forall {es :: ES}. (PositC es, PositC (Next es), PositC (Prev es)) => Cl3 es -> Cl3 es -> Cl3 es Source #

wpRot a Rotated Wave Plate with phase shift of phi and rotation theta Jones Matrix. The first input value is phi the phase shift as a scalar value in Radians. The second input value is theta the rotation a scalar angle in Radians.

Reflection

refl :: PositF es => Cl3 es Source #

refl a Refelection Jones Matrix

Random Jones Vectors

randJonesVec :: (PositF es, RandomGen g) => g -> (Cl3 es, g) Source #

randJonesVec a Random Jones Vector.

randOrthogonalJonesVec :: (PositF es, RandomGen g) => g -> ((Cl3 es, Cl3 es), g) Source #

randOrthogonalJonesVec a Random Orthogonal Complementary pair of Jones Vectors.

Normalization Factorization

factorize :: PositF es => Cl3 es -> (Cl3 es, Cl3 es, Cl3 es) Source #

factorize is a function that takes an Jones Vector after transformation by an optical chain, and returns the amplitude (amp), phase (phi), and normalized Jones Vector (vec), by the factorization of the input such that: amp * exp (i*phi/2) * vec