API Reference
GaussMLE.AstigmaticXYZNBGaussMLE.Emitter2DFitGaussMLEGaussMLE.Emitter2DFitSigmaGaussMLE.Emitter2DFitSigmaXYGaussMLE.Emitter3DFitGaussMLEGaussMLE.GaussMLEConfigGaussMLE.GaussianXYNBGaussMLE.GaussianXYNBSGaussMLE.GaussianXYNBSXSYGaussMLE.PSFModelGaussMLE.generate_roi_batchStatsAPI.fit
Main Types and Functions
Fitter and Fitting
GaussMLE.GaussMLEConfig — Type
GaussMLEConfig{P,PC}Main type for configuring and performing Maximum Likelihood Estimation of Gaussian blob parameters.
Fields
backend::Symbol: Compute backend (:cpu,:gpu, or:auto)psf_model::P<:PSFModel: Point spread function modeliterations::Int: Number of Newton-Raphson iterationsconstraints::PC<:ParameterConstraints: Parameter bounds and step limitsbatch_size::Int: Batch size for GPU processingauto_timeout::Float64: Seconds to wait for GPU in auto modegpu_timeout::Float64: Seconds to wait for GPU in explicit gpu modeon_wait: Callback for GPU wait progress feedback
See also
StatsAPI.fit — Function
fit(data::AbstractArray{T,3}, fitter::GaussMLEConfig; variance_map=nothing) -> (BasicSMLD, GaussMLEFitInfo)Fit Gaussian blobs to a stack of ROIs using Maximum Likelihood Estimation.
Arguments
data::AbstractArray{T,3}: ROI data as (roisize, roisize, n_rois) arrayfitter::GaussMLEConfig: Configured fitter object
Keyword Arguments
variance_map=nothing: Optional sCMOS variance map (will override fitter's camera model)
Returns
Tuple{BasicSMLD, GaussMLEFitInfo}: Fitted localizations and fit metadata
Examples
# Fit 1000 ROIs
data = zeros(Float32, 7, 7, 1000) # Your ROI data here
fitter = GaussMLEConfig(psf_model = GaussianXYNB(0.13f0))
smld, info = fit(data, fitter)
# Access results
println("Fitted $(info.n_fits) ROIs in $(info.elapsed_s * 1000) ms")
println("Mean x position: ", mean([e.x for e in smld.emitters]))See also
fit(batch::ROIBatch; psf_model=GaussianXYNB(), iterations=20, backend=:auto, ...) -> (BasicSMLD, GaussMLEFitInfo)Convenience form of fit() that creates a GaussMLEConfig from keyword arguments. Kwargs match GaussMLEConfig fields exactly.
Arguments
batch::ROIBatch: Input ROI data with camera calibration
Keyword Arguments
psf_model=GaussianXYNB(0.13f0): PSF model to useiterations=20: Number of Newton-Raphson iterationsbackend=:auto: Compute backend (:cpu,:gpu, or:auto)constraints=nothing: Parameter constraints (uses defaults if nothing)batch_size=10_000: Batch size for GPU processingauto_timeout=300.0: Seconds to wait for GPU in auto modegpu_timeout=Inf: Seconds to wait for GPU in explicit gpu modeon_wait=nothing: Callback for GPU wait progress
Returns
Tuple{BasicSMLD, GaussMLEFitInfo}: Fitted localizations and fit metadata
Examples
# Simple fit with defaults
smld, info = fit(batch)
# Custom model and iterations
smld, info = fit(batch; psf_model=GaussianXYNBS(), iterations=30)See also
PSF Models
GaussMLE.PSFModel — Type
PSFModel{NParams,T}Abstract type for point spread function models.
The type parameter NParams specifies the number of fitting parameters at compile time, enabling type-stable code generation. The type parameter T specifies the numeric type.
GaussMLE.GaussianXYNB — Type
GaussianXYNB{T} <: PSFModel{4,T}2D Gaussian PSF with fixed width σ.
Parameters (in order)
- x: x-position (fitted in ROI pixels, output in microns)
- y: y-position (fitted in ROI pixels, output in microns)
- N: total photon count
- bg: background per pixel
Fields
σ::T: Fixed Gaussian width (standard deviation in microns)
Example
psf = GaussianXYNB(0.13f0) # σ = 130 nm (typical ~500nm emission, 100nm pixels)
fitter = GaussMLEConfig(psf_model = psf)Note
PSF width is specified in physical units (microns) for camera-independence. Internally converted to pixels based on camera pixel size during fitting.
GaussMLE.GaussianXYNBS — Type
GaussianXYNBS{T} <: PSFModel{5,T}2D Gaussian PSF with variable width σ (fitted parameter).
Parameters (in order)
- x: x-position (fitted in ROI pixels, output in microns)
- y: y-position (fitted in ROI pixels, output in microns)
- N: total photon count
- bg: background per pixel
- σ: Gaussian width (fitted in pixels, output in microns)
Example
psf = GaussianXYNBS() # Variable sigma (no fixed value)
fitter = GaussMLEConfig(psf_model = psf)Note
The fitted σ parameter is stored in microns in Emitter2DFitSigma output.
GaussMLE.GaussianXYNBSXSY — Type
GaussianXYNBSXSY{T} <: PSFModel{6,T}2D Anisotropic Gaussian PSF with independent x and y widths (both fitted parameters).
Parameters (in order)
- x: x-position (fitted in ROI pixels, output in microns)
- y: y-position (fitted in ROI pixels, output in microns)
- N: total photon count
- bg: background per pixel
- σx: Gaussian width in x (fitted in pixels, output in microns)
- σy: Gaussian width in y (fitted in pixels, output in microns)
Example
psf = GaussianXYNBSXSY() # Variable σx, σy (no fixed values)
fitter = GaussMLEConfig(psf_model = psf)Note
The fitted σx and σy parameters are stored in microns in Emitter2DFitSigmaXY output.
GaussMLE.AstigmaticXYZNB — Type
AstigmaticXYZNB{T} <: PSFModel{5,T}3D astigmatic PSF for z-position estimation using engineered astigmatism.
The PSF width varies with z-position according to:
σx(z) = σx₀ * sqrt(1 + ((z-γ)/d)² + Ax*((z-γ)/d)³ + Bx*((z-γ)/d)⁴)
σy(z) = σy₀ * sqrt(1 + ((z+γ)/d)² + Ay*((z+γ)/d)³ + By*((z+γ)/d)⁴)Parameters (in order)
- x: x-position (fitted in ROI pixels, output in microns)
- y: y-position (fitted in ROI pixels, output in microns)
- z: z-position (fitted in pixels, output in microns)
- N: total photon count
- bg: background per pixel
Fields (calibration parameters in microns)
σx₀, σy₀::T: In-focus PSF widths (microns)Ax, Ay::T: Cubic coefficients (dimensionless)Bx, By::T: Quartic coefficients (dimensionless)γ::T: Astigmatism offset (microns)d::T: Depth scaling parameter (microns)
Example
# Typical parameters from calibration (all spatial params in microns)
psf = AstigmaticXYZNB{Float32}(
0.13f0, 0.13f0, # σx₀, σy₀ (130 nm)
0.05f0, 0.05f0, # Ax, Ay (dimensionless)
0.3f0, 0.3f0, # Bx, By (dimensionless)
0.05f0, # γ (50 nm astigmatism offset)
0.4f0 # d (400 nm depth scale)
)
fitter = GaussMLEConfig(psf_model = psf)Note
All spatial parameters in physical units (microns) for camera-independence. Internally converted to pixels based on camera pixel size during fitting.
See also
The astigmatic PSF model is described in Huang et al., Science 319, 810-813 (2008).
Custom Emitter Types
GaussMLE defines custom emitter types that extend SMLMData.AbstractEmitter with additional fields for fitted PSF parameters and goodness-of-fit metrics.
GaussMLE.Emitter2DFitGaussMLE — Type
Emitter2DFitGaussMLE{T} <: AbstractEmitter2D emitter for fixed-σ Gaussian PSF (GaussianXYNB) with goodness-of-fit.
Identical to SMLMData.Emitter2DFit but adds p-value and covariance fields.
Fields
Spatial (microns)
x::T,y::T: Position in microns
Photometry
photons::T: Total photon countbg::T: Background level
Uncertainties (CRLB, microns for spatial)
σ_x::T,σ_y::T: Position uncertainties (microns)σ_xy::T: Position covariance (microns²) - off-diagonal of Fisher matrix inverseσ_photons::T,σ_bg::T: Photometry uncertainties
Goodness-of-Fit
pvalue::T: P-value from χ² test (df = npixels - nparams)
Metadata
frame::Int: Frame numberdataset::Int: Dataset IDtrack_id::Int: Trajectory IDid::Int: Unique emitter ID
GaussMLE.Emitter2DFitSigma — Type
Emitter2DFitSigma{T} <: AbstractEmitter2D emitter with fitted isotropic PSF width σ (for GaussianXYNBS).
Fields
Spatial (microns)
x::T,y::T: Position in microns
Photometry
photons::T: Total photon countbg::T: Background level
PSF Parameter
σ::T: Fitted PSF width (microns)
Uncertainties (CRLB)
σ_x::T,σ_y::T: Position uncertainties (microns)σ_xy::T: Position covariance (microns²) - off-diagonal of Fisher matrix inverseσ_photons::T,σ_bg::T: Photometry uncertaintiesσ_σ::T: PSF width uncertainty (microns)
Metadata
frame::Int: Frame numberdataset::Int: Dataset IDtrack_id::Int: Trajectory IDid::Int: Unique emitter ID
GaussMLE.Emitter2DFitSigmaXY — Type
Emitter2DFitSigmaXY{T} <: AbstractEmitter2D emitter with fitted anisotropic PSF widths σx, σy (for GaussianXYNBSXSY).
Fields
Spatial (microns)
x::T,y::T: Position in microns
Photometry
photons::T: Total photon countbg::T: Background level
PSF Parameters
σx::T,σy::T: Fitted PSF widths in x and y (microns)
Uncertainties (CRLB)
σ_x::T,σ_y::T: Position uncertainties (microns)σ_xy::T: Position covariance (microns²) - off-diagonal of Fisher matrix inverseσ_photons::T,σ_bg::T: Photometry uncertaintiesσ_σx::T,σ_σy::T: PSF width uncertainties (microns)
Metadata
frame::Int: Frame numberdataset::Int: Dataset IDtrack_id::Int: Trajectory IDid::Int: Unique emitter ID
GaussMLE.Emitter3DFitGaussMLE — Type
Emitter3DFitGaussMLE{T} <: AbstractEmitter3D emitter for astigmatic PSF (AstigmaticXYZNB) with goodness-of-fit.
Identical to SMLMData.Emitter3DFit but adds p-value and covariance fields.
Fields
Spatial (microns)
x::T,y::T,z::T: Position in microns
Photometry
photons::T: Total photon countbg::T: Background level
Uncertainties (CRLB, microns for spatial)
σ_x::T,σ_y::T,σ_z::T: Position uncertainties (microns)σ_xy::T,σ_xz::T,σ_yz::T: Position covariances (microns²) - off-diagonals of Fisher matrix inverseσ_photons::T,σ_bg::T: Photometry uncertainties
Goodness-of-Fit
pvalue::T: P-value from χ² test (df = npixels - nparams)
Metadata
frame::Int: Frame numberdataset::Int: Dataset IDtrack_id::Int: Trajectory IDid::Int: Unique emitter ID
Data Structures
ROI data structures are provided by SMLMData.jl and re-exported for convenience:
ROIBatch- Batch of ROIs with camera and position informationSingleROI- Single ROI for fitting
Simulation
GaussMLE.generate_roi_batch — Function
generate_roi_batch(camera, psf_model; kwargs...) → ROIBatchGenerate synthetic ROI data with camera-appropriate noise.
Arguments
camera::AbstractCamera: Camera model (IdealCamera or SCMOSCamera)psf_model::PSFModel: PSF model determining parameter structure
Keywords
n_rois::Int = 100: Number of ROIs to generateroi_size::Int = 11: Size of each ROI (square)true_params::Union{Nothing, Matrix} = nothing: Parameters or use PSF defaultscorners::Union{Nothing, Matrix{Int32}} = nothing: ROI corners or auto-generateframe_indices::Union{Nothing, Vector{Int32}} = nothing: Frame indices or all frame 1xy_variation::Float32 = 1.0: Position variation (±pixels) when using defaultscorner_mode::Symbol = :random: Corner generation mode (:random, :grid, :clustered)min_spacing::Int = 20: Minimum pixel spacing between ROIsseed::Union{Nothing, Int} = nothing: Random seed for reproducibility
Returns
ROIBatch: Complete ROI batch with camera attached, ready for fitting
Device Management
Device selection is controlled via the backend keyword argument to GaussMLEConfig:
:autoornothing- Automatically detect best device (default):cpu- Force CPU execution:gpu- Require GPU, error if unavailable after timeout
Example:
fitter = GaussMLEConfig(backend = :gpu) # Use GPU
fitter = GaussMLEConfig(backend = :cpu) # Force CPUConstraints
Parameter constraints can be configured via the constraints keyword argument to GaussMLEConfig. Default constraints are automatically generated based on the PSF model and ROI size.
Camera Models
Camera models are defined in SMLMData.jl. GaussMLE uses these types:
SMLMData.IdealCamera- Poisson noise only (no readout noise)SMLMData.SCMOSCamera- Poisson + per-pixel readout noise variance
See SMLMData.jl documentation for camera type details.
Output Format
The fit() function returns a tuple (smld, info) where smld is a SMLMData.BasicSMLD containing:
emitters::Vector{<:AbstractEmitter}- Fitted emitter objects (type depends on PSF model)camera::AbstractCamera- Camera model usedn_frames::Int- Number of framesn_datasets::Int- Number of datasets
Emitter Type Dispatch
| PSF Model | Emitter Type |
|---|---|
GaussianXYNB | Emitter2DFitGaussMLE |
GaussianXYNBS | Emitter2DFitSigma |
GaussianXYNBSXSY | Emitter2DFitSigmaXY |
AstigmaticXYZNB | Emitter3DFitGaussMLE |