Skip to content

JuliaSMLM/MicroscopePSFs.jl

Repository files navigation

MicroscopePSFs.jl

Stable Dev Build Status Coverage

A Julia package for working with microscope Point Spread Functions (PSFs). This package provides implementations of common PSF models and tools for integrating them with camera geometry for single-molecule localization microscopy applications.

Features

  • Multiple PSF implementations (2D and 3D models)
  • Integration with camera geometry via the SMLMData.jl package
  • Complex field amplitude calculations for coherent optics
  • Flexible pixel integration with adjustable sampling density
  • Zernike polynomial tools for wavefront modeling
  • Support for dipole emitters and polarization effects

PSF Models Overview

PSF Type Description Key Parameters When to Use
GaussianPSF Isotropic 2D Gaussian σ Rapid prototyping, computational efficiency
AiryPSF Diffraction-limited circular aperture nₐ, λ Accurate 2D diffraction modeling
ScalarPSF 3D scalar diffraction model nₐ, λ, n 3D imaging, aberrations
VectorPSF 3D vectorial model with polarization nₐ, λ, optional dipole High-NA objectives, polarization effects
SplinePSF B-spline approximation Source PSF, sampling parameters Accelerating computation of complex PSFs

For detailed descriptions of each PSF type, see the documentation.

Core Interface

All PSF types implement a consistent interface:

# Direct evaluation
intensity = psf(x, y)       # 2D position (x,y in μm)
intensity = psf(x, y, z)    # 3D position (3D PSFs only)

# Complex amplitude
amp = amplitude(psf, x, y)  # Returns complex field amplitude

# Camera integration
pixels = integrate_pixels(psf, camera, emitter)  # Realistic image formation

See the interface documentation for details.

Installation

using Pkg
Pkg.add("MicroscopePSFs")

Basic Usage

using MicroscopePSFs, SMLMData

# Create a PSF model
psf = AiryPSF(1.4, 0.532)  # NA = 1.4, λ = 0.532μm (532nm)
# or
psf = GaussianPSF(0.15)    # σ = 0.15μm (150nm)

# Direct PSF evaluation at a point
intensity = psf(0.5, 0.3)  # x = 0.5μm, y = 0.3μm

# Create camera (20×20 pixels, 0.1μm pixel size)
camera = IdealCamera(20, 20, 0.1)

# Create emitter 
emitter = Emitter2D(1.0, 1.0, 1000.0)  # x = 1μm, y = 1μm, 1000 photons

# Generate realistic microscope image
pixels = integrate_pixels(psf, camera, emitter)

Simulating a 3D PSF with Aberrations

# Create a 3D PSF with aberrations
zernike_coeffs = ZernikeCoefficients(15)        # Up to 15 Zernike terms
zernike_coeffs[6] = 0.5                         # Add vertical astigmatism
psf_3d = ScalarPSF(1.4, 0.532, 1.518; zernike_coeffs=zernike_coeffs)

# Create 3D emitter
emitter_3d = Emitter3D(1.0, 1.0, 0.5, 1000.0)  # x, y, z, photons

# Generate image
pixels_3d = integrate_pixels(psf_3d, camera, emitter_3d)

Coordinate Systems and Units

  • All physical dimensions are in micrometers (μm)
  • Function arguments are (x, y, z)
  • Array dimensions are [y, x, z]
  • Camera coordinates have (0,0) at the top-left corner of the top-left pixel

For detailed conventions, see the documentation.

Documentation

Comprehensive documentation is available:

License

This project is licensed under the MIT License - see the LICENSE file for details

About

Microscope Point Spread Function Calculator

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 6

Languages