# Detection-first point clouds The default 4D pipeline detects on range-Doppler power before estimating angle. This avoids allocating a dense range-Doppler-azimuth-elevation tensor when only a small number of cells contain targets. ## RD power and detections After MIMO timing compensation and array calibration, $$ P[r,d]=\frac{1}{M}\sum_{m=0}^{M-1}|X[r,d,m]|^2. $$ CFAR produces range and Doppler source bins. For each surviving cell, nearby range/Doppler samples provide snapshots for the selected DoA method. ## Coordinate conversion The physical values are $$ R = k_r\Delta R_\mathrm{bin}, \qquad v_r = \mathrm{velocityAxis}[k_d]. $$ With azimuth $\theta$ and elevation $\phi$, FLU coordinates are $$ x=R\cos\phi\cos\theta,\qquad y=R\cos\phi\sin\theta,\qquad z=R\sin\phi. $$ `PointCloud` stores `xyz`, `power`, `snr`, `radialVelocity`, timestamp, frame id, and source bins `(range, doppler, azimuth, elevation)`. `to_numpy()` returns columns `x, y, z, power, snr, radialVelocity`; provenance remains available on the typed object. ## Dense research products `retainRangeDoppler`, `retainRangeAngle`, and `retainRangeDopplerAngle` control intermediate products. The default RA visualization beamforms the strongest Doppler cell at each range. Full RDA is generated only when explicitly requested. Elevation remains available per detection even when a dense azimuth-only product is retained. ## Ambiguities Point coordinates are estimates inside the model's unambiguous range and angular FOV. TDM profiles with calibrated overlap phase centres can resolve velocity aliases inside the raw chirp-rate Nyquist interval; the selected order is stored in frame metadata. Without that evidence the library preserves the aliased velocity rather than claiming a unique physical target. Application-specific range unwrapping remains outside v1.