PyEtalon simulates the physics of Fabry-Perot etalons.
Project description
pyetalon
PyEtalon is a Python library to analyse the multilayer interference of thin films in the context of etalons.
It provides an easy interface to calculate the phase shift of a known multilayer stack. Also, it allows fitting of the multilayer stack parameters to measured peak data of an etalon.
PyEtalon makes heavy use of PyIndexRepo, a python library to access the refractive index data from RefractiveIndex.info. See the documentation of PyIndexRepo for more information on how to access the refractive index data.
User guide
Background
The free spectral range (FSR) of an etalon is the distance between two adjacent transmission peaks. For an ideal etalon, it is given by the following equation:
$FSR_{\nu}= \Delta \nu = \frac{c}{2nL\cdot \cos(\theta)}$
where $c$ is the speed of light in vacuum, $n$ is the refractive index of the medium between the plates, $\theta$ is the angle of incidence, and $L$ is the distance between the plates.
In wavelength, the FSR is given by:
$FSR_{\lambda} = \Delta \lambda = \frac{\lambda^2}{2nL \cos(\theta)}$
where $\lambda$ is the wavelength of light in vacuum.
Similarly, the absolute peak wavelength of the etalon is given by:
$\lambda = \frac{2nL \cos(\theta)}{m}$
where $m$ is the order of the interference peak.
All equations above are only valid for an ideal etalon. In reality, upon reflection on the etalon mirrors, the light undergoes a phase shift. This phase shift is given by the Fresnel equations and depends on the refractive index of the materials involved. As a consequence, both, the FSR and the absolute peak wavelength are modified by the phase shift. It is most intuitive to think of the phase shift as a change in the effective optical path length or mirror separation $L$.
The peak wavelength is then given by:
$\lambda = \frac{2nL \cos(\theta)+ \lambda \frac{\Phi_{\lambda}}{\pi}}{m}$
Example
Let's walk through the simulation of a simple etalon with a single layer of 30nm of silver on a glass substrate. The etalon is illuminated with a plane wave at normal incidence.
The wavelength dependent refractive indices of the three materials are represented by a Material object, which can be created from a tabulated data set or a formula or by querying the refractive index database.
To calculate optical properties of an etalon, create an Etalon object and use the provided helper functions.
import numpy as np
from PyEtalon.etalon import Etalon
from PyEtalon.plotting import plot_fsr
from pyindexrepo import RefractiveIndexLibrary, Material, TabulatedIndexData, FormulaIndexData
from pyindexrepo.dispersion_formulas import formula_2
# Create vacuum 'material' by using a tabulated data set
Vacuum = Material(TabulatedIndexData([.1, 10.000], [1.0, 1.0]))
# Create the substrate material by using the Sellmeier formula and vendor data for Suprasil
Suprasil = Material(FormulaIndexData(formula_2, [0., 6.72472034E-01, 4.50684530E-03, 4.31646851E-01, 1.33090179E-02, 8.85914296E-01, 9.67375952E+01], .185, 2.326), None)
# Create the silver material by querying the refractive index database, selecting the Ciesielski data set for thin films
db = RefractiveIndexLibrary()
Silver = db.get_material('main', 'Ag', 'Ciesielski')
# Create an etalon object
silver_etalon = Etalon(
[Vacuum, Silver, Suprasil], # specify the layer materials
["Vacuum", "Silver", "Substrate"], # specify the layer names
[-np.inf, 30., np.inf], # specify the layer thicknesses
[0, 1, 2], # specify the layer order/indices
wavelength=np.linspace(500, 1100, 5000), # specify the wavelength range
d_spacer=5E-3, # specify the spacer thickness in meters
aoi=.0, # specify the angle of incidence in degrees
identifier='Silver 30nm' # specify the identifier of the etalon
)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyetalon-0.1.2.tar.gz.
File metadata
- Download URL: pyetalon-0.1.2.tar.gz
- Upload date:
- Size: 16.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dbcc009d052e8bff1b69cdaf10ca578443d9f8c550c48a73cae1e964605db06d
|
|
| MD5 |
d013ecc8e30b9d99b3871f160f911db1
|
|
| BLAKE2b-256 |
98afe1de19b21337160dff4824ddde5c5cfba1f86f258e218ce6cddbd1bc6887
|
Provenance
The following attestation bundles were made for pyetalon-0.1.2.tar.gz:
Publisher:
ci-cd.yml on Stuermer/PyEtalon
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyetalon-0.1.2.tar.gz -
Subject digest:
dbcc009d052e8bff1b69cdaf10ca578443d9f8c550c48a73cae1e964605db06d - Sigstore transparency entry: 1147837734
- Sigstore integration time:
-
Permalink:
Stuermer/PyEtalon@a8bdb1ea054cc0a06eb989224e578f2bdab8bf09 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Stuermer
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci-cd.yml@a8bdb1ea054cc0a06eb989224e578f2bdab8bf09 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyetalon-0.1.2-py3-none-any.whl.
File metadata
- Download URL: pyetalon-0.1.2-py3-none-any.whl
- Upload date:
- Size: 15.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8502ac258132cbe4b10a6d4acffc7ea87656abc359f4b79216a68f2f54709f2
|
|
| MD5 |
8d269405278aa2e56c3e6328c1d040b1
|
|
| BLAKE2b-256 |
298d773df1a1c8ba23e89cad136e5b2d3e8bfd3a9e81f33aa15e2bf9ec72e90d
|
Provenance
The following attestation bundles were made for pyetalon-0.1.2-py3-none-any.whl:
Publisher:
ci-cd.yml on Stuermer/PyEtalon
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyetalon-0.1.2-py3-none-any.whl -
Subject digest:
e8502ac258132cbe4b10a6d4acffc7ea87656abc359f4b79216a68f2f54709f2 - Sigstore transparency entry: 1147837819
- Sigstore integration time:
-
Permalink:
Stuermer/PyEtalon@a8bdb1ea054cc0a06eb989224e578f2bdab8bf09 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Stuermer
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci-cd.yml@a8bdb1ea054cc0a06eb989224e578f2bdab8bf09 -
Trigger Event:
push
-
Statement type: