# Release Notes

## Version 0.977

- Fixed bug in internal Euler angle computation.
- Fixed bug in DTshift imaging scripts.
- Updated draw_array function.

## Version 0.976

- Fixed B mode zoning of
`calc_bmode_zone`

in large_scatterer examples. - Fixed SSA error in deleted code for Euler angle rotation.
- Updated
`draw_array`

and respective`get_transducer`

functions for mm sizing and general formatting. - Updated derivative calculation error in Hanning pulse.
- General update in time delay function.
- Updated
`zmin`

in imaging`scatter_example`

. - Corrected Euler angles transpose matrix so that Euler angles internally in FOCUS correctly follow a YXZ rotation convention.
- Added synthetic aperture imaging scripts to Examples.
- Renamed
`'method'_imaging_synthetic`

to`'method'_imaging_pairwise`

to reflect a more descriptive naming convention.

## Version 0.974

- Updated Euler angles to accurately follow YXZ Euler rotation convention.

## Version 0.972

- Introduction of CUDA FNM scripts for MATLAB version of FOCUS on Linux and Windows and Examples.
- Introduction of imaging functions for “prebeamform” RF data, i.e. RF data for each receive element of a receive aperture.
- Introduction of imaging functions for “synthetic” aperture RF data, i.e. synthetic aperture RF data across all transmit-receive element pairings of a transmit and receive aperture.
- Renaming of original imaging scripts to include “breamform” in the function name. This script breamforms RF data before convolution, significantly reducing the computation time of the convolution.
- Introduction of plane wave imaging functions and Examples.
- Major improvements to existing functions in FOCUS for efficiency, memory management, and code consistency.
- General bug fixes.
- Restructuring of get_excitation_function() and set_excitation_function() functions to include the excitation amplitude. Type help set_excitation_function or help get_excitation_function in the MATLAB Command Line for details.
- Added native Apple Silicon versions of FOCUS for MATLAB and Octave.

## Version 0.964

- Updated Example files for ease of use and compatibility on both Matlab and Octave versions.
- Minor bug fix to Rayleigh continous wave computation for rectangular transducers.

## Version 0.960

- Added Octave supported versions of FOCUS.
- General bug fixes to kzk and imaging MEX files.

## Version 0.952

- Updates to ensure functionality on MacOS. Generalized Windows and Linux specific code to work on all operating systems.
- Fixed potential memory leaks by tracking allocations through MATLAB supported methods.
- Major bug improvements to Imaging files.
- Updates to the fnm_cw_apodized function for general use.
- Various other bug fixes.

## Version 0.933

- Minor changes to ensure support for MATLAB 2019a
- Minor changes to ensure support for latest Mac, Windows, Linux OS
- Minor changes to ensure support for latest Mac, Windows, Linux compilers
- Updated trig calculation class for faster runtime

## Version 0.927

- Linux updates

## Version 0.924

- Added functionality to 64-bit Mac systems
- Multithreading support on Linux operational again

## Version 0.922

## Version 0.905

- Added B-Mode imaging simulations, includes cyst phantom examples with linear and curved arrays
- Optimized the code by reducing divisions throughout FOCUS
- Upgraded the FFT solution which has reduced the code size by 40% and increased preformance
- Fixed a bug in the excitation code.

## Version 0.760

- Added documentation for kzk_transient and kzk_cw.
- Optimized BHTE code to be about 20% faster.
- Fixed a few typos and mistakes in the documentation.
- Fixed a bug in bioheat_transfer that caused incorrect results to be returned.
- Fixed a bug in kzk_cw that could cause a crash for small sampling frequencies.

## Version 0.714

- Added a CW KZK algorithm (kzk_cw) for circular and spherically-focused transducers.
- Added new functions: get_apodization, get_phases, and get_time_delays.
- Added documentation about lossless-only pressure calculations with fnm_tsd.
- Added documentation for get_chirp and create_rect_enclosed_csa.
- Updated set_time_delays to automatically detect curved transducers.
- Updated example files to use some of the new functions.
- Renamed kzk_nonlinear to kzk_transient.
- Fixed a bug in fnm_transient for ring transducers that caused an incorrect result.
- Fixed a bug in cw_angular_spectrum that caused it to differ with asa_call.
- Fixed a bug in draw_array that cause spherical shells to not be drawn.

## Version 0.594

- Changed all transient examples to use plot_transient_pressure for their output.
- Made some C++ optimizations that make this version of FOCUS slightly faster than the previous versions.
- Fixed a bug that could cause MATLAB to crash when the display flag was set for multithreaded calculations.
- Fixed a bug that caused incorrect results for calculations involving rotated and translated transducers.

## Version 0.580

- Added documentation for the get_chirp function.
- Fixed a bug in impulse_begin_and_end_times that caused elements with zero amplitude to affect the calculation for the rest of the array
- Various minor efficiency improvements in the C++ code.

## Version 0.569

- Added get_chirp(), a function that can be used to generate linear chirps
- Added FDTSD support to ring transducers
- Added a function to generate fully-enclosed cylindrical section arrays for use in tomography simulations
- Optimized BHTE code to be about 40% faster
- Changed set_excitation_function to accept a string to describe the excitation function type rather than an integer index
- Changed create_spherically_focused_ring_array to accept vectors of ring radii
- Fixed a bug in draw_sphericalshell that could prevent anything from being drawn and cause a crash
- Fixed calculation algorithms to allow for negative element amplitudes
- Fixed a bug in set_apodization that prevented column vectors from being used as apodization vectors
- Fixed a bug related to coordinate grid handling that could cause a crash
- Fixed a bug in impulse_begin_and_end_times that could case a crash if a transducer's amplitude was 0
- Fixed a bug that caused transient pressure calculations to ignore transducer amplitudes
- Fixed a bug in the FDTSD calculations that could cause MATLAB to crash
- Fixed a bug that caused some MEX functions to leak memory
- Fixed several memory-related bugs in the spherically-focused ring transducer calculations.
- Fixed a bug that caused an error message when using set_excitation_function to set the spectral clipping value for FDTSD calculations

## Version 0.551

- Fixed several calculation bugs in the Bio-Heat Transfer calculations that could cause incorrect results to be returned
- Changed tapered ring array examples to use constant-area rings

## Version 0.540

- Added support for Mac OS X (64-bit Intel only)
- Merged 32- and 64-bit builds so that there is only one build for each OS/MATLAB combination
- Added easier to use pressure calculation functions (cw_pressure and transient_pressure)
- Added functions to calculate intensity and power
- Added checks to set_medium to make sure that normal attenuation is not set for power law media and vice versa (in anticipation of power law calculations in FOCUS)
- Added axis labeling to draw_array
- Fixed a bug in how set_time_delays handled 2D transducer arrays
- Fixed example files to use reasonable values for coordinate grid axis boundaries
- Removed some debugging code from the KZK calculation

## Version 0.498

- Added some ring transducer array examples
- Added support for nonlinear transient calculations using the KZK equation (circular transducer only)
- Fixed a serious memory leak in impulse_begin_and_end_times
- Fixed C++ memory management to make it easier to fix these kinds of leaks in the future
- Fixed a memory management bug that occasionally caused MATLAB to crash
- Fixed a bug where users would receive a warning that impulse_begin_and_end_times had not been called even if it had
- Fixed some minor documentation bugs

## Version 0.437

- Added support for multi-threaded calculations using OpenMP. The threading is implemented at the array level such that each element is calculated in its own thread. This means that single transducer calculations will be performed at normal speed, but the calculation of transducer arrays is significantly faster, especially for large arrays.
- Added a GUI for performing single-transducer CW pressure calculations.
- Fixed several memory-handling bugs in the FDTSD code.

## Version 0.426

- Fixed several bugs in the layered ASA calculations.
- Added an example for layered media calculations using ASA.
- Removed the radiator_rect example because that function is no longer used.

## Version 0.419

- Added preliminary version of bioheat transfer calculations. Please let us know if you find any mistakes.
- Added examples for Angular Spectrum Approach and ring transducer calculations.
- Frequency-Domain Time-Space Decomposition has been implemented for rectangular and spherical shell transducer shapes.
- Fixed a bug in set_medium that could occasionally cause a property to not be set.
- Fixed a bug in draw_array that caused 3-element transducer arrays to generate an error.

## Version 0.409

- set_medium now supports partial arguments and string arguments as part of the first step in phasing out define_media. See the documentation for details on the new features.
- C++ code has been optimized to improve the speed of some calculations (particularly rayleigh_cw) by up to 35%.
- Fixed impulse_response for spherical shell transducers.
- Added an example that uses the farfield_cw method.

## Version 0.403

- Fixed a bug in the coordinate grid for spherical shell FNM calculations

## Version 0.400

- Fixed a bug that caused fnm_cw to return incorrect results for spherical shell transducers.
- Fixed a bug in the impulse response of circular transducers that caused incorrect results in the paraxial region.
- Fixed bugs in find_single_focus_phase and find_multiple_focus_phase so that they now work correctly with 2-D transducer arrays.
- Fixed some simple mistakes in the documentation for certain functions.

## Version 0.391

- An experimental Frequency-Domain Time-Space Decomposition method is now available. Only circular transducers are supported. Please report any errors you encounter through our contact page.
- Fixed a bug in draw_array that could prevent the entire transducer array from being shown.
- Several typos have been fixed in the documentation.

## Version 0.383

- All MEX functions now support the MATLAB "help" command. For example, typing "help fnm_cw" at the MATLAB prompt will now provide documentation about what fnm_cw does and how to use it.
- Added get_excitation_function() to provide users with the values that FOCUS uses for transient calculations. See the documentation for details.
- Fixed a bug in draw_sphericalshell that was causing an error.
- Fixed a bug in impulse_response_parfor that was causing an error.
- Fixed several mistakes in the documentation for impulse_begin_and_end_times, fnm_transient, fnm_transient_call, and fnm_transient_parfor.

## Version 0.376

- Fixed a bug in impulse_begin_and_end_times that was causing a crash.
- Added a function to display transient pressures, plot_transient_pressure.

## Version 0.370

- Limited support for ring transducers (planar and spherically focused) has been added.
- FOCUS now supports multiple transient excitations. A trivial example demonstrating how to use this functionality can be found in the examples directory.
- All of the core FOCUS code has been optimized for maximum performance. This version is between 15 and 25% faster than the previous one.
- set_digitized_time_delays has been combined with set_time_delays. See the documentation for usage details.
- draw_array now supports the use of multiple colors for transducer arrays. More information can be found in the documentation.
- The GUIs distributed with FOCUS have been reorganized. There is now an "unsupported" folder that contains GUIs that may not work with the current version of FOCUS for various reasons and are therefore not officially supported.
- All examples now display a brief description of what they do when run. Additionally, all examples based on FOCUS-related publications have been moved to their own folder within the examples directory.
- Fixed some bugs in how transient functions were handling transducer amplitude.

## Version 0.332

- The way transducer arrays work has been significantly changed. Arrays are now indexed in two dimensions rather than in one dimension. See the documentation for each array generation function for details particular to that function.
- Rectangular transducers are now defined in terms of their full width and height rather than half-width and half-height.
- Much of the documentation has been revised and updated; be sure to take a look at the Quick Start guide and the new Installation Guide.

## Version 0.318

- Transducer objects have two new properties: amplitude and phase. These replace complex_weight.
*Note that the complex_weight property will be removed from future releases.***All code depending on it should be rewritten to use amplitude and phase.** - Added an example file to demonstrate the array apodization features added in version 0.299.
- The pressure calculation routines (e.g. fnm_call, fnm_tsd) have been significantly optimized. They are now between 20 and 50 percent faster than in previous releases.
- Several example files generated unlabeled or incorrectly labeled plots. This has been fixed.
- Several errors in the documentation files have been fixed. The Quick Start Guide has also been updated.

## Version 0.299

- Added some automatic apodization functions (see the documentation for set_apodization() for details):
- Bartlett
- Chebyshev
- Hamming
- Hann
- Triangle
- Uniform

- Updated Quick Start Guide to explain various FOCUS parameters and how to use them.
- Fixed a bug in main_interface that caused pressure fields to be incorrectly rotated.
- Fixed a bug in comparecirc.m, comparerect.m, and comparesphericalshell.m that caused the scripts to produce an unexpected error.

## Version 0.282

- Fixed a bug in the Quick Start Guide example code that caused the example to fail if copied and pasted from the PDF.
- Fixed a bug in asademo.m

## Version 0.262

- FOCUS now includes a Quick Start Guide with several examples to get you started.
- fnm_transient_call now uses Time-Space Decomposition for its calculations. To use the old function, call fnm_transient.
- A number of deprecated functions have been removed from this release; see the documentation for the functions that replace them. They include:
- find_phase
- get_pressure
- make_tissuestruct
- set_parameters
- set_temporal_coordinate_grid
- set_time_delays

## Version 0.258

- Implemented impulse response calculations.
- Added option to calculate pressure fields behind sources.
- Broken MATLAB code removed from several examples.
- Added radiator rect.

## Version 0.240

- Improved memory management for spatial coordinates.
- Fixed a bug in set_temporal_coordinate_grid.
- Added farfield CW function.
- Fixed several minor bugs in ASA code.

## Version 0.231

- Dramatically improved memory management.
- Eliminated TransientPressureField and replaced TransientWave with ExcitationFunction. Also replaced ProblemSpace with CoordinateSystem.

## Version 0.224

- Added example scripts for TSD.
- Added apodized circular pistons.
- Removed unneccesary calculation of pressure fields behind sources.
- Fixed a bug that caused a crash if a purely real complex weight was entered.
- Fixed a bug that appeared when focusing arrays.

## Version 0.184

- Added time-space decomposition routines.
- Fixed a bug that caused a crash while calculating the transient response of spherical shells.
- Added layered and non-linear ASA code.