示例#1
0
def getTopLevelAnalysisDir(path):
    """If the given path is contained within a hierarchy of FEAT or MELODIC
    directories, the path to the highest-level (i.e. the shallowest in the
    file system) directory is returned. Otherwise, ``None`` is returned.

    See :func:`.featanalysis.getTopLevelAnalysisDir`.
    """
    return featanalysis.getTopLevelAnalysisDir(path)
示例#2
0
def test_getTopLevelAnalysisDir():
    testcases = [
        ('analysis.feat/filtered_func_data.ica/melodic_IC.nii.gz', 'analysis.feat'),
        ('analysis.feat/filtered_func_data.nii.gz', 'analysis.feat'),
        ('analysis.gfeat/cope1.feat/stats/zstat1.nii.gz', 'analysis.gfeat'),
        ('filtered_func_data.ica/melodic_mix', 'filtered_func_data.ica'),
        ('rest.ica/filtered_func_data.ica/melodic_IC.nii.gz', 'rest.ica')
    ]

    for path, expected in testcases:
        assert featanalysis.getTopLevelAnalysisDir(path) == expected
示例#3
0
def test_FEATImage_attributes():

    # TEst bad input
    with pytest.raises(Exception):
        featimage.FEATImage('baddir')

    for featdir in TEST_ANALYSES.keys():

        shape = TEST_ANALYSES[featdir]['shape']
        xform = TEST_ANALYSES[featdir]['xform']
        with tests.testdir() as testdir:

            if 'realdata' not in featdir:
                featdir = tests.make_mock_feat_analysis(op.join(
                    datadir, featdir),
                                                        testdir,
                                                        shape,
                                                        xform,
                                                        pes=False,
                                                        copes=False,
                                                        zstats=False,
                                                        residuals=False,
                                                        clustMasks=False)
            else:
                featdir = op.join(datadir, featdir)

            # Now create a FEATImage. We validate its
            # attributes against the values returned by
            # the functions in featdesign/featanalysis.
            fi = featimage.FEATImage(featdir)
            settings = featanalysis.loadSettings(featdir)
            design = featdesign.FEATFSFDesign(featdir, settings)
            desmat = design.getDesign()
            evnames = [ev.title for ev in design.getEVs()]
            contrastnames, contrasts = featanalysis.loadContrasts(featdir)

            assert np.all(np.isclose(fi.shape, shape))
            assert np.all(np.isclose(fi.voxToWorldMat, xform))

            assert fi.getFEATDir() == featdir
            assert fi.getAnalysisName() == op.splitext(op.basename(featdir))[0]
            assert fi.isFirstLevelAnalysis(
            ) == featanalysis.isFirstLevelAnalysis(settings)
            assert fi.getTopLevelAnalysisDir(
            ) == featanalysis.getTopLevelAnalysisDir(featdir)
            assert fi.getReportFile() == featanalysis.getReportFile(featdir)
            assert fi.hasStats() == featanalysis.hasStats(featdir)
            assert fi.numPoints() == desmat.shape[0]
            assert fi.numEVs() == desmat.shape[1]
            assert fi.evNames() == evnames
            assert fi.numContrasts() == len(contrasts)
            assert fi.contrastNames() == contrastnames
            assert fi.contrasts() == contrasts
            assert np.all(np.isclose(fi.getDesign(), desmat))

            assert fi.thresholds() == featanalysis.getThresholds(settings)

            for ci in range(len(contrasts)):
                result = fi.clusterResults(ci)
                expect = featanalysis.loadClusterResults(featdir, settings, ci)
                assert len(result) == len(expect)
                assert all([
                    rc.nvoxels == ec.nvoxels for rc, ec in zip(result, expect)
                ])