Recent Releases of slmsuite
slmsuite - v0.3.0
New Features
- Added a new interface for
Meadowlarkthat is compatible with the different types of SDKs (HDMI, PCIe, ...). Thanks to @darikoneil , @nobias , and Anna at Meadowlark. - Completed the interface for
HoloeyeSLMs. Thanks to @mkm2 . - Added a USB interface for
HamamatsuSLMs. Thanks to @ninovarde . - Added remote interface where a
Servercan host cameras and SLMs which clients can connect to withRemoteCameraandRemoteSLM. For instance, I had a 20 MP camera that for whatever reason wasn't playing nicely with the computer with the GPU and SLMs, so this feature allows that camera to be hosted on a different computer. This feature was inspired in part by slmpy's server. - Made
CameraandSLMexplicitly abstract as a resolution to #92 . - Fixed a bug with
Thorlabsfor 0.2.0+. Thanks to @calebrich . - Modified
binaryto accept vectors with coordinate larger than 1, which are interpreted as instead pixel_periods for the gratings. - Added
quadrantandbahtinovalignment masks. Thanks to @bodokaiser for suggestingquadrant. - Started the process of typehinting (this will continue to the rest of the package if it looks alright) and autodocing the types.
- Minor bugfixes with datatyping, documentation,
- Fixes and upgrades to
CompressedSpotHologram. take_tileto tile a stack of images into a grid. Faster useful alternative to and withintake_plot.- Other imaging functions.
- Crosshair feature for live cameras.
- Updated package citation and badges.
- Assorted documentation.
Pull Requests
- Update thorlabs.py by @calebrich in https://github.com/slmsuite/slmsuite/pull/98
- SLM Hamamatsu by @ichristen in https://github.com/slmsuite/slmsuite/pull/106
- Added support for Holoeye SLMs by @mkm2 in https://github.com/slmsuite/slmsuite/pull/105
- Meadowlark Interface for PCIe by @darikoneil in https://github.com/slmsuite/slmsuite/pull/90
- Camera documentation by @ichristen in https://github.com/slmsuite/slmsuite/pull/107
- Remote + Gratings. by @ichristen in https://github.com/slmsuite/slmsuite/pull/93
New Contributors
- @calebrich made their first contribution in https://github.com/slmsuite/slmsuite/pull/98
- @mkm2 made their first contribution in https://github.com/slmsuite/slmsuite/pull/105
- @darikoneil made their first contribution in https://github.com/slmsuite/slmsuite/pull/90
Full Changelog: https://github.com/slmsuite/slmsuite/compare/v0.2.1...v0.3.0
- Python
Published by ichristen about 1 year ago
slmsuite - v0.2.0
New Features
- Cameras update #57
ipywidgetinterface to view cameras live in jupyter notebooks, asynchronous usingasyncio. No longer will it be necessary to close a camera such that it could be opened in an external live viewer. Call.live()on any camera.- Instrumental #17 (polish/debugging) #80 ,
- Micro-Manager #21 (polish/debugging),
- Imaging Source #25 , #67
- VimbaX #66 ,
- MindVision #71 ,
- Pylablib #72 ,
- Basler #74 ,
- Webcam support using
cv2(carryover from 0.1.2). - Changed camera internals regarding exposure and image saving.
- Some extra camera documentation and error reporting.
- All hardware interfaces have a
pickle()method to send attributes to a savable dictionary. This is useful to record system state.- The
.save()method pickles and saves to .h5.
- The
Breaking Changes
- Some small changes to the
"__meta__"parameter of calibrations. - Potentially different behavior in array fitting.
Bugfixes
- pyglet >=2.0 support with <2.0 backwards compatibility #7 , tested on Windows systems.
- Small fixes.
New Contributors
- @bodokaiser made their first contribution in https://github.com/slmsuite/slmsuite/pull/81
- @kwang428 made their first contribution in https://github.com/slmsuite/slmsuite/pull/67
- @nacslab made their first contribution in d2d9927
- @lufermar made their first contribution in 092dcdf
- @coldkevin1991 made their first contribution in b373e9f
Full Changelog: https://github.com/slmsuite/slmsuite/compare/v0.1.2...v0.2.0
- Python
Published by ichristen over 1 year ago
slmsuite - v0.2.0
New Features
- #57
ipywidgetinterface to view cameras live in jupyter notebooks, asynchronous usingasyncio. No longer will it be necessary to close a camera such that it could be opened in an external live viewer. Call.live()on any camera.- #17 (polish/debugging) #80 ,
- #21 (polish/debugging),
- #25 , #67
- #66 ,
- #71 ,
- #72 ,
- #74 ,
- Changed camera internals regarding exposure and image saving.
- All hardware interfaces have a
pickle()method to send attributes to a savable dictionary. This is useful to record system state.- The
.save()method pickles and saves to .h5.
- The
Breaking Changes
- Some small changes to the
"__meta__"parameter of calibrations. - Potentially different behavior in array fitting.
Bugfixes
- #7
- Small fixes.
New Contributors
- @bodokaiser made their first contribution in https://github.com/slmsuite/slmsuite/pull/81
- @kwang428 made their first contribution in https://github.com/slmsuite/slmsuite/pull/67
- @nacslab made their first contribution in d2d9927
- @lufermar made their first contribution in 092dcdf
- @coldkevin1991 made their first contribution in b373e9f
Full Changelog: https://github.com/slmsuite/slmsuite/compare/v0.1.2...v0.2.0
- Python
Published by ichristen over 1 year ago
slmsuite - v0.1.2
v0.1.2
New Features
Webcaminterface usingcv2'sVideoCaptureinterface. This supports builtin or USB webcams, among other things.- Polished the
Instrumentalcamera interface. - Honed Zernike wavefront calibration functionality.
- Renamed
SLM.writetoSLM.set_phasewith backwards compatibility.
Breaking Changes
- Reverted
read_/write_paradigm in favor ofload_/save_.CameraSLM.save_calibrationCameraSLM.load_calibrationSLM.load_vendor_phase_correctionSLM.save_phaseSLM.load_phaseSantec.load_csvHologram.save_statsHologram.load_statsanalysis.files.save_image
Bugfixes
- #79
Full Changelog: https://github.com/slmsuite/slmsuite/compare/v0.1.1...v0.1.2
- Python
Published by ichristen over 1 year ago
slmsuite - v0.1.0
New Features
- Simulation of hardware with
SimulatedSLMandSimulatedCamera, modeling experimental effects. - New
toolbox.phasefunctionssinusoid()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).
- For instance, functions like
- 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).
- New
- 3D support for
convert_vector()(previously known asconvert_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. #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
pytorchworking alongsidecupy. - Quadratic initial phase guess (instead of random) to promote a smoother hologram.
- Multiplane holography with the meta-hologram
MultiplaneHologram, which simultaneously optimizes the objectives of multiple child holograms. - Experimental holography features:
remove_vortices()and optical vortex analysis tools to remove phase kinks from the farfield.get_multiplane_defocus_blur()for realistic defocus.
- Wavefront calibration
wavefront_calibrate()that simultaneously measures at multiple calibration points.- When combined with the above, implemented #60 in spot arrays.
- This also includes other updates to wavefront calibration #42
- New calibration algorithm based on removal of Zernike terms.
- More robust
fourier_calibrate()fitting. pixel_calibrate()measuring phase swing and crosstalk.settle_calibrate()measuring the $1/e$ SLM settle time.- Revamped
CameraSLMcalibration internal storage and saving. format_2vectors()generalized toformat_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.
- Upon
get_image()error, cameras now try againcapture_attemptstimes. This improves reliability against rare errors. SLM,Camera, andCameraSLMsubclasses now have default plotting.plot()method that makes it easy to see what's happening in the phase and image domains.Holograms also have improved.plot_farfield()enabling different units and helper boxes.- Added untested #17
- Added skeleton for #26
- Docs have moved from the readthedocs theme to the very nice pydata theme (used by numpy, etc).
- Lots of documentation cleanup and polishing.
- The package index moved from
QPG-MIT/slmsuitetoslmsuite/slmsuite.
Breaking Changes
- Changed
toolbox.phasefunctions:zernike()andzernike_sum()are completely changed.blaze()had theoffset=parameter removed as it was redundant with+=.
- Renamed variables in cameras and SLMs to reduce clutter:
dx_um,dy_um->pitch_umdx,dy->pitchx_grid,y_grid->gridphase_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 theSLMconstructor might break.
- Renamed variables in
Holograms:methodwas moved toflags.extract_phase()andextract_farfield()->get_phase()andget_farfield().
- Renaming in
FourierSLM:- Different calibrations are now stored in a single dict
calibrations. - Saving was revamped to use a single method to save all calibrations to avoid method bloat as calibrations are added.
- For instance
save_wavefront_calibration()andload_wavefront_calibration()is now changed towrite_calibration("wavefront_superpixel")andread_calibration("wavefront_superpixel")orwrite_calibration("wavefront_zernike")andread_calibration("wavefront_zernike"). wavefront_calibrate()has renamed and reorganized variables.- In particular
interference_point->calibration_points. - Processing methods were also renamed for better organization. For instance
process_wavefront_calibration()->wavefront_calibration_process()
- Different calibrations are now stored in a single dict
- Assorted general attempts at improving packaging naming uniformity.
- For instance, using
get_andset_,read_andwrite_, etc as the dominant language.
- For instance, using
Bugfixes
- Warning for #49
- #53
- #62
- #63
- #73
- Many small things.
Under the Hood
- Major reorganization of internal files.
algorithmsis split into many smaller files.fitfunctionsandfilesare moved frommisctoanalysisandtoolbox.
- Introduced a number of custom CUDA kernels (in cuda.cu).
- Python
Published by ichristen almost 2 years ago