# Elements

Elements or `Vector{<:Elements}`

can be also compare with `≈`

.

`ABCDMatrixOptics.FreeSpace`

— Type`FreeSpace(dz)`

Construct a free space propagation over distance `dz`

.

`ABCDMatrixOptics.ThinLens`

— Type`ThinLens(f)`

Creates a thin lens with focal length `f`

.

`ThinLens(R1, R2, n_lens, n)`

Creates a thin lens defined by the first radius of curvature `R1`

, the second `R2`

. The lens refractive index is `n_lens`

and the outer refractive index is `n`

.

`ABCDMatrixOptics.ThickLens`

— Type`ThickLens(; R1, R2, t, n_lens=1.5 n1=1.0, n2=1.0)`

Construct a thick lens with the keywords:

`R1`

radius of curvature of first surface`R2`

radius of curvature of second surface`t`

: thickness of lens`n_lens=1.5`

refractive index of lens`n1=1`

: refractive index of the medium of the incoming side`n2=1`

: refractive index of the medium of the exiting side

`ABCDMatrixOptics.Mirror`

— Type`Mirror(R=Inf)`

Mirror with radius of curvature `R`

. Per default `Inf`

, so a flat mirror.

`ABCDMatrixOptics.Interface`

— Type`Interface(n1, n2)`

Creates a flat interface with refractive index `n1`

on the entering side and `n2`

on the new medium.

`Interface(; n1, n2, R=Inf)`

Creates a curved interface with radius `R`

and with refractive index `n1`

on the entering side and `n2`

on the new medium.

`ABCDMatrixOptics.dz`

— Function`dz(element::Element)`

Returns how much an element changes the optical distance `z`

.

`Base.isapprox`

— Function`Base.isapprox(a::Vector{<:Element}, b::Vector{<:Element})`

Compare two vectors of elements using Base.isapprox for each element's ray matrix (ABCD entries). Does consequently not consider one discretization of element FreeSpace different from another, or one realization of an imaging system from another as long as both achieve (within tolerances) the same imaging.

The `atol`

(absolute tolerance) parameter can be used but is typically nonsensical as it will be used for each of the ray matrix entries ABCD which usually differ vastly in magnitude.