Ejemplo n.º 1
0
def expand_mask(mask, custom_mask=None):
    """expand a mask with multiple integers into separate binary masks

    Args:
        mask: nibabel or Brain_Data instance
        custom_mask: nibabel instance or string to file path; optional

    Returns:
        out: Brain_Data instance of multiple binary masks

    """

    from nltools.data import Brain_Data

    if isinstance(mask, nib.Nifti1Image):
        mask = Brain_Data(mask, mask=custom_mask)
    if not isinstance(mask, Brain_Data):
        raise ValueError("Make sure mask is a nibabel or Brain_Data instance.")
    mask.data = np.round(mask.data).astype(int)
    tmp = []
    for i in np.nonzero(np.unique(mask.data))[0]:
        tmp.append((mask.data == i) * 1)
    out = mask.empty()
    out.data = np.array(tmp)
    return out
Ejemplo n.º 2
0
def collapse_mask(mask, auto_label=True, custom_mask=None):
    """collapse separate masks into one mask with multiple integers
        overlapping areas are ignored

    Args:
        mask: nibabel or Brain_Data instance
        custom_mask: nibabel instance or string to file path; optional

    Returns:
        out: Brain_Data instance of a mask with different integers indicating
            different masks

    """

    from nltools.data import Brain_Data

    if not isinstance(mask, Brain_Data):
        if isinstance(mask, nib.Nifti1Image):
            mask = Brain_Data(mask, mask=custom_mask)
        else:
            raise ValueError("Make sure mask is a nibabel or Brain_Data "
                             "instance.")

    if len(mask.shape()) > 1:
        if len(mask) > 1:
            out = mask.empty()

            # Create list of masks and find any overlaps
            m_list = []
            for x in range(len(mask)):
                m_list.append(mask[x].to_nifti())
            intersect = intersect_masks(m_list, threshold=1, connected=False)
            intersect = Brain_Data(
                nib.Nifti1Image(np.abs(intersect.get_data() - 1),
                                intersect.get_affine()),
                mask=custom_mask,
            )

            merge = []
            if auto_label:
                # Combine all masks into sequential order
                # ignoring any areas of overlap
                for i in range(len(m_list)):
                    merge.append(
                        np.multiply(
                            Brain_Data(m_list[i], mask=custom_mask).data,
                            intersect.data) * (i + 1))
                out.data = np.sum(np.array(merge).T, 1).astype(int)
            else:
                # Collapse masks using value as label
                for i in range(len(m_list)):
                    merge.append(
                        np.multiply(
                            Brain_Data(m_list[i], mask=custom_mask).data,
                            intersect.data))
                out.data = np.sum(np.array(merge).T, 1)
            return out
    else:
        warnings.warn("Doesn't need to be collapased")
Ejemplo n.º 3
0
def expand_mask(mask):
    """ expand a mask with multiple integers into separate binary masks

        Args:
            mask: nibabel or Brain_Data instance

        Returns:
            out: Brain_Data instance of multiple binary masks

     """

    from nltools.data import Brain_Data
    if isinstance(mask,nib.Nifti1Image):
        mask = Brain_Data(mask)
    if not isinstance(mask,Brain_Data):
        raise ValueError('Make sure mask is a nibabel or Brain_Data instance.')
    mask.data = mask.data.astype(int)
    tmp = []
    for i in np.unique(mask.data):
        tmp.append((mask.data==i)*1)
    out = mask.empty()
    out.data = np.array(tmp)
    return out
Ejemplo n.º 4
0
def expand_mask(mask):
    """ expand a mask with multiple integers into separate binary masks

        Args:
            mask: nibabel or Brain_Data instance

        Returns:
            out: Brain_Data instance of multiple binary masks

     """

    from nltools.data import Brain_Data
    if isinstance(mask, nib.Nifti1Image):
        mask = Brain_Data(mask)
    if not isinstance(mask, Brain_Data):
        raise ValueError('Make sure mask is a nibabel or Brain_Data instance.')
    mask.data = mask.data.astype(int)
    tmp = []
    for i in np.unique(mask.data):
        tmp.append((mask.data == i) * 1)
    out = mask.empty()
    out.data = np.array(tmp)
    return out
Ejemplo n.º 5
0
print 'Load Data: Elapsed: %.2f seconds' % (time() - tic)  #Stop timer

###############################################################################
# Run Regression separately for each subject

tic = time()  #Start Timer

start = 0
stop = n_trials
dat.X = pd.DataFrame(
    {
        'Intercept': np.ones(len(dat.Y)),
        'X1': np.array(dat.Y).flatten()
    },
    index=None)
all = dat.empty()
for i in xrange(n_subs):
    sub_out = dat[start:stop].regress()
    start = start + n_trials
    stop = stop + n_trials
    tmp = sub_out['beta'].empty(data=False)[1]
    all = all.append(tmp)
print 'Regression: Elapsed: %.2f seconds' % (time() - tic)  # Stop timer

###############################################################################
# Run One sample t-test

tic = time()  #Start Timer

l2 = all.ttest(threshold_dict={'fdr': .05})
l2['thr_t'].plot()