docstr: Applies the 3D FFT in the q-space grid to generate
  the diffusion propagator
docstr_tok: ["Applies","the","3D","FFT","in","the","q-space","grid","to","generate","the","diffusion","propagator"]
code: def pdf(self, normalized=True):
      """Applies the 3D FFT in the q-space grid to generate
      the diffusion propagator
      """
      values = self.data * self.model.filter
      # create the signal volume
      Sq = np.zeros((self.qgrid_sz, self.qgrid_sz, self.qgrid_sz))
      # fill q-space
  
      for i in range(len(values)):
          qx, qy, qz = self.model.qgrid[i]
          Sq[qx, qy, qz] += values[i]
      # apply fourier transform
      Pr = fftshift(np.real(fftn(ifftshift(Sq), 3 * (self.qgrid_sz,))))
      # clipping negative values to 0 (ringing artefact)
      Pr = np.clip(Pr, 0, Pr.max())
  
      # normalize the propagator to obtain a pdf
      if normalized:
          Pr /= Pr.sum()
  
      return Pr
  
imports: import numpy
  from scipy.ndimage import map_coordinates
  from scipy.fftpack import fftn, fftshift, ifftshift
  from dipy.reconst.odf import OdfModel, OdfFit
  from dipy.reconst.cache import Cache
  from dipy.reconst.multi_voxel import multi_voxel_fit
label_desc: Use image node_id 2 for calling the DiffusionSpectrumFit obj's underlying member method code with example usage: obj.pdf(normalized) and returns: Pr