@@ -245,6 +245,12 @@ def connect_to_neuron_group(self, neuron_group: NeuronGroup, **kwparams):
245245 # spike sorters don't sort by multi-channel recall; we only do this
246246 # for computational efficiency, to not get super distant neurons
247247
248+ # needed even if no neurons are recorded
249+ if not self ._prev_t :
250+ self ._prev_t = self .probe .sim .network .t
251+ if self ._mu_eap is None :
252+ self ._mu_eap = np .zeros ((0 , self .n_channels ))
253+
248254 n2keep = np .sum (where_to_keep )
249255 if n2keep == 0 :
250256 warnings .warn (
@@ -271,14 +277,8 @@ def connect_to_neuron_group(self, neuron_group: NeuronGroup, **kwparams):
271277 assert len (self .i_ng_by_i_probe ) == i_probe_start
272278 self .i_ng_by_i_probe .extend (list (zip ([neuron_group ] * n2keep , i2keep )))
273279
274- if not self ._prev_t :
275- self ._prev_t = self .probe .sim .network .t
276-
277280 # store neuron-channel mean and stdev of EAPs to use in subclasses
278- if self ._mu_eap is None :
279- self ._mu_eap = snr [where_to_keep ]
280- else :
281- self ._mu_eap = np .concatenate ((self ._mu_eap , snr [where_to_keep ]), axis = 0 )
281+ self ._mu_eap = np .concatenate ((self ._mu_eap , snr [where_to_keep ]), axis = 0 )
282282
283283 return snr [where_to_keep ].max (axis = 1 ), new_i_probe
284284
@@ -642,7 +642,11 @@ def sorted_units_snr(self) -> Float[np.ndarray, "{self.n_sorted}"]:
642642 return self ._mu_eap [self ._i_probe_by_i_sorted ]
643643
644644 def connect_to_neuron_group (self , neuron_group , ** kwparams ):
645- snr , i_probe = super ().connect_to_neuron_group (neuron_group , ** kwparams )
645+ connect_result = super ().connect_to_neuron_group (neuron_group , ** kwparams )
646+ if connect_result is None :
647+ # No neurons with high-enough multi-channel recall to record
648+ return
649+ snr , i_probe = connect_result
646650 n_recorded_ng = len (snr )
647651 # filter by SNR (measured on peak channel)
648652 above_cutoff = snr >= self .snr_cutoff
0 commit comments