code: def test_split_cti_param():
      ctiM = cti.CorrelationTensorModel(gtab1, gtab2)
      for DTD in DTDs:
          D = np.mean(DTD, axis=0)
          evals, evecs = decompose_tensor(D)
          C = qti.dtd_covariance(DTD)
          C = qti.from_6x6_to_21x1(C)
          ccti = from_qte_to_cti(C)
  
          MD = mean_diffusivity(evals)
          K = multi_gaussian_k_from_c(ccti, MD)
  
          cti_params = construct_cti_params(evals, evecs, K, ccti)
          ctiM = cti.CorrelationTensorModel(gtab1, gtab2)
          cti_pred_signals = ctiM.predict(cti_params, S0=S0)
          ctiF = ctiM.fit(cti_pred_signals)
          evals, evecs, kt, ct = cti.split_cti_params(ctiF.model_params)
  
          assert_array_almost_equal(evals, ctiF.evals)
          assert_array_almost_equal(evecs, ctiF.evecs)
          assert np.allclose(
              kt, ctiF.kt
          ), "kt doesn't match in test_split_cti_param "
          assert np.allclose(
              ct, ctiF.ct
          ), "ct doesn't match in test_split_cti_param"
  
imports: import numpy
  import math
  from dipy.core.sphere import disperse_charges, HemiSphere
  from dipy.reconst.utils import cti_design_matrix
  from numpy.testing import assert_array_almost_equal, assert_raises
  from dipy.reconst.tests.test_qti import _anisotropic_DTD, _isotropic_DTD
  from dipy.core.gradients import gradient_table
  import dipy.reconst.qti
  import dipy.reconst.cti
  from dipy.reconst.dti import decompose_tensor, mean_diffusivity
  from dipy.reconst.cti import split_cti_params, ls_fit_cti, multi_gaussian_k_from_c, from_qte_to_cti
  from dipy.reconst.dki import mean_kurtosis, axial_kurtosis, radial_kurtosis, mean_kurtosis_tensor, kurtosis_fractional_anisotropy
label_desc: Use image node_id 6 for calling a global function with example usage: test_split_cti_param() without return types