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)
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
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) ])