Polarizers
Polarizers in the context of this package are optical elements that select or modify the R³ polarization vector of a PolarizedRay, e.g. filters or λ/2 waveplates. This is mainly done by two approaches:
3D polarization ray-tracing calculus
3D modified Jones matrix calculus
For more information on the first method refer to the section: Polarized rays. For the second approach, elements fall under the category of the BeamletOptics.AbstractJonesPolarizer.
BeamletOptics.AbstractJonesPolarizer Type
AbstractJonesPolarizer <: AbstractObjectRepresents infinitesimally thin components that change the polarization state of incoming PolarizedRays via global Jones matrix calculus. Rather than using the generic Yun ray tracing scheme as referred to in the PolarizedRay docs, this element interacts with the global E-field vector E0 by using a GlobalJonesBasis and projecting the entries into the transverse plane defined by the incoming ray direction and orthogonal E-field vector. This approach is partially inspired by the publication:
Jan Korger et al., "The polarization properties of a tilted polarizer," Opt. Express 21, 27032-27042 (2013)
Warning
It is assumed that the ray direction of propagation is not changed during the interaction.
Implementation reqs.
Subtypes of AbstractJonesPolarizer should implement all supertype requirements.
Interaction logic
The GlobalJonesBasis tracks the rotation in 3D-space via the orientation of the attached AbstractShape. The polarization matrix P is calculated by projecting the previous matrix into the incoming orthogonal plane of polarization. Refer to the _calculate_global_E0 implementation for more information.
Info
The validity of this approach is still under consideration for non-normal incidence.
Jones matrix element representation
Fundamentally, the approach used here to simulate the effect of polarizers is referred to as Jones calculus and gives a "0th order" approximation of the physical effect. Out of plane tilts with respect to the optical axis of an incoming ray are currently only considered via a projection into the transverse plane of the incoming ray [25].
In a nutshell, elements are characterized by a 2x2 matrix that determines how the E-field components in the transverse plane to the optical axis are passed through in a global coordinate system where a ray of polarized light propagates along the z-axis. For instance, the entries for a linear filter that blocks in the y-direction are
While this allows to simply model a specific set of polarizing elements, its important to note that more complex phenomena need more extensive implementations. For 3D-calculations, the
in order to calculate
Polarisation filter
A polarisation filter or linear polarizer is the simplest practical polarizer and is commonly used to select a desired polarization state. This package provides the PolarizationFilter as an idealized implementation for a zero-thickness filter.
BeamletOptics.PolarizationFilter Method
PolarizationFilter(edge_length; cutoff_strength)Spawns a thin, rectangular PolarizationFilter. The edge_length has to be specified in [m]. The filter is aligned with the global y-axis and transmits along the x-axis, while blocking polarization components along the global z-axis.
BeamletOptics.RoundPolarizationFilter Function
RoundPolarizationFilter(diameter; cutoff_strength)Spawns a thin, round PolarizationFilter with the given diameter in [m]. The filter is centered at the origin, aligned with the global y-axis and transmits along the x-axis, while blocking polarization components along the global z-axis.
BeamletOptics.transmission_axis Method
transmission_axis(pf::PolarizationFilter)Returns the unit vector (in global coordinates) along which PolarizationFilter pf transmits polarization, derived from its Jones matrix so that it stays correct for any filter orientation or custom GlobalJonesBasis. The sign of the returned vector is arbitrary, since it represents an axis rather than a direction.
The transmission axis of a filter can be queried via transmission_axis. When rendered, both the PolarizationFilter and the LinearPolarizer show this axis as a line across the film; the LinearPolarizer additionally shows rim marks akin to the engraved line of real components. This can be disabled via render!(ax, filter; show_transmission_axis=false), and styled with axis_color and axis_linewidth.
Linear polarizer
The LinearPolarizer models a real film polarizer (e.g. Thorlabs LPNIRE100-B): a 2D PolarizationFilter cemented between two flush glass plates. The film acts at the inner glass interface, the uncoated outer surfaces cause Fresnel losses, and the film thickness itself is not modeled. An example is shown in the Polarized rays section.
BeamletOptics.LinearPolarizer Type
LinearPolarizer{T, N <: RefractiveIndex} <: AbstractObject{T}Represents a real, round linear polarizing film laminated between two uncoated glass plates (e.g. Thorlabs LPNIRE100-B), modeled as a thin PolarizationFilter cemented between two Prism substrates that sit flush against the film. Refer to RoundLinearPolarizer for the constructor.
Fields
filter: the thinPolarizationFilterthat models the polarizing filmfront: front glass substratePrismback: back glass substratePrism
Additional information
Kinematic center
The center of kinematics of this component lies at the center of the film.
Uncoated surfaces
Since the glass substrates are uncoated, a PolarizedRay loses approx. 4 % of its intensity per outer surface at n ≈ 1.5 due to Fresnel reflection, unlike the anti-reflection coated real-world part.
Crossed orientation
When the film orientation is crossed (transmission axis perpendicular to the incident polarization), the beam is terminated at the cemented film interface once the norm of the transmitted electric field falls to or below the cutoff_strength of the underlying PolarizationFilter.
BeamletOptics.RoundLinearPolarizer Function
RoundLinearPolarizer(diameter, front_thickness, back_thickness, n; cutoff_strength=eps())Creates a LinearPolarizer: a round polarizing film cemented between two round glass plates of the given diameter, flush against the film on both sides.
Inputs
diameter: outer diameter of the film and substrates in [m]front_thickness: thickness of the front glass substrate in [m]back_thickness: thickness of the back glass substrate in [m]n:RefractiveIndexof both glass substrates
Keywords
cutoff_strength: passed toRoundPolarizationFilter
Additional information
The component is centered on the film (local origin); the front substrate extends from y = -front_thickness to y = 0, the back substrate from y = 0 to y = back_thickness, along local +y. The film transmits along local x and blocks local z.
BeamletOptics.transmission_axis Method
transmission_axis(lp::LinearPolarizer)Returns the unit vector (in global coordinates) along which LinearPolarizer lp transmits polarization. Refer to transmission_axis(::PolarizationFilter) for details.