def make_ica_maps(data, imgs, img_size_x, img_size_y, num_ica_colors, color_map, colors_ica):
    
    reference = data.seriesMean().pack()
    maps = Colorize(cmap=color_map, colors = colors_ica[0:np.size(imgs,0)], scale=num_ica_colors).transform(abs(imgs),background=reference, mixing=1.5)
        
    #Count number of unique colors in the images
    #Get number of planes based on map dimesnions
    if len(maps.shape)==3:
        num_planes = 1
    else:
        num_planes = np.size(maps,2)
        
    unique_clrs = []
    for ii in xrange(0, np.size(colors_ica[0:np.size(imgs,0)])):
        unique_clrs.append( np.round(np.array(webcolors.name_to_rgb(colors_ica[ii]), dtype=np.float)/255))
    
    #From maps get number of pixel matches with color for each plane
    matched_pixels = np.zeros((np.size(unique_clrs,0),num_planes))
    array_maps = np.round(maps.astype(np.float16))
    matched_pixels = np.zeros((np.size(unique_clrs,0),num_planes))
    if len(maps.shape) == 3:
        array_maps_plane = np.reshape(array_maps, (np.size(array_maps,0)*np.size(array_maps,1),3))
        matched_pixels[:,0] = [np.size(np.where((np.array(array_maps_plane) == match).all(axis=1))) for match in unique_clrs]
    else:     
        for ii in xrange(0,num_planes):
            array_maps_plane = np.reshape(array_maps[:,:,ii,:], (np.size(array_maps,0)*np.size(array_maps,1),3))
            matched_pixels[:,ii] = [np.size(np.where((np.array(array_maps_plane) == match).all(axis=1))) for match in unique_clrs]
                 
    
    return maps, matched_pixels
Esempio n. 2
0
def make_ica_maps(data, imgs, img_size_x, img_size_y, num_ica_colors,
                  color_map, colors_ica):

    reference = data.seriesMean().pack()
    maps = Colorize(cmap=color_map,
                    colors=colors_ica[0:np.size(imgs, 0)],
                    scale=num_ica_colors).transform(abs(imgs),
                                                    background=reference,
                                                    mixing=1.5)

    #Count number of unique colors in the images
    #Get number of planes based on map dimesnions
    if len(maps.shape) == 3:
        num_planes = 1
    else:
        num_planes = np.size(maps, 2)

    unique_clrs = []
    for ii in xrange(0, np.size(colors_ica[0:np.size(imgs, 0)])):
        unique_clrs.append(
            np.round(
                np.array(webcolors.name_to_rgb(colors_ica[ii]), dtype=np.float)
                / 255))

    #From maps get number of pixel matches with color for each plane
    matched_pixels = np.zeros((np.size(unique_clrs, 0), num_planes))
    array_maps = np.round(maps.astype(np.float16))
    matched_pixels = np.zeros((np.size(unique_clrs, 0), num_planes))
    if len(maps.shape) == 3:
        array_maps_plane = np.reshape(
            array_maps, (np.size(array_maps, 0) * np.size(array_maps, 1), 3))
        matched_pixels[:, 0] = [
            np.size(np.where(
                (np.array(array_maps_plane) == match).all(axis=1)))
            for match in unique_clrs
        ]
    else:
        for ii in xrange(0, num_planes):
            array_maps_plane = np.reshape(
                array_maps[:, :, ii, :],
                (np.size(array_maps, 0) * np.size(array_maps, 1), 3))
            matched_pixels[:, ii] = [
                np.size(
                    np.where(
                        (np.array(array_maps_plane) == match).all(axis=1)))
                for match in unique_clrs
            ]

    return maps, matched_pixels
def make_pca_maps(data, pca, imgs, required_pcs, img_size_x, img_size_y,
                  num_pca_colors, num_samples, thresh_pca, color_map):
    reference = data.seriesMean().pack()
    if required_pcs == 0:
        maps = Colorize(cmap=color_map,
                        scale=num_pca_colors).transform(imgs,
                                                        background=reference,
                                                        mixing=0.3)
    else:
        maps = Colorize(cmap=color_map,
                        scale=num_pca_colors).transform(imgs,
                                                        background=reference,
                                                        mixing=0.3)

    pts = pca.scores.subset(num_samples, thresh=thresh_pca, stat='norm')

    if required_pcs == 0:
        pca_pts = list()
        for ii in xrange(1, size(pca.comps.T, 1)):
            pca_pts.append(pts[:, ii][:, newaxis])
        clrs = Colorize(cmap=color_map,
                        scale=num_pca_colors).transform(pca_pts).squeeze()
    else:
        pca_pts = list()
        for ii in xrange(0, size(required_pcs)):
            pca_pts.append(pts[:, required_pcs[ii]][:, newaxis])
        clrs = Colorize(cmap=color_map,
                        scale=num_pca_colors).transform(pca_pts).squeeze()

    #Reconstruct the scores using the pca components
    if required_pcs == 0:
        recon = asarray(
            map(
                lambda x: (x[1] * pca.comps[1, :] + x[2] * pca.comps[2, :] + x[
                    3] * pca.comps[3, :]).tolist(), pts))
    else:
        pts_list = pts.tolist()
        recon = zeros((size(pts_list, 0), size(pca.comps, 1)))
        for ii in range(0, size(pts_list, 0)):
            for jj in range(0, size(required_pcs)):
                recon[ii, :] += pts_list[ii][required_pcs[jj]] * pca.comps[
                    required_pcs[jj], :]

    #Count number of unique colors in the images
    #Get number of planes based on map dimesnions
    if len(maps.shape) == 3:
        num_planes = 1
    else:
        num_planes = size(maps, 2)
    num_time = size(pca.comps.T, 0)

    #Get specific color matches across animals and get mean and standard deviation
    array1 = [map(int, single_dim)
              for single_dim in clrs]  #Convert the colors to RGB integers
    new_array = [tuple(row) for row in array1]
    unique_clrs = list(set(new_array))  #Get unique combination of colors
    unique_clrs.remove((0, 0, 0))
    matches = [
        where((array(array1) == match).all(axis=1)) for match in unique_clrs
    ]  #Match the colors with the original rows

    matches_black = [
        where((array(array1) == match).all(axis=1)) for match in [0]
    ]
    pts_nonblack = delete(pts, matches_black, axis=0)
    clrs_nonblack = delete(clrs, matches_black, axis=0)

    #From maps get number of pixel matches with color for each plane
    matched_pixels = zeros((size(unique_clrs, 0), num_planes))
    #    while sum(matched_pixels) == 0 :
    array_maps = round(maps.astype(float16))
    matched_pixels = zeros((size(unique_clrs, 0), num_planes))
    if len(maps.shape) == 3:
        array_maps_plane = reshape(
            array_maps, (size(array_maps, 0) * size(array_maps, 1), 3))
        matched_pixels[:, 0] = [
            size(where((array(array_maps_plane) == match).all(axis=1)))
            for match in unique_clrs
        ]
    else:
        for ii in xrange(0, num_planes):
            array_maps_plane = reshape(
                array_maps[:, :, ii, :],
                (size(array_maps, 0) * size(array_maps, 1), 3))
            matched_pixels[:, ii] = [
                size(where((array(array_maps_plane) == match).all(axis=1)))
                for match in unique_clrs
            ]

    #Find stats based on the color - but only use the subset of pixels in recon
    matched_signals = [
        structtype() for i in range(size(matches, 0) * num_planes)
    ]

    mean_signal = zeros((size(matches, 0), num_planes, num_time))
    sem_signal = zeros((size(matches, 0), num_planes, num_time))
    for ii in xrange(0, size(matches, 0)):
        temp_ele = array(matches[ii])
        matched_signals[ii].clr_grped_signal = [
            array(recon[ele]) for ele in temp_ele[0, :]
        ]  #Get signals from the reconstruction that match the colors
        mean_signal[ii, :] = mean(matched_signals[ii].clr_grped_signal, axis=0)
        sem_signal[ii, :] = stats.sem(matched_signals[ii].clr_grped_signal,
                                      axis=0)

    return maps, pts, pts_nonblack, clrs, clrs_nonblack, recon, unique_clrs, matched_pixels, matched_signals, mean_signal, sem_signal
    def make_pca_maps(self, pca, imgs, required_pcs, mixing_parameter):
        """
        Make maps and scatter plots of the pca scores with colormaps for plotting
        Parameters
        ----------
        pca: PCA model
        imgs : scores
        required_pcs: List contianing indices of required PCA components. Specify 0 if you need all
        mixing_parameter : mixing controls relative scale of the background.

        Returns
        -------
        maps: Images of PCA scores plotted using a colormap
        pts_nonblack: Pixels that are not black (not part of the background)
        clrs_nonblack: Colors that are not black
        recon: PCA reconstructed using user specified components
        unique_clrs: Colors that are unique from the images of the PCA scores
        matched_pixels: Pixels that correspond to the colors obtained in unique_clrs
        matched_signals: Individual time traces from the matched_pixels
        mean_signal: Mean of matched_signals
        sem_signal: Sem of matched_signals

        """

        maps = Colorize(cmap=self.color_map,
                        scale=self.num_pca_colors).transform(
                            imgs,
                            background=self.reference,
                            mixing=mixing_parameter)
        pts = pca.scores.subset(self.num_samples,
                                thresh=self.thresh_pca,
                                stat='norm')

        if required_pcs == 0:
            pca_pts = list()
            for ii in xrange(0, size(pca.comps.T, 1)):
                pca_pts.append(pts[:, ii][:, newaxis])
            clrs = Colorize(
                cmap=self.color_map,
                scale=self.num_pca_colors).transform(pca_pts).squeeze()
        else:
            pca_pts = list()
            for ii in xrange(0, size(required_pcs)):
                pca_pts.append(pts[:, required_pcs[ii]][:, newaxis])
            clrs = Colorize(
                cmap=self.color_map,
                scale=self.num_pca_colors).transform(pca_pts).squeeze()

        # Reconstruct the scores using the pca components
        if required_pcs == 0:
            recon = asarray(
                map(
                    lambda x: (x[0] * pca.comps[0, :] + x[1] * pca.comps[1, :]
                               + x[2] * pca.comps[2, :]).tolist(), pts))
        else:
            pts_list = pts.tolist()
            recon = zeros((size(pts_list, 0), size(pca.comps, 1)))
            for ii in range(0, size(pts_list, 0)):
                for jj in range(0, size(required_pcs)):
                    recon[ii, :] += pts_list[ii][required_pcs[jj]] * pca.comps[
                        required_pcs[jj], :]

        # Count number of unique colors in the images
        # Get number of planes based on map dimensions
        if len(maps.shape) == 3:
            num_planes = 1
        else:
            num_planes = size(maps, 2)
        num_time = size(pca.comps.T, 0)

        # Get specific color matches across animals and get mean and standard deviation
        array1 = [map(int, single_dim)
                  for single_dim in clrs]  # Convert the colors to RGB integers
        new_array = [tuple(row) for row in array1]
        unique_clrs = list(set(new_array))  # Get unique combination of colors

        if (0, 0, 0) in unique_clrs:
            unique_clrs.remove((0, 0, 0))
        matches = [
            where((array(array1) == match).all(axis=1))
            for match in unique_clrs
        ]  # Match the colors with the original rows

        matches_black = [
            where((array(array1) == match).all(axis=1)) for match in [0]
        ]
        pts_nonblack = delete(pts, matches_black, axis=0)
        clrs_nonblack = delete(clrs, matches_black, axis=0)

        # From maps get number of pixel matches with color for each plane
        array_maps = round(maps.astype(float16))
        matched_pixels = zeros((size(unique_clrs, 0), num_planes))
        array_maps_plane = reshape(
            array_maps, (size(array_maps, 0) * size(array_maps, 1), 3))
        matched_pixels[:, 0] = [
            size(where((array(array_maps_plane) == match).all(axis=1)))
            for match in unique_clrs
        ]

        # Find stats based on the color - but only use the subset of pixels in recon
        matched_signals = [
            structtype() for i in range(size(matches, 0) * num_planes)
        ]

        mean_signal = zeros((size(matches, 0), num_planes, num_time))
        sem_signal = zeros((size(matches, 0), num_planes, num_time))
        for ii in xrange(0, size(matches, 0)):
            temp_ele = array(matches[ii])
            matched_signals[ii].clr_grped_signal = [
                array(recon[ele]) for ele in temp_ele[0, :]
            ]
            mean_signal[ii, :] = mean(matched_signals[ii].clr_grped_signal,
                                      axis=0)
            sem_signal[ii, :] = stats.sem(matched_signals[ii].clr_grped_signal,
                                          axis=0)

        return maps, pts_nonblack, clrs_nonblack, recon, unique_clrs, matched_pixels, \
               matched_signals, mean_signal, sem_signal
def make_pca_maps(data,pca, imgs, required_pcs, img_size_x, img_size_y,  num_pca_colors, num_samples, thresh_pca, color_map):
    reference = data.seriesMean().pack()
    maps = Colorize(cmap=color_map, scale=num_pca_colors).transform(imgs,background=reference, mixing=2)
    pts = pca.scores.subset(num_samples, thresh=thresh_pca, stat='norm')
    if required_pcs == 0:
        clrs = Colorize(cmap=color_map, scale=num_pca_colors).transform([pts[:,0][:,newaxis], pts[:,1][:,newaxis]]).squeeze()
    else:
        clrs = Colorize(cmap=color_map, scale=num_pca_colors).transform([pts[:,required_pcs[0]][:,newaxis], pts[:,required_pcs[1]][:,newaxis]]).squeeze()

    #Reconstruct the scores using the pca components
    if required_pcs == 0:
        recon = asarray(map(lambda x: (x[1] * pca.comps[1, :] + x[2] * pca.comps[2, :] + x[3] * pca.comps[3, :]).tolist(), pts))
    else:
        pts_list = pts.tolist()
        recon = zeros((size(pts_list,0),size(pca.comps,1)))
        for ii in range(0,size(pts_list,0)):
            for jj in range(0, size(required_pcs)):
                recon[ii,:] += pts_list[ii][required_pcs[jj]]*pca.comps[required_pcs[jj],:] 
            
    
    #Count number of unique colors in the images
    #Get number of planes based on map dimesnions
    if len(maps.shape)==3:
        num_planes = 1
    else:
        num_planes = size(maps,2)
    num_time = size(pca.comps.T,0)
    
    #Get specific color matches across animals and get mean and standard deviation       
    array1 = [map(int,single_dim) for single_dim in clrs] #Convert the colors to RGB integers
    new_array = [tuple(row) for row in array1] 
    unique_clrs = list(set(new_array))    #Get unique combination of colors   
    unique_clrs.remove((0,0,0))
    matches = [where((array(array1) == match).all(axis=1)) for match in unique_clrs] #Match the colors with the original rows
    
    matches_black = [where((array(array1) == match).all(axis=1)) for match in [0]]  
    pts_nonblack = delete(pts, matches_black, axis=0)
    clrs_nonblack = delete(clrs, matches_black, axis=0)
    
    #From maps get number of pixel matches with color for each plane
    matched_pixels = zeros((size(unique_clrs,0),num_planes))
#    while sum(matched_pixels) == 0 :
    array_maps = round(maps.astype(float16))
    matched_pixels = zeros((size(unique_clrs,0),num_planes))
    if len(maps.shape) == 3:
        array_maps_plane = reshape(array_maps, (size(array_maps,0)*size(array_maps,1),3))
        matched_pixels[:,0] = [size(where((array(array_maps_plane) == match).all(axis=1))) for match in unique_clrs]
    else:     
        for ii in xrange(0,num_planes):
            array_maps_plane = reshape(array_maps[:,:,ii,:], (size(array_maps,0)*size(array_maps,1),3))
            matched_pixels[:,ii] = [size(where((array(array_maps_plane) == match).all(axis=1))) for match in unique_clrs]
             
    
    #Find stats based on the color - but only use the subset of pixels in recon
    matched_signals = [structtype() for i in range(size(matches,0)*num_planes)]
    
    mean_signal = zeros((size(matches,0), num_planes, num_time))
    sem_signal = zeros((size(matches,0), num_planes, num_time))
    for ii in xrange(0,size(matches,0)):
        temp_ele = array(matches[ii])
        matched_signals[ii].clr_grped_signal = [array(recon[ele]) for ele in temp_ele[0,:]] #Get signals from the reconstruction that match the colors                     
        mean_signal[ii,:] = mean(matched_signals[ii].clr_grped_signal,axis=0) 
        sem_signal[ii,:] = stats.sem(matched_signals[ii].clr_grped_signal,axis=0) 

    
    return maps, pts, pts_nonblack, clrs, clrs_nonblack, recon, unique_clrs, matched_pixels, matched_signals, mean_signal, sem_signal