Skip to content

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
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.