You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Python Version: The project requires Python>=3.10. We suggest to use Python 3.11.
JAX Version: An updated version of JAX is required. Please refer to the installation instructions for the specific version.
❗️ Major new features:
🦾🤖 Noise-aware optimization strategy
Implemented a new robust, noise-aware optimization scheme for simulating real-world experimental conditions.
The strategy includes imperfections, misalignment, and noise sources in all optical components: including SLMs, wave plates, misalignment, and beam splitters.
Optimization ncan be run on multiple parallel optical tables using vmap, each with randomly sampled noise.
Detailed explanation of the strategy is available in the project's README.md.
📖 New step-by-step guides
Added noisy_optimization.ipynb: A guide on setting up optimization using the new noise-aware scheme.
Added noisy_4f_system.ipynb: A guide on adding noise to optical elements.
✨ New functions in optical_elements.py
Optical elements
sSLM_with_amplitude: Implements a super-Spatial Light Modulator (sSLM) with phase and amplitude modulation.
jones_sSLM_with_amplitude: Defines the Jones matrix of super-SLM that modulates both phase and amplitude sSLM_with_amplitude.
BS_symmetric: Implements a classical lossy two-mode beam splitter.
BS_symmetric_SI: Implements a classical lossy single-input beam splitter.
cylindrical_lens: Defines a transparent plano-convex cylindrical lens.
axicon_lens: Implements an axicon lens function that produces a Bessel beam.
Optical setups
bb_amplitude_and_phase_mod: Implements a basic building block for general setup construction, containing an sSLM with amplitude and phase modulation and a WP liked by propagation distance z.
robust_discovery: Implements a single-wavelength 3x3 setup for hybrid (topology + optical settings) discovery. Includes noise settings.
Noise simulation
shake_setup: Creates noise for different optical elements on an optical table.
shake_setup_jit: JIT-compilable version of shake_setup for use in optimization.
✨ New functions in toolbox.py
Image processing
image_to_binary_mask: Converts an image to a binary mask given a threshold.
Mathematical functions
gaussian: Returns a 1D Gaussian distribution.
gaussian_2d: Returns a 2D Gaussian distribution.
lorentzian: Returns a 1D Lorentzian function.
lorentzian_2d: Returns a 2D Lorentzian function.
Data analysis
fwhm_1d_fit: Computes the Full Width at Half Maximum (FWHM) of a 1D array using a fit function (Gaussian or Lorentzian).
fwhm_2d_fit: Computes the FWHM of a 2D array using a fit function (Gaussian or Lorentzian).
compute_fwhm: Calculates the FWHM in 1D or 2D for various field components.
Data Processing
MultiHDF5DataLoader: A class for loading data from multiple HDF5 files, designed for use with JAX. This module is used in four_f_optimizer.py.
Minor modifications in wave_optics.py and vectorized_optics.py:
Improved readability: print statemets now display time to 4 decimal places.
🚩 Removals and deprecations
Removed functions in optical_elements.py:
Several functions related to optical setups from previous versions of the paper have been removed: general_setup, vSTED, sharp_focus and xl_setup.
Removed functions in loss_functions.py:
small_area: Fraction of intensity comprised inside the area of a mask.
small_area_STED: Fraction of intensity comprised inside the area of a mask - STED version.
Removed files from experiments:
Several files related to optical setups from previous versions of the paper have been removed: sharp_focus_optical_table.py, sharp_focus_optimizer.py, vsted_optical_table.py, vsted_optimizer.py, xl_optical_table.py and xl_optimizer.py.