Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

r0.0.2 Candidate #69

Open
wants to merge 101 commits into
base: main
Choose a base branch
from
Open

r0.0.2 Candidate #69

wants to merge 101 commits into from

Conversation

ichristen
Copy link
Collaborator

@ichristen ichristen commented May 1, 2024

Staging pull request for dev -> main for r0.0.2. This message should be treated as an editable draft of the release notes.

r0.0.2

New Features (checkbox is ready for release)

  • Simulation of hardware with SimulatedSLM and SimulatedCamera, modeling experimental effects.
  • New toolbox.phase functions
    • sinusoid() grating.
    • binary() grating.
    • 2D general polynomial().
  • Fitting the SLM's source amplitude data to recenter grids and derive scales.
    • For instance, functions like lens() which use the SLM grid are now centered on the source amplitude and will focus coaxially.
    • This also is now used in choosing a radius for structured light conversions and Zernike data (see next).
  • Revamped Zernike functionality.
    • New convert_zernike_index() function to convert between common indexing standards.
    • Auto-choosing a good Zernike aperture from fitted source amplitude data.
    • Zernike derivatives (computed via the chain rule, so fast).
  • 3D support for convert_vector() (previously known as convert_blaze_vector()) and new units, including:
    • "zernike", which expresses 3D points as the result of coordinates (in radians) directly multiplied with normalized tilt and focus Zernike polynomials.
    • metric units in camera-space, making use of knowledge of the camera pixel size and magnification between the camera and experiment.
  • 3D spot arrays CompressedSpotHologram. 3D Spots #41
  • Spot arrays with unique Zernike aberration compensation for every spot (generalization of the above). Every spot goes to the desired point in 'aberration space'.
  • Conjugate gradient optimization of holograms using pytorch working alongside cupy.
  • Quadratic initial phase guess (instead of random) to promote a smoother hologram.
  • Wavefront calibration wavefront_calibrate() that simultaneously measures at multiple calibration points.
  • More robust fourier_calibrate() fitting.
  • pixel_calibrate() measuring phase swing and crosstalk.
  • settle_calibrate() measuring the $1/e$ SLM settle time.
  • Revamped calibration internal storage and saving.
  • format_2vectors() generalized to format_vectors() with N-dimensional support.
  • Allow moments to accept arbitrary grids, among other small changes.
  • Divide and conquer algorithm for smallest_distance() (now can handle millions of points in $O(N\log N)$ time).
  • Artificial bitdepth enhancement for cameras:
    • Multi-exposure High Dynamic Range imaging,
    • Software averaging.
  • Added untested Instrumental #17
  • Added skeleton for Holoeye #26

Breaking Changes

  • Changed toolbox.phase functions:
    • zernike() and zernike_sum() are completely changed.
    • blaze() had the offset= parameter removed as it was redundant with +=.
  • Renamed variables in cameras and SLMs to reduce clutter:
    • dx_um, dy_um -> pitch_um
    • dx, dy -> pitch
    • x_grid, y_grid -> grid
    • phase_correction, measured_amplitude, -> source
    • Constructors are also modified in some cases.
    • Default parameters are changed in most cases.
    • High-level SLMs (Santec, Meadowlark, ...) should largely be fine, but direct calls to the SLM constructor might break.
  • Renamed variables in Holograms:
    • method was moved to flags.
  • Renaming in FourierSLM:
    • Different calibrations are now stored in a single dict calibrations.
    • wavefront_calibrate() has renamed and reorganized variables.
  • TODO

Bugfixes

Under the Hood

  • Major reorganization of internal files.
    • algorithms is split into many smaller files.
    • fitfunctions and files are moved from misc to analysis and toolbox.
  • Introduced a number of custom CUDA kernels (in cuda.cu).
  • Docs have moved from the readthedocs theme to the very nice pydata theme (used by numpy, etc).

cpanuski and others added 30 commits April 16, 2023 10:18
- Swapped None and 0 for phase_steps.
- Saved the old phase calibration.
+ Tied together slm.spot_radius_kxy() and fs.get_farfield_spot_size()
+ Enable simulation.ipynb example
@ichristen ichristen added the r0.0.2 Planned part of the 0.0.2 release label May 1, 2024
@ichristen ichristen mentioned this pull request May 2, 2024
Also:
- smallest_distance divide and conquer
- docs polish and rejig
- copied settle_time branch
- pixel_calib polish
- new Zernike wavefront calibration
- moved Hologram.methods to .flags
- quadratic initial phase
- some variable hiding
- parabola fitfunction
- cleaned phase functions to remove offset vars (functionality is equivalent to +=)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
r0.0.2 Planned part of the 0.0.2 release
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants