Psf
Point Spread Function calculations for fluorescence microscopy.
Install / Use
/learn @cgohlke/PsfREADME
.. This file is generated by setup.py
Point Spread Function calculations for fluorescence microscopy
Psf is a Python library to calculate Point Spread Functions (PSF) for fluorescence microscopy.
The psf library is no longer actively developed.
:Author: Christoph Gohlke <https://www.cgohlke.com>_
:License: BSD-3-Clause
:Version: 2026.1.18
Quickstart
Install the psf package and all dependencies from the
Python Package Index <https://pypi.org/project/psf/>_::
python -m pip install -U "psf[all]"
See Examples_ for using the programming interface.
Source code and support are available on
GitHub <https://github.com/cgohlke/psf>_.
Requirements
This revision was tested with the following requirements and dependencies (other versions may work):
CPython <https://www.python.org>_ 3.11.9, 3.12.10, 3.13.11, 3.14.2 64-bitNumPy <https://pypi.org/project/numpy/>_ 2.4.1Matplotlib <https://pypi.org/project/matplotlib/>_ 3.10.8 (optional for plotting)
Revisions
2026.1.18
- Use multi-phase initialization.
- Improve code quality.
2025.8.1
- Drop support for Python 3.10, support Python 3.14.
2025.1.1
- Improve type hints.
- Drop support for Python 3.9, support Python 3.13.
2024.5.24
- Fix docstring examples not correctly rendered on GitHub.
2024.4.24
- Support NumPy 2.
2024.1.6
- …
Refer to the CHANGES file for older revisions.
References
- Electromagnetic diffraction in optical systems. II. Structure of the image field in an aplanatic system. B Richards and E Wolf. Proc R Soc Lond A, 253 (1274), 358-379, 1959.
- Focal volume optics and experimental artifacts in confocal fluorescence correlation spectroscopy. S T Hess, W W Webb. Biophys J (83) 2300-17, 2002.
- Electromagnetic description of image formation in confocal fluorescence microscopy. T D Viser, S H Wiersma. J Opt Soc Am A (11) 599-608, 1994.
- Photon counting histogram: one-photon excitation. B Huang, T D Perroud, R N Zare. Chem Phys Chem (5), 1523-31, 2004. Supporting information: Calculation of the observation volume profile.
- Gaussian approximations of fluorescence microscope point-spread function models. B Zhang, J Zerubia, J C Olivo-Marin. Appl. Optics (46) 1819-29, 2007.
- The SVI-wiki on 3D microscopy, deconvolution, visualization and analysis. https://svi.nl/NyquistRate
Examples
.. code-block:: python
>>> import psf
>>> args = dict(
... shape=(32, 32),
... dims=(4, 4),
... ex_wavelen=488,
... em_wavelen=520,
... num_aperture=1.2,
... refr_index=1.333,
... pinhole_radius=0.55,
... pinhole_shape='round',
... )
>>> obsvol = psf.PSF(psf.GAUSSIAN | psf.CONFOCAL, **args)
>>> obsvol.sigma.ou
(2.588..., 1.370...)
>>> obsvol = psf.PSF(psf.ISOTROPIC | psf.CONFOCAL, **args)
>>> print(obsvol, end='')
PSF
ISOTROPIC|CONFOCAL
shape: (32, 32) pixel
dimensions: (4.00, 4.00) um, (55.64, 61.80) ou, (8.06, 8.06) au
excitation wavelength: 488.0 nm
emission wavelength: 520.0 nm
numeric aperture: 1.20
refractive index: 1.33
half cone angle: 64.19 deg
magnification: 1.00
underfilling: 1.00
pinhole radius: 0.550 um, 8.498 ou, 1.1086 au, 4.40 px
computing time: ... ms
>>> obsvol[0, :3]
array([1. , 0.51071, 0.04397])
>>> # write the image plane to file
>>> obsvol.slice(0).tofile('_test_slice.bin')
>>> # write a full 3D PSF volume to file
>>> obsvol.volume().tofile('_test_volume.bin')
Refer to psf_example.py in the source distribution for more examples.
Related Skills
node-connect
350.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
claude-opus-4-5-migration
109.9kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
frontend-design
109.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
model-usage
350.1kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
