All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
3.0.0 - 2024-01-22
fp_recover
now takes alearning_rate
rate parameter to adjust the learning rate of the gradient descent method for pupil recovery.- There is a now a command line tool called
calibrate_ptycho
for acquiring FP calibration datasets. The acquisition engine is pymmcore-plus. - There is now a
Metadata
typed dictionary for use by acquisition scripts and dataset loading logic. - A
StackType.LEB
dataset type has been added so thatload_dataset
works with stacks acquired by the newcalibrate_ptycho
script. FPDataset
now hassave
andload
methods for saving the dataset to and reading it from disk.FPDataset.save
supports saving to both a pickled and a MATLAB format.- A Jupyter notebook was added to demonstrate how to create HDR dataset.
- MATLAB scripts were added to the
misc
folder for running FP reconstructions through the algorithm of Jiang, et al. Nature Protocols 18, 2051 (2023). This is used to cross-check the Python code.
- Renamed the Python package to
leb.ptycho
. - The default number of Zernike coefficients to use in
fp_recover
is now 10, which includes all of the Zernike modes up to radial degree 3. fp_recover
now returns aFPResults
object that contains, in addition to the object and pupil reconstruction, the gradients and Zernike coefficients from each iteration of the recovery process if the gradient descent pupil recovery method is used.calibrate_rectangular_matrix
now accounts for refraction by the microscope slide when determining the wave vector corresponding to each LED.
- Pupil recovery by gradient descent is now working.
- Fixed the default value for the
axial_offset_mm
keyword argument to the functioncalibrate_rectangular_matrix
. It was likely assumed to be in microns and not millimeters.
- Removed
flip_yz
argument fromcalibrate_rectangular_matrix
because it was confusing and not really used.
2.0.0 - 2023-08-07
- Test data for the Jupyter notebooks are now part of the repository.
- Implemented gradient descent pupil recovery in
fp_recover
reconstruction. - Added a
show_progress
parameter tofp_recover
to toggle a progress bar during reconstruction. - Added a function
hdr_combine
to combine low dynamic range images into a single HDR image. This can be used for calibrations. - Added a function
hdr_stack
to combine multiple, low dynamic range FPDatasets into a single HDR FPDataset. Pupil
objects now contain aZernike
instance that can be used for pupil calculations during Fourier Ptychographic recovery routines.- Added a
phase_contrast.bsh
script to the Micro-Manager scripts folder to acquire differential phase contrast images. - Added
brightfield
,darkfield
, and several phase contrast patterns and their corresponding commands to the Arduino control code.
- The default pixel size in
fp_simulation
andPupil.from_system_params
is now 5.86 um to match the pixel size of the new Flir Grasshopper 3 camera. - The
max_radial_degree
parameter to theZernike
class is now calledradial_degree
. - The
calibrate.bsh
Micro-Manager script now takes one acquisition for each of several sets of exposure times and camera gains.
- Fixed pupil recovery using the
PupilRecoveryMethod.rPIE
method by zeroing values outside the pupil radius.
1.1.1 - 2023-07-10
- Fixed a residual bug in
calibrate.bsh
from renaming row/col to x/y.
1.1.0 - 2023-07-10
- A detailed discussion about the coordinate systems used to transform LED indexes to wavevectors
is now included in
calibration.py
.
FPDataset
images can now be rectangular instead of requiring them to be square. This change was made to make it easier to import datasets from cameras with non-square sensors.fp_recover
now raises aFPRecoveryError
instead of anAssertionError
if dataset images are not square.
- The spiral generator in
calibrate.bsh
now returns (x, y) coordinates instead of (row, col). clockwise
andcounterclockwise
spiral directions incalibrate.bsh
are now correct.calibrate_rectangular_matrix
now accounts for the fact that the LED matrix coordinate system's z-axis points in the opposite direction of the z-axis of the global coordinate system.
1.0.0 - 2023-07-06
- Added a
Zernike
class and routines to compute Zernike polynomials for aberrated pupils to leb-freeze. - The
calibrate.bsh
Micro-Manager script now appends the LED indexes to the image metadata. - The
calibrate.bsh
Micro-Manager script now appends the center LED indexes to the image metadata. FPDataset
instances can now be sliced, e.g.dataset[:42]
.- A new
FPDataset.crop
method allows images to be cropped.
- The leb-freeze simulation now returns an unaberrated pupil to use in reconstructions and a ground truth pupil.
fp_recover()
now returns the reconstructed object and pupil, not just the object.
- Fixed the
pupil_radius_px
calculation for thePupil
class in leb-freeze. - Fixed a bug when printing the status in
calibrate.bsh
. - Fixed a bug related to serial command variable naming in
calibrate.bsh
. - Fixed scaling factors for FFTs in
fp_recover
function.
- Added leb-freeze Python package to analyze Fourier ptychography data.
- Created a Fourier Pytchographic reconstruction routine called
fp_recover
that is based on https://doi.org/10.1038/s41596-023-00829-4. - Created a simulation routine to generate simulated FP datasets to verify the recovery process.
- Responses from the Arduino to the PC are now terminated with the linefeed
\n
character.
- Added a
calibrate.bsh
script to run the Fourier ptychography calibration routine.