Electrode compensation
The L^p electrode compensation method is implemented, along with a spike
detection method and a quality test (Rossant et al 2012).

brian.library.electrophysiology.Lp_compensate(I, Vraw, dt, slice_duration=1.0 * second, p=1.0, criterion=None, full=False, docompensation=True, **initial_params)
Perform the L^p electrode compensation technique on a recorded membrane
potential.
 I: injected current, 1D vector.
 Vraw: raw (uncompensated) voltage trace, 1D vector, same length as I.
 dt: sampling period (inverse of the sampling frequency), in second.
 slice_duration=1*second: duration of each time slice, where the fit is
performed independently
 p=1.0: parameter of the Lp error. p should be less than 2.
Experimenting with this parameter is recommended.
Use p~1 at first, especially with difficult recordings
Use p~0.5 with good recordings (less noise) or with biophysical model
simulations without noise.
 criterion: a custom error function used in the optimization. If None,
it is the Lp error. Otherwise, it should be a function of the form
“lambda raw, model: error”, where raw and model are the raw and linear
model membrane potential traces. For instance, the function for the
Lp error is: “lambda raw, model: sum(abs(rawmodel)**self.p)”.
It can also be a function of the form:
“lambda raw, model, electrode: error” in the case when one needs
the electrode response to compute the error.
 full=False: if False, return a tuple (compensated_trace, parameters)
where parameters is an array of the best parameters (one column/slice)
If True, return a dict with the following keys:
Vcompensated, Vneuron, Velectrode, params=params, instance
where instance in the ElectrodeCompensation object.
 docompensation=True: if False, does not perform the optimization and only
return an ElectrodeCompensation object instance, to take full control over
the optimization procedure.
 params: a list of initial parameters for the optimization, in the
following order: R, tau, Vr, Re, taue. Best results are obtained when
reasonable estimates of the parameters are given.

brian.library.electrophysiology.find_spikes(v, vc=None, dt=0.1 * msecond, refractory=5.0 * msecond, check_quality=False)
Find spikes in an intracellular trace.
 vc=None: separatrix (in volt). If None, a separatrix will be automatically
detected using the method described in the paper.
 dt=0.1*ms: timestep in the trace (inverse of the sampling frequency)
 refractory=5*ms: refractory period: minimal duration between two
successive spikes
 check_quality=False: if True, will check spike detection quality using
signal detection theory. The function then returns a tuple (spikes,scores)
where scores is a dict.

brian.library.electrophysiology.get_trace_quality(v, I, full=False)
Compute the quality of a compensated trace.
 v: a compensated intracellular trace
 I: injected current
 full=False: if True, return a dict with the following keys:
correlation, spikes, coefficients, after_onsets, peaks_prediction,
after_onsets, spike_before, spike_onset, spike_after