class_docstr: Ivim model
      
docstr: Estimate a linear fit by taking log of data.
  
  Parameters
  ----------
  data : array
      An array containing the data to be fit
  
  split_b : float
      The b value to split the data
  
  less_than : bool
      If True, splitting occurs for bvalues less than split_b
  
  Returns
  -------
  S0 : float
      The estimated S0 value. (intercept)
  
  D : float
      The estimated value of D.
code: def estimate_linear_fit(self, data, split_b, less_than=True):
      """Estimate a linear fit by taking log of data.
  
      Parameters
      ----------
      data : array
          An array containing the data to be fit
  
      split_b : float
          The b value to split the data
  
      less_than : bool
          If True, splitting occurs for bvalues less than split_b
  
      Returns
      -------
      S0 : float
          The estimated S0 value. (intercept)
  
      D : float
          The estimated value of D.
      """
      if less_than:
          bvals_split = self.gtab.bvals[self.gtab.bvals <= split_b]
          D, neg_log_S0 = np.polyfit(
              bvals_split, -np.log(data[self.gtab.bvals <= split_b]), 1
          )
      else:
          bvals_split = self.gtab.bvals[self.gtab.bvals >= split_b]
          D, neg_log_S0 = np.polyfit(
              bvals_split, -np.log(data[self.gtab.bvals >= split_b]), 1
          )
  
      S0 = np.exp(-neg_log_S0)
      return S0, D
  
imports: import warnings
  import numpy
  from scipy.optimize import least_squares, differential_evolution
  from dipy.reconst.base import ReconstModel
  from dipy.reconst.multi_voxel import multi_voxel_fit
  from dipy.utils.optpkg import optional_package
label_desc: Use image node_id 3 for calling the IvimModelTRR obj's underlying member method code with example usage: obj.estimate_linear_fit(data, split_b, less_than) and returns: S0,  D