https://github.com/scottprahl/miepython
Mie scattering of light by perfect spheres
https://github.com/scottprahl/miepython
jupyter-notebook python scattering
Last synced: 5 months ago
JSON representation
Mie scattering of light by perfect spheres
- Host: GitHub
- URL: https://github.com/scottprahl/miepython
- Owner: scottprahl
- License: mit
- Created: 2017-08-03T17:43:32.000Z (almost 9 years ago)
- Default Branch: main
- Last Pushed: 2025-04-28T17:13:00.000Z (about 1 year ago)
- Last Synced: 2025-04-28T18:26:22.641Z (about 1 year ago)
- Topics: jupyter-notebook, python, scattering
- Language: Python
- Homepage:
- Size: 24 MB
- Stars: 181
- Watchers: 10
- Forks: 58
- Open Issues: 3
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG.rst
- License: LICENSE.txt
- Citation: CITATION.cff
Awesome Lists containing this project
README
.. |pypi| image:: https://img.shields.io/pypi/v/miepython?color=68CA66
:target: https://pypi.org/project/miepython/
:alt: PyPI
.. |github| image:: https://img.shields.io/github/v/tag/scottprahl/miepython?label=github&color=68CA66
:target: https://github.com/scottprahl/miepython
:alt: GitHub
.. |conda| image:: https://img.shields.io/conda/vn/conda-forge/miepython?label=conda&color=68CA66
:target: https://github.com/conda-forge/miepython-feedstock
:alt: Conda
.. |doi| image:: https://zenodo.org/badge/99259684.svg
:target: https://zenodo.org/badge/latestdoi/99259684
:alt: DOI
.. |license| image:: https://img.shields.io/github/license/scottprahl/miepython?color=68CA66
:target: https://github.com/scottprahl/miepython/blob/master/LICENSE.txt
:alt: License
.. |test| image:: https://github.com/scottprahl/miepython/actions/workflows/test.yml/badge.svg
:target: https://github.com/scottprahl/miepython/actions/workflows/test.yml
:alt: Testing
.. |docs| image:: https://readthedocs.org/projects/miepython/badge?color=68CA66
:target: https://miepython.readthedocs.io
:alt: Docs
.. |downloads| image:: https://img.shields.io/pypi/dm/miepython?color=68CA66
:target: https://pypi.org/project/miepython/
:alt: Downloads
.. |lite| image:: https://img.shields.io/badge/try-JupyterLite-68CA66.svg
:target: https://scottprahl.github.io/miepython/
:alt: Try JupyterLite
miepython
=========
|pypi| |github| |conda| |doi|
|license| |test| |docs| |downloads|
|lite|
Mie scattering calculations in pure Python
------------------------------------------
``miepython`` provides a validated and efficient implementation of Mie scattering for spherical particles.
It reproduces established reference results (including Wiscombe's MIEV0) and is designed for scientific, educational, and computational research applications in optics.
The library implements the full Mie solution, including:
- extinction, scattering, and absorption efficiencies
- asymmetry parameter (scattering anisotropy)
- angle-resolved scattering intensities
- Mie expansion coefficients
- complex amplitude functions and Mueller matrices
The implementation is numerically stable for a wide range of size parameters and refractive indices, including lossy materials and high-index contrasts.
Immediate Use in the Browser
----------------------------
The entire package can be used **immediately** in a browser — without installation — using the JupyterLite interface:
|lite|
This environment runs entirely client-side (Pyodide), and supports:
- interactive notebooks
- real-time plotting
- full access to ``miepython`` functions
- reproducible experiments (downloadable notebooks)
This makes it ideal for teaching, demonstrations, or quick exploratory calculations.
Installation
------------
Install with pip:
.. code-block:: bash
pip install miepython
Or via conda:
.. code-block:: bash
conda install -c conda-forge miepython
Quick Start
-----------
A typical calculation is straightforward:
.. code-block:: python
import miepython as mie
m = 1.5 - 0.1j # refractive index
d = 100 # diameter (nm)
lambda0 = 314.15 # wavelength (nm)
qext, qsca, qback, g = mie.efficiencies(m, d, lambda0)
Documentation and Examples
--------------------------
The full documentation is available as:
Interactive documentation (JupyterLite):
|lite|
Static Jupyter notebooks on ReadTheDocs:
|docs|
Among other things the documentation discusses:
- **Mathematical formulation of Mie theory**
https://miepython.readthedocs.io/en/latest/01_theory.html
- **Normalization conventions and units**
https://miepython.readthedocs.io/en/latest/02_normalization.html
- **Numerical stability considerations**
https://miepython.readthedocs.io/en/latest/03_stability.html
- **Validation against MIEV0 and other reference implementations**
https://miepython.readthedocs.io/en/latest/04_validation.html
- **Guidelines for parameter choices and truncation order**
https://miepython.readthedocs.io/en/latest/05_truncation.html
- **Physical interpretation, resonances, and comparison plots**
https://miepython.readthedocs.io/en/latest/06_examples.html
Representative results simple examples:
https://github.com/scottprahl/miepython/tree/main/miepython/examples
.. image:: https://raw.githubusercontent.com/scottprahl/miepython/main/docs/images/01.svg
.. image:: https://raw.githubusercontent.com/scottprahl/miepython/main/docs/images/02.svg
.. image:: https://raw.githubusercontent.com/scottprahl/miepython/main/docs/images/03.svg
.. image:: https://raw.githubusercontent.com/scottprahl/miepython/main/docs/images/04.svg
Performance and Acceleration
----------------------------
``miepython`` supports optional Numba JIT compilation:
.. code-block:: python
import os
os.environ["MIEPYTHON_USE_JIT"] = "1" # must be set before import
import miepython
This can provide 10–50× speedups for large parameter sweeps or ensemble calculations.
Benchmark example (100,000 particles):
============ ============ ==========
Version Time Speedup
============ ============ ==========
Pure Python 4.00 s 1×
JIT Enabled 0.15 s 27×
============ ============ ==========
Citation
--------
If you use ``laserbeamsize`` in academic, instructional, or applied technical work, please cite:
Prahl, S. (2026). *miepython: Pure python calculation of Mie scattering* (Version 3.0.5) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.7949263
BibTeX:
.. code-block:: bibtex
@software{prahl_miepython_2025,
author = {Scott Prahl},
title = {{miepython}: A Python library for Mie scattering calculations},
url = {https://github.com/scottprahl/miepython},
doi = {10.5281/zenodo.7949263},
year = {2026},
version = {3.0.5},
publisher = {Zenodo}
}
License
-------
``miepython`` is released under the MIT License.