@@ -99,7 +99,8 @@ def _select(self, fts):
9999 peaks_to_low = np .all (self .lookup_sweep_feature ("ap_peak" ) < - 30 )
100100
101101 if not peaks_to_low :
102- idx = np .where (is_depol & has_spikes )[0 ][0 ]
102+ idx = np .where (is_depol & has_spikes )[0 ]
103+ idx = idx [0 ] if len (idx ) > 0 else np .array ([], dtype = int )
103104 else :
104105 idx = np .array ([], dtype = int )
105106 elif stimulus_type (self .data ) == "ramp" :
@@ -199,8 +200,9 @@ def _select(self, fts):
199200 num_spikes = self .lookup_sweep_feature ("num_ap" )
200201 wildness = self .lookup_sweep_feature ("wildness" )
201202 is_non_wild = np .isnan (wildness )
202- idx = pd .Series (num_spikes )[is_non_wild ].idxmax ()
203- idx = np .array ([], dtype = int ) if np .isnan (idx ) else idx
203+ num_non_wild_spikes = pd .Series (num_spikes )[is_non_wild ]
204+ no_spikes = np .all (np .isnan (num_non_wild_spikes ))
205+ idx = np .array ([], dtype = int ) if no_spikes else num_non_wild_spikes .idxmax ()
204206
205207 self ._update_diagnostics (
206208 {
@@ -459,31 +461,33 @@ def _compute(self, recompute=False, store_diagnostics=False):
459461 i = stim_amp [is_depol ]
460462
461463 has_spikes = ~ np .isnan (f )
462- # sometimes all depolarization traces spike
463- i_sub = (
464- 0 if all (has_spikes ) else i [~ has_spikes ][0 ]
465- ) # last stim < spike threshold
466- i_sup = i [has_spikes ][0 ] # first stim > spike threshold
464+ if np .any (has_spikes ):
465+ # sometimes all depolarization traces spike
466+ i_sub = (
467+ 0 if all (has_spikes ) else i [~ has_spikes ][0 ]
468+ ) # last stim < spike threshold
469+ i_sup = i [has_spikes ][0 ] # first stim > spike threshold
470+
471+ if not np .isnan (dfdi ):
472+ rheobase = float (ransac .predict (np .array ([[0 ]]))) / dfdi
473+
474+ if rheobase < i_sub or rheobase > i_sup :
475+ rheobase = i_sup
476+ else :
477+ rheobase = i_sup
478+ rheobase -= dc_offset
467479
468- if not np .isnan (dfdi ):
469- rheobase = float (ransac .predict (np .array ([[0 ]]))) / dfdi
480+ if store_diagnostics :
481+ self ._update_diagnostics (
482+ {
483+ "i_sub" : i_sub ,
484+ "i_sup" : i_sup ,
485+ "f_sup" : f [has_spikes ][0 ],
486+ "dfdi" : dfdi ,
487+ "dc_offset" : dc_offset ,
488+ }
489+ )
470490
471- if rheobase < i_sub or rheobase > i_sup :
472- rheobase = i_sup
473- else :
474- rheobase = i_sup
475- rheobase -= dc_offset
476-
477- if store_diagnostics :
478- self ._update_diagnostics (
479- {
480- "i_sub" : i_sub ,
481- "i_sup" : i_sup ,
482- "f_sup" : f [has_spikes ][0 ],
483- "dfdi" : dfdi ,
484- "dc_offset" : dc_offset ,
485- }
486- )
487491 if stimulus_type (self .data ) == "ramp" :
488492 has_ap = self .lookup_sweep_feature ("num_ap" , recompute = recompute ) > 0
489493 if np .any (has_ap ):
@@ -685,19 +689,22 @@ def _compute(self, recompute=False, store_diagnostics=False):
685689 slow_hyperpolarization = float ("nan" )
686690 if stimulus_type (self .data ) == "long_square" :
687691 has_aps = self .lookup_sweep_feature ("num_ap" , recompute = recompute ) > 0
688- v_baseline = self .lookup_sweep_feature ("v_baseline" , recompute = recompute )
689- v_baseline = v_baseline [has_aps ]
690-
691- slow_hyperpolarization = v_baseline .max () - v_baseline .min ()
692-
693- if store_diagnostics :
694- self ._update_diagnostics (
695- {
696- "v_baseline" : v_baseline ,
697- "v_baseline_max" : v_baseline .max (),
698- "v_baseline_min" : v_baseline .min (),
699- }
692+ if np .any (has_aps ):
693+ v_baseline = self .lookup_sweep_feature (
694+ "v_baseline" , recompute = recompute
700695 )
696+ v_baseline = v_baseline [has_aps ]
697+
698+ slow_hyperpolarization = v_baseline .max () - v_baseline .min ()
699+
700+ if store_diagnostics :
701+ self ._update_diagnostics (
702+ {
703+ "v_baseline" : v_baseline ,
704+ "v_baseline_max" : v_baseline .max (),
705+ "v_baseline_min" : v_baseline .min (),
706+ }
707+ )
701708 return slow_hyperpolarization
702709
703710 def _plot (self , ax : Optional [Axes ] = None , ** kwargs ) -> Axes :
@@ -730,26 +737,29 @@ def _compute(self, recompute=False, store_diagnostics=False):
730737 slow_hyperpolarization_slope = float ("nan" )
731738 if stimulus_type (self .data ) == "long_square" :
732739 has_aps = self .lookup_sweep_feature ("num_ap" , recompute = recompute ) > 0
733- v_baseline = self .lookup_sweep_feature ("v_baseline" , recompute = recompute )
734- v_baseline = v_baseline [has_aps ]
735-
736- v_baseline = v_baseline .reshape (- 1 , 1 )
737- sweep_idx = np .arange (len (v_baseline )).reshape (- 1 , 1 )
738-
739- if len (v_baseline ) >= 3 :
740- ransac .fit (sweep_idx , v_baseline )
741- slope = ransac .coef_ [0 , 0 ] * 1000
742- intercept = ransac .intercept_ [0 ]
743- slow_hyperpolarization_slope = slope
744-
745- if store_diagnostics :
746- self ._update_diagnostics (
747- {
748- "v_baseline" : v_baseline ,
749- "sweep_idx" : sweep_idx ,
750- "v_intercept" : intercept ,
751- }
740+ if np .any (has_aps ):
741+ v_baseline = self .lookup_sweep_feature (
742+ "v_baseline" , recompute = recompute
752743 )
744+ v_baseline = v_baseline [has_aps ]
745+
746+ v_baseline = v_baseline .reshape (- 1 , 1 )
747+ sweep_idx = np .arange (len (v_baseline )).reshape (- 1 , 1 )
748+
749+ if len (v_baseline ) >= 3 :
750+ ransac .fit (sweep_idx , v_baseline )
751+ slope = ransac .coef_ [0 , 0 ] * 1000
752+ intercept = ransac .intercept_ [0 ]
753+ slow_hyperpolarization_slope = slope
754+
755+ if store_diagnostics :
756+ self ._update_diagnostics (
757+ {
758+ "v_baseline" : v_baseline ,
759+ "sweep_idx" : sweep_idx ,
760+ "v_intercept" : intercept ,
761+ }
762+ )
753763 return slow_hyperpolarization_slope
754764
755765 def _plot (self , ax : Optional [Axes ] = None , ** kwargs ) -> Axes :
0 commit comments