-
Notifications
You must be signed in to change notification settings - Fork 5
PlaneWave structure
The Planewave is a LightSource subtype exported by ThinFilmsTools.jl in order to structure the input data of the beam or incident light in the calculations.
To call this subtype we can write
beam = PlaneWave(λ, θ; p=0.5)where all the parameters required are described below.
λ defines the wavelength range in nanometers, over which the calculations are performed. The recommended input are 1-d arrays, linear or step ranges (although not explicitly defined). For instance:
λ = LinRange(200, 1000, 801)
λ = 200:1000
λ = [245. 300. 450. 868.]
λ = [632.]θ defines the angle of incidence (in degrees) of the wave into the first (incident) medium. It takes the same type of input as λ. For instance:
θ = LinRange(0, 90, 901)
θ = [0.] # normal incidence
θ = [45.] # 45. degrees
θ = 0:1:60By setting θ and λ as arrays with more than one element each, the quantities that depends on them will be output as 2d-array or 3d-array.
TMMOptics.jl performs the calculations by default for both types of polarisation, p/TM and s/TE, at every run. However, for the fitting procedure used by FitTMMOptics.jl, only one polarisation is used.
The optional parameter p::Float is used when the angle of incidence is other than zero, indicating whether the wave to be considered is p/TM type or s/TE type (see here).
When p = 1.0 means that the type considered is p/TM, while when p = 0.0 sets the wave to s/TE. Particular cases when are when you have unpolarised light, in which case you can omit this parameter, taken to be 0.5 by default. When you choose p in between 0 and 1, the spectrum will be polarisation averaged. For instance, if you have a mix of polarisation in the light, say 0.4, the spectrum will be more p/TM polarised.
Explicitly, the spectrum of reflectance (R) or transmittance (T), when using FitTMMOptics.jl, will be calculated as p*Xp + (1.0 - p)*Xs, where X is either R or T. Notice that in the case when you use TMMOptics, both types are calculated and you have to do this by yourself, for instance, using the exported Utils.averagePolarisation(p, Xp, Xs) function.