The B matrix and Siemens DICOM#

This is a short note to explain the nature of the B_matrix found in the Siemens private (CSA) fields of the DICOM headers of a diffusion-weighted acquisition. We try to explain the relationship between the B_matrix and the b value and the gradient vector. The acquisition is made with a planned (requested) b value - say breq=1000, and with a requested gradient direction greq=[gx,gy,gz] (supposedly a unit vector).

Note that here we’re using q in the sense of an approximation to a vector in q space. Other people use b for the same concept, but we’ve chosen q to make the exposition clearer.

For some purposes, we want the q vector qactual which is equal to bactual.gactual. We need to be aware that bactual and gactual may be different from the breq and greq! Though the Stejskal and Tanner formula is available for the classic PGSE sequence, a different sequence may be used (e.g. TRSE on Siemens Trio), and anyway, the ramps up and down on the gradient field will not be rectangular. The Siemens scanner software calculates the effective directional diffusion weighting of the acquisition based on the temporal profile of the applied gradient vector field. These are in the form of the 6 B_matrix values [bxx,bxy,bxz,byy,byz,bzz].

In this form they are suitable for use in a least squares estimation of the diffusion tensor via the equations across the set of acquisitions:

log(A(q)/A(0))=(bxxDxx+2bxyDxy+2bxzDxz+ byyDyy+2byzDyz+bzzDzz)

The gradient field typically stays in the one gradient direction, in this case the relationship between q and the bij is as follows. If we fill out the symmetric B-matrix as:

B=(bxxbyxbyzbxybyybxzbxzbyzbzz)

then B is equal to the rank 1 tensor bggT. One of the ways to recover b and g, and hence q, from B is to do a singular value decomposition of B:B=λ1v1v1T+λ2v2v2T+λ3v3v3T, where only one of the λi, say λ1, is effectively non-zero. Then b=λ1, g=±v1, and q=±λ1v1. The choice of sign is arbitrary (essentially we have a choice between two possible square roots of the rank 1 tensor B). Once we have qactual we can calculate bactual=|qactual| and gactual=qactual/bactual. Various software packages (e.g. FSL’s DFT-DTIFIT) expect to get 3 × N and 1 × N arrays of gactual and bactual values as their inputs.