docstr: Constructs fODF, GM/CSF volume fractions, and other derived results.
  
  fODF and GM/CSF fractions are normalized to collectively sum to 1 for
  each voxel.
  
  Parameters
  ----------
  model : RumbaSDModel
      RumbaSDModel-SD model.
  model_params : ndarray ([x, y, z], M)
      fODF and GM/CSF volume fractions for each voxel.
docstr_tok: ["Constructs","fODF",",","GM\/CSF","volume","fractions",",","and","other","derived","results",".","fODF","and","GM\/CSF","fractions","are","normalized","to","collectively","sum","to","1","for","each","voxel",".","Parameters","--","--","--","--","--","model",":","RumbaSDModel","RumbaSDModel-SD","model",".","model_params",":","ndarray","(","[","x",",","y",",","z","]",",","M",")","fODF","and","GM\/CSF","volume","fractions","for","each","voxel","."]
code: def __init__(self, model, model_params):
      """
      Constructs fODF, GM/CSF volume fractions, and other derived results.
  
      fODF and GM/CSF fractions are normalized to collectively sum to 1 for
      each voxel.
  
      Parameters
      ----------
      model : RumbaSDModel
          RumbaSDModel-SD model.
      model_params : ndarray ([x, y, z], M)
          fODF and GM/CSF volume fractions for each voxel.
  
      """
  
      self.model = model
      self.model_params = model_params
  
imports: import logging
  import warnings
  import numpy
  from dipy.core.geometry import vec2vec_rotmat
  from dipy.core.gradients import gradient_table, unique_bvals_tolerance, get_bval_indices
  from dipy.core.onetime import auto_attr
  from dipy.core.sphere import Sphere
  from dipy.data import get_sphere
  from dipy.reconst.shm import lazy_index, normalize_data
  from dipy.reconst.odf import OdfModel, OdfFit
  from dipy.reconst.csdeconv import AxSymShResponse
  from dipy.segment.mask import bounding_box, crop
  from dipy.sims.voxel import single_tensor, all_tensor_evecs
label_desc: Use image node_id 1 to create a new RumbaFit object from inherited base classes: OdfFit with example: obj = RumbaFit(model, model_params)