mach.wavefront.earliest_arrival

mach.wavefront.earliest_arrival#

mach.wavefront.earliest_arrival(
element_positions_m: Real[Array, '*elements xyz=3'],
element_delays_s: Real[Array, '*elements'],
points_m: Real[Array, '*points xyz=3'],
*,
sound_speed_m_s: float | int,
element_chunk_size: int = 1024,
point_chunk_size: int = 32768,
) → Real[Array, '*points']#

Earliest transmit arrival distance from per-element delays.

Parameters:
  • element_positions_m – Positions of the active transmit elements, in meters. Leading element dimensions may be multidimensional, e.g. (rows, cols, 3) for a 2D matrix array.

  • element_delays_s – Per-element transmit delays, in seconds, with the same leading shape as element_positions_m. Delays must share the same time reference as the receive chain (for example, normalized so the earliest firing element has delay zero).

  • points_m – Positions of the points to compute the transmit-arrival time for, in meters.

  • sound_speed_m_s – Speed of sound, in meters per second.

  • element_chunk_size – Number of elements processed per reduction chunk. Tune for memory on large apertures.

  • point_chunk_size – Number of image points processed per chunk. Tune for memory on large grids.

Returns:

Minimum path length min_i (sound_speed_m_s * element_delays_s[i] + |P - e_i|) in meters. Divide by sound speed to obtain arrival time in seconds.

Raises:
  • ValueError – If sound speed or a chunk size is nonpositive, or no elements are provided.

  • jaxtyping.TypeCheckError – If the element positions and delays have incompatible shapes.

Notes

This is the earliest arrival, not necessarily the strongest pulse time The same minimum-over-elements method is used in delay-based DAS paths such as PyMUST dasmtx (creatis-ULTIM/PyMUST) and ultraspy transmit mode 0 (pecarlat/ultraspy/-/raw/26b0bc171b5344a2241897b7e63af92e845aa77c/src/ultraspy/cpu/kernels/numpy_cores/das.py).