Skip to content

Commit

Permalink
Merge pull request #3 from CINPLA/mask_unvisited
Browse files Browse the repository at this point in the history
Mask unvisited
  • Loading branch information
tristanstoeber committed Mar 18, 2019
2 parents 8c8e11e + a55dd8c commit 6247b82
Show file tree
Hide file tree
Showing 13 changed files with 29 additions and 16 deletions.
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
}

setup(
name="spatialmaps",
name="spatial_maps",
install_requires=install_requires,
tests_require=install_requires,
extras_require=extras_require,
Expand Down
File renamed without changes.
4 changes: 4 additions & 0 deletions spatialmaps/fields.py → spatial_maps/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,15 @@ def find_peaks(image):
"""
Returns peaks sorted by distance from center of image.
"""
image = image.copy()
image[~np.isfinite(image)] = 0
image_max = filters.maximum_filter(image, 3)
is_maxima = (image == image_max)
labels, num_objects = ndimage.label(is_maxima)
indices = np.arange(1, num_objects+1)
peaks = ndimage.maximum_position(image, labels=labels, index=indices)
# if len(peaks) == 0:
# return None
peaks = np.array(peaks)
center = np.array(image.shape) / 2
distances = np.linalg.norm(peaks - center, axis=1)
Expand Down
7 changes: 4 additions & 3 deletions spatialmaps/gridcells.py → spatial_maps/gridcells.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import numpy as np
from spatialmaps.tools import autocorrelation, fftcorrelate2d, masked_corrcoef2d
from spatialmaps.fields import find_peaks
from spatial_maps.tools import autocorrelation, fftcorrelate2d, masked_corrcoef2d
from spatial_maps.fields import find_peaks


def separate_fields_from_distance(rate_map):
Expand Down Expand Up @@ -108,7 +108,8 @@ def gridness(rate_map, return_mask=False):
out : gridness
'''
import numpy.ma as ma

rate_map = rate_map.copy()
rate_map[~np.isfinite(rate_map)] = 0
acorr = autocorrelation(rate_map, mode='full', normalize=True)

acorr_maxima = find_peaks(acorr)
Expand Down
20 changes: 14 additions & 6 deletions spatialmaps/maps.py → spatial_maps/maps.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,23 +28,23 @@ def _adjust_bin_size(box_size, bin_size=None, bin_count=None):

def smooth_map(rate_map, bin_size, smoothing):
std_dev_pixels = smoothing / bin_size
rate_map = rate_map.copy() # do not modify the original!
rate_map[np.isnan(rate_map)] = 0.
kernel = Gaussian2DKernel(std_dev_pixels[0], std_dev_pixels[1])
return convolve_fft(rate_map, kernel)


def _occupancy_map(x, y, t, xbins, ybins):
t_ = np.append(t, t[-1] + np.median(np.diff(t)))
time_in_bin = np.diff(t_)
values, _, _ = np.histogram2d(y, x, bins=[xbins, ybins], weights=time_in_bin)
values, _, _ = np.histogram2d(
y, x, bins=[xbins, ybins], weights=time_in_bin)
return values


def _spike_map(x, y, t, spike_times, xbins, ybins):
t_ = np.append(t, t[-1] + np.median(np.diff(t)))
spikes_in_bin, _ = np.histogram(spike_times, t_)
values, _, _ = np.histogram2d(y, x, bins=[xbins, ybins], weights=spikes_in_bin)
values, _, _ = np.histogram2d(
y, x, bins=[xbins, ybins], weights=spikes_in_bin)
return values


Expand All @@ -56,6 +56,7 @@ def __init__(self, x, y, t, spike_times, box_size, bin_size, bin_count=None):

self.spike_pos = _spike_map(x, y, t, spike_times, xbins, ybins)
self.time_pos = _occupancy_map(x, y, t, xbins, ybins)
assert all(self.spike_pos[self.time_pos == 0] == 0)

self.bin_size = bin_size
self.box_size = box_size
Expand All @@ -72,5 +73,12 @@ def occupancy_map(self, smoothing):

return smooth_map(self.time_pos, self.bin_size, smoothing)

def rate_map(self, smoothing):
return self.spike_map(smoothing) / self.occupancy_map(smoothing)
def rate_map(self, smoothing, mask_zero_occupancy=False):
spike_map = self.spike_map(smoothing)
occupancy_map = self.occupancy_map(smoothing)
if mask_zero_occupancy:
# to avoid infinity (x/0) we set zero occupancy to nan
# this can be handy when analyzing low occupancy maps
occupancy_map[self.time_pos == 0] = np.nan
rate_map = spike_map / occupancy_map
return rate_map
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import pytest
import quantities as pq
from tools import make_test_grid_rate_map, make_test_border_map
from spatialmaps.fields import (
from spatial_maps.fields import (
separate_fields_from_laplace, find_peaks, calculate_field_centers,
border_score)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import numpy as np
import pytest
from spatialmaps import SpatialMap
from spatial_maps import SpatialMap
import quantities as pq
from tools import make_test_grid_rate_map, make_test_spike_map
from spatialmaps.gridcells import (
from spatial_maps.gridcells import (
gridness, spacing_and_orientation, separate_fields_from_distance)


Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import numpy as np
import pytest
from spatialmaps.maps import SpatialMap
from spatial_maps.maps import SpatialMap
import quantities as pq
from tools import make_test_grid_rate_map, make_test_spike_map

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import quantities as pq
import neo
from tools import random_walk
from spatialmaps.speed import speed_correlation
from spatial_maps.speed import speed_correlation
# TODO need a better test, where we can set the corr beforehand

def test_speed_random():
Expand Down
2 changes: 1 addition & 1 deletion spatialmaps/tests/tools.py → spatial_maps/tests/tools.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from spatialmaps.tools import gaussian2D
from spatial_maps.tools import gaussian2D
import quantities as pq
import numpy as np

Expand Down
File renamed without changes.

0 comments on commit 6247b82

Please sign in to comment.