Beams
As mentioned in the Rays section, a beam within the context of this package serves as a data structure for storing collections of rays, forming the backbone of the simulation framework. Beams are intended to be designed as AbstractTrees to allow for ray bifurcations, e.g. in the case of optical elements such as beamsplitters. The solve_system! function relies on this data structure to perform ray tracing computations within optical systems.
To ensure compatibility and extensibility, beam types must adhere to the BeamletOptics.AbstractBeam interface. Refer to its documentation for more information. Browse the catalog below, or refer to the table of contents for detailed documentation of the provided beam types and sources.
Beam catalog
Beams, beamlets and beam groups are traced through a bi-convex lens onto a detector near its focus.
Beam overview
Moving beams
Rays, beams and beam groups can be moved with the same kinematic API as optical elements, see Moving sources in the Kinematics section.
Listing available beams
When using this package in the REPL, a tree view of all implemented BeamletOptics.AbstractBeams and BeamletOptics.AbstractBeamGroups can be generated via the BeamletOptics.list_subtypes helper function. Note that this function is not able to determine all available constructors.
julia> BeamletOptics.list_subtypes(BeamletOptics.AbstractBeam);
└── BeamletOptics.AbstractBeam
├── AstigmaticGaussianBeamlet{T} where T<:Real
├── Beam{T, R} where {T<:Real, R<:BeamletOptics.AbstractRay{T}}
└── GaussianBeamlet{T} where T<:Real
At least 3 types have been found.
julia> BeamletOptics.list_subtypes(BeamletOptics.AbstractBeamGroup);
└── BeamletOptics.AbstractBeamGroup
├── AstigmaticBeamGroup{T, R} where {T<:Real, R<:BeamletOptics.AbstractRay{T}}
├── CollimatedSource{T, R} where {T<:Real, R<:BeamletOptics.AbstractRay{T}}
└── PointSource{T, R} where {T<:Real, R<:BeamletOptics.AbstractRay{T}}
At least 3 types have been found.













