Skip to content

Commit 49dbcc6

Browse files
authored
Merge pull request #3737 from alejoe91/multicomparison-agreement-option
Propagate `agreemennt_method` to `compare_multiple_sorters`
2 parents 253efc0 + fe3cc19 commit 49dbcc6

3 files changed

Lines changed: 21 additions & 2 deletions

File tree

src/spikeinterface/comparison/basecomparison.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,9 +283,10 @@ class MixinSpikeTrainComparison:
283283
* n_jobs
284284
"""
285285

286-
def __init__(self, delta_time=0.4, n_jobs=-1):
286+
def __init__(self, delta_time=0.4, agreement_method="count", n_jobs=-1):
287287
self.delta_time = delta_time
288288
self.n_jobs = n_jobs
289+
self.agreement_method = agreement_method
289290
self.sampling_frequency = None
290291
self.delta_frames = None
291292

src/spikeinterface/comparison/multicomparisons.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ class MultiSortingComparison(BaseMultiComparison, MixinSpikeTrainComparison):
3535
Minimum agreement score to match units
3636
chance_score : float, default: 0.1
3737
Minimum agreement score to for a possible match
38+
agreement_method : "count" | "distance", default: "count"
39+
The method to compute agreement scores. The "count" method computes agreement scores from spike counts.
40+
The "distance" method computes agreement scores from spike time distance functions.
3841
n_jobs : int, default: -1
3942
Number of cores to use in parallel. Uses all available if -1
4043
spiketrain_mode : "union" | "intersection", default: "union"
@@ -60,6 +63,7 @@ def __init__(
6063
delta_time=0.4, # sampling_frequency=None,
6164
match_score=0.5,
6265
chance_score=0.1,
66+
agreement_method="count",
6367
n_jobs=-1,
6468
spiketrain_mode="union",
6569
verbose=False,
@@ -75,7 +79,9 @@ def __init__(
7579
chance_score=chance_score,
7680
verbose=verbose,
7781
)
78-
MixinSpikeTrainComparison.__init__(self, delta_time=delta_time, n_jobs=n_jobs)
82+
MixinSpikeTrainComparison.__init__(
83+
self, delta_time=delta_time, agreement_method=agreement_method, n_jobs=n_jobs
84+
)
7985
self.set_frames_and_frequency(self.object_list)
8086
self._spiketrain_mode = spiketrain_mode
8187
self._spiketrains = None
@@ -93,6 +99,8 @@ def _compare_ij(self, i, j):
9399
sorting2_name=self.name_list[j],
94100
delta_time=self.delta_time,
95101
match_score=self.match_score,
102+
chance_score=self.chance_score,
103+
agreement_method=self.agreement_method,
96104
n_jobs=self.n_jobs,
97105
verbose=False,
98106
)

src/spikeinterface/comparison/tests/test_multisortingcomparison.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,15 @@ def test_compare_multiple_sorters(setup_module):
4141
)
4242
msc = compare_multiple_sorters([sorting1, sorting2, sorting3], verbose=True)
4343
msc_shuffle = compare_multiple_sorters([sorting3, sorting1, sorting2])
44+
msc_dist = compare_multiple_sorters([sorting3, sorting1, sorting2], agreement_method="distance")
4445

4546
agr = msc._do_agreement_matrix()
4647
agr_shuffle = msc_shuffle._do_agreement_matrix()
48+
agr_dist = msc_dist._do_agreement_matrix()
4749

4850
print(agr)
4951
print(agr_shuffle)
52+
print(agr_dist)
5053

5154
assert len(msc.get_agreement_sorting(minimum_agreement_count=3).get_unit_ids()) == 3
5255
assert len(msc.get_agreement_sorting(minimum_agreement_count=2).get_unit_ids()) == 5
@@ -57,7 +60,14 @@ def test_compare_multiple_sorters(setup_module):
5760
assert len(msc.get_agreement_sorting(minimum_agreement_count=2).get_unit_ids()) == len(
5861
msc_shuffle.get_agreement_sorting(minimum_agreement_count=2).get_unit_ids()
5962
)
63+
assert len(msc.get_agreement_sorting(minimum_agreement_count=3).get_unit_ids()) == len(
64+
msc_dist.get_agreement_sorting(minimum_agreement_count=3).get_unit_ids()
65+
)
66+
assert len(msc.get_agreement_sorting(minimum_agreement_count=2).get_unit_ids()) == len(
67+
msc_dist.get_agreement_sorting(minimum_agreement_count=2).get_unit_ids()
68+
)
6069
assert len(msc.get_agreement_sorting().get_unit_ids()) == len(msc_shuffle.get_agreement_sorting().get_unit_ids())
70+
assert len(msc.get_agreement_sorting().get_unit_ids()) == len(msc_dist.get_agreement_sorting().get_unit_ids())
6171
agreement_2 = msc.get_agreement_sorting(minimum_agreement_count=2, minimum_agreement_count_only=True)
6272
assert np.all([agreement_2.get_unit_property(u, "agreement_number")] == 2 for u in agreement_2.get_unit_ids())
6373

0 commit comments

Comments
 (0)