示例#1
0
    def testEmptyData(self):
        obss = bss.BSS()
        data = None
        mask = 'mask.nii.gz'
        params = {'max_sources': 2}

        with self.assertRaises(bss.BssException) as context:
            results = obss.factorize(data, mask, params, '/')
            self.assertIsNone(results, 'Unexpected result')
            self.assertTrue('Missing data' in context.exception)
示例#2
0
    def testNoTEData(self):
        obss = bss.BSS()
        dwi = ['data_TE1.nii.gz', 'data_TE2.nii.gz']
        data = {'dwi': dwi}
        mask = 'mask.nii.gz'
        params = {'max_sources': 2}

        with self.assertRaises(bss.BssException) as context:
            results = obss.factorize(data, mask, params, '/')
            self.assertIsNone(results, 'Unexpected result')
            self.assertTrue('Missing TE data' in context.exception)
示例#3
0
    def testNoDwiData(self):
        obss = bss.BSS()
        TE = [60, 120]
        data = {'te': TE}
        mask = 'mask.nii.gz'
        params = {'max_sources': 2}

        with self.assertRaises(bss.BssException) as context:
            results = obss.factorize(data, mask, params, '/')
            self.assertIsNone(results, 'Unexpected result')
            self.assertTrue('Missing diffusion data' in context.exception)
示例#4
0
    def testNoMask(self):
        obss = bss.BSS()
        dwi = ['data_TE1.nii.gz', 'data_TE2.nii.gz']
        TE = [60, 120]
        data = {'dwi': dwi, 'te': TE}
        mask = []
        params = {'max_sources': 2}

        with self.assertRaises(bss.BssException) as context:
            results = obss.factorize(data, mask, params, '/')
            self.assertIsNone(results, 'Unexpected result')
            self.assertTrue('Missing mask' in context.exception)
示例#5
0
    def testFweNonB0(self):
        obss = bss.BSS()
        dwi = ['data_TE1.nii.gz', 'data_TE2.nii.gz']
        TE = [60, 120]
        data = {'dwi': dwi, 'te': TE}
        mask = 'mask.nii.gz'
        cwd = os.path.join(os.getcwd(), '..', 'examples', 'data')
        b_values = os.path.join(cwd, 'test_no_B0.bval')

        with self.assertRaises(bss.BssException) as context:
            results = obss.fwe(data, mask, b_values, self.out_path)
            self.assertIsNone(results, 'Unexpected result')
            self.assertTrue('At least one b0 is required' in context.exception)
示例#6
0
    def testFweWrongBval(self):
        obss = bss.BSS()
        dwi = ['data_TE1.nii.gz', 'data_TE2.nii.gz']
        TE = [60, 120]
        data = {'dwi': dwi, 'te': TE}
        mask = 'mask.nii.gz'
        b_values = '/test.bval'

        with self.assertRaises(bss.BssException) as context:
            results = obss.fwe(data, mask, b_values, self.out_path)
            self.assertIsNone(results, 'Unexpected result')
            self.assertTrue(
                'b_values is a mandatory parameter' in context.exception)
示例#7
0
    def testInvalidOutpath(self):
        obss = bss.BSS()
        dwi = ['data_TE1.nii.gz', 'data_TE2.nii.gz']
        TE = [60, 120]
        data = {'dwi': dwi, 'te': TE}
        mask = 'mask.nii.gz'
        params = {'max_sources': 2}
        out_path = '/bss_test_doesnt_exist'

        with self.assertRaises(bss.BssException) as context:
            results = obss.factorize(data, mask, params, out_path)
            self.assertIsNone(results, 'Unexpected result')
            self.assertTrue('Non existing out_path.' in context.exception)
示例#8
0
    def testMissmatchingTeData(self):
        obss = bss.BSS()
        dwi = ['data_TE1.nii.gz', 'data_TE2.nii.gz']
        TE = [60]
        data = {'dwi': dwi, 'te': TE}
        mask = 'mask.nii.gz'
        params = {'max_sources': 2}

        with self.assertRaises(bss.BssException) as context:
            results = obss.factorize(data, mask, params, '/')
            self.assertIsNone(results, 'Unexpected result')
            self.assertTrue(
                'Number of TE values and diffusion files do not match' in
                context.exception)
示例#9
0
    def testComputeActualA3ExisitingSources(self):
        t2 = np.array([0.075, 0.15, 2])
        tes = np.array([0.07, 0.13, 0.2])
        tes = tes[:, np.newaxis]
        f = np.array([0.5, 0.3, 0.2])
        (A, _) = utils.build_A(t2, tes, f)

        S = np.random.random((3, 30))
        S[:, 0] = 1
        X = np.dot(A, S)

        params = {'max_sources': 3}
        obss = bss.BSS()
        result = obss._compute_actual_A(X, A, tes, params)
        np.testing.assert_array_almost_equal(result['t2'], t2, 6,
                                             'Wrong T2 values')
        np.testing.assert_array_almost_equal(result['f'], f, 6,
                                             'Wrong f values')
        self.assertEqual(result['s0'], 1, 'Wrong S0 value')
示例#10
0
    def testComputeActualAwithZero(self):
        t2 = np.array([0.075, 2])
        tes = np.array([0.07, 0.13])
        tes = tes[:, np.newaxis]
        f = np.array([1, 0])
        (A, _) = utils.build_A(t2, tes, f)

        S = np.random.random((2, 30))
        S[:, 0] = 1
        X = np.dot(A, S)

        params = {'max_sources': 2}
        obss = bss.BSS()
        result = obss._compute_actual_A(X, A, tes, params)
        np.testing.assert_array_almost_equal(result['t2'], [0.075, 0], 6,
                                             'Wrong T2 values')
        np.testing.assert_array_almost_equal(result['f'], [1, 0], 6,
                                             'Wrong f values')
        np.testing.assert_array_almost_equal(result['s0'], 1, 6,
                                             'Wrong S0 value')
示例#11
0
    def test__volume_factorization_ParallelFalse(self):
        obss = bss.BSS()
        max_sources = 2
        params = {'max_sources': max_sources}
        cwd = os.path.join(os.getcwd(), '..', 'examples', 'data')
        dwi = [
            os.path.join(cwd, 'data_TE1.nii.gz'),
            os.path.join(cwd, 'data_TE2.nii.gz')
        ]
        TE = [0.0751, 0.1351]
        data = {'dwi': dwi, 'te': TE}
        mask = os.path.join(cwd, 'mask.nii.gz')

        niiout = obss._volume_factorization(data, mask, params, self.out_path,
                                            None, None, False)

        self.assertIsNotNone(niiout, 'Missing Result')
        self.assertEqual(len(niiout['T2']), max_sources,
                         'Incorrect number of T2 files')
        self.assertEqual(len(niiout['f']), max_sources,
                         'Incorrect number of volume fraction files')
        self.assertEqual(len(niiout['sources']), max_sources,
                         'Incorrect number of source files')
        self.assertIsNotNone(niiout['pd'], 'No Proton Density file')
        self.assertIsNotNone(niiout['rel_error'], 'No Relative Error file')
        self.assertTrue(os.path.isfile(niiout['pd']),
                        'Non existing proton density file')
        self.assertTrue(os.path.isfile(niiout['rel_error']),
                        'Non existing relative error file')
        for i in range(max_sources):
            self.assertTrue(os.path.isfile(niiout['T2'][i]),
                            'Non existing T2 file')
            self.assertTrue('T2_' in niiout['T2'][i], 'Wrong Name for T2 file')
            self.assertTrue(os.path.isfile(niiout['f'][i]),
                            'Non existing volume fraction file')
            self.assertTrue('f_' in niiout['f'][i],
                            'Wrong Name for volume fraction file')
            self.assertTrue(os.path.isfile(niiout['sources'][i]),
                            'Non existing source file')
            self.assertTrue('source_' in niiout['sources'][i],
                            'Wrong Name for source file')
示例#12
0
    def testComputeActualANonExisitngSource(self):
        t2 = np.array([0.075, 2])
        tes = np.array([0.07, 0.13])
        tes = tes[:, np.newaxis]
        f = np.array([1, 0])
        A = np.exp(-tes * (1. / t2))

        S = np.random.random(30)
        S[0] = 1
        S = np.stack((S, np.zeros(30)))
        X = np.dot(A, S)

        params = {'max_sources': 2}
        obss = bss.BSS()
        result = obss._compute_actual_A(X, A, tes, params)
        np.testing.assert_array_almost_equal(result['t2'], [0.075, 0], 6,
                                             'Wrong T2 values')
        np.testing.assert_array_almost_equal(result['f'], [1, 0], 6,
                                             'Wrong f values')
        np.testing.assert_array_almost_equal(result['s0'], 1, 6,
                                             'Wrong S0 value')