File MIES_AnalysisFunctions_MultiPatchSeq_SpikeControl.ipf

SC Spike Control analysis function for multi patch sequence

Functions

static std::tuple<variable, variable> SC_GetTrials(string device, variable sweepNo, variable headstage)

Store the newly calculated rerun trials in the labnotebook and return the minimum and maximum of it.

static wave SC_GetHeadstageQCForSetCount(string device, variable sweepNo)

Return a 2D wave with the headstage QC result as a function of the set sweep count.

This function does return the result for all active headstages. The headstage argument is needed for fetching all sweeps from the current SCI.

Value:

  • Cumulated headstage QC result

Rows:

  • Headstage

Cols:

  • Stimulus set sweep count

static variable SC_GetSetSweepCount(wave numericalValues, variable sweepNo)

Return the stimulus set sweep count for the given sweep.

static variable SC_GetSetPassed(string device, variable sweepNo)

Return pass/fail state of the set.

This is true iff we have for very stimulus set sweep count a passing headstage

static variable SC_GetSweepPassed(string device, variable sweepNo)

Return pass/fail state of the sweep.

This is true iff we have for the current stimulus set sweep count a passing headstage

static wave SC_FilterPulses(WaveRefWave propertiesWaves, WaveOrNull indizesAll, WaveOrNull indizesSweep)

Given a list of pulses by their indizes, this function return only the diagonal ones which are matching the given sweep.

static variable SC_AddPulseRegionLBNEntries(WaveText inputLBN, variable pulseIndex, variable region, variable headstage, WaveOrNull data = defaultValue)

Add a new PX_PY:.. entry in to the wave inputLBN

The value part after the : is only present if data is passed in

static std::tuple<WAVE, WaveRefWave> SC_GetPulseAveragePropertiesWaves(string device)

Return the PA plot waves from the databrowser connected to the given device.

static wave SC_GetPulseIndizes(wave properties, WaveRefWave propertiesWaves, variable sweepNo)

Return the diagonal pulses for the given sweep.

static std::tuple<WaveText, WaveText> SC_GetSpikeNumbersAndPositions(string device, variable sweepNo)

Return the spike numbers and positions in waves prepared for labnotebook writing.

static variable SC_ProcessPulses(string device, variable sweepNo, variable minimumSpikePosition, variable idealNumberOfSpikes)

Fetch the pulses from the PA plot and write the results into the labnotebooks.

static string SC_SpikeCountStateToString(variable countState)

Convert a numeric spike counts state to its string.

Returns “” for unknown state variables

static variable SC_SpikeCountsCalcDetail(variable minimum, variable maximum, variable idealNumberOfSpikes)

Determine the spike counts state.

  • Minimum[HS] == Maximum[HS] == idealNumberOfSpikes -> Pass

  • idealNumberOfSpikes >= Maximum[HS] -> Too few

  • idealNumberOfSpikes <= Mininum[HS] -> Too many

  • If nothing else matched -> Mixed

We assume:

  • minimum < maximum

  • idealNumberOfSpikes >= 1

  • All numbers are integers

static wave SC_SpikeCountsCalc(string device, wave minimum, wave maximum, variable idealNumberOfSpikes)

Determine the spike counts state for all headstages.

static wave SC_SpikeCountsQC(string device, WaveText spikeNumbersLBN, variable idealNumberOfSpikes)

Check that the we have found the expected number of spikes per pulse.

Returns:

Spike counts state according to SpikeCountsStateConstants stringified

static variable SC_SpikePositionsCalcDetail(wave spikePositions, variable minimumSpikePosition)

Calculate the QC state of a list of spike positions from one pulse.

All are in Pulse active coordinate system

Parameters:
  • spikePositions – spike position

  • minimumSpikePosition – minimum allowed spike position

static wave SC_SpikePositionQC(string device, WaveTextOrNull spikePositionsLBN, variable minimumSpikePosition)

Calculate the QC state of the spike positions of each pulse.

All values are in PA crd, see SC_SpikeControl().

Parameters:
  • device – device

  • spikePositionsLBN – spike position of each pulse, ordered per headstage, for the current sweep

  • minimumSpikePosition – minimum allowed spike position

static wave SC_RegionBlanked(wave data, variable totalOnsetDelay, WaveText oodDAQRegion)

Replace all points inside an oodDAQ region with NaN in the data wave.

static wave SC_SpontaneousSpikingCheckQC(string device, variable sweepNo)

Return a wave ready for the labnotebook with the spontaneous spike check QC entries.

static wave SC_HeadstageQC(string device, WaveText spikeCountStateLBN, wave spontaneousSpikingCheckLBN)

Determine the headstage QC result.

static variable SC_DetermineQCState(string device, variable sweepNo, wave spikeNumbersLBN, WaveOrNull spikePositionsLBN, variable minimumSpikePosition, variable idealNumberOfSpikes)

Determine and write the QC states to the labnotebook.

static variable SC_CanStillSkip(variable maxTrials, string params)

Check if we can still skip sweeps without running more than maxTrials

static variable SC_SkipsExhausted(variable minTrials, string params)

Check if we have exhausted the available trials on all headstages.

static variable SC_ReactToQCFailures(string device, variable sweepNo, string params)

Perform various actions on QC failures.

string SC_SpikeControl_GetParams()
string SC_SpikeControl_GetHelp(string name)
string SC_SpikeControl_CheckParam(string name, CheckParametersStruct *s)
variable SC_SpikeControl(string device, AnalysisFunction_V3 *s)

Analysis function to check sweeps for failed pulses and rerun them if the pulses failed.

Decision logic flowchart:

For judging the quality of the spike positions we have introduced a new coordinate system which we call pulse active coordinate system (PA crd).

Consider the following pulse on the DA wave and the response spike in the AD wave

///
///        +---------+
///        |         |
///        |         |
///        |         |
///        |         |
///        |         |
///        |         |
/// -------+         +----------------------
///
///                   X
///                  XXX
///                 X   XX
///                X      XX
///               X         X
///              X           X
///             X             X
///            X               X
///           X                X
///          X                  X
///         X                   X
/// -------X                    X--------
///
///
and the let pulse active start at 5ms and end at 15ms. We define the start as 0 and the end as 100.
Therefore the spike position will be 110 in `PA crd` which is one point after the end of the pulse.

The graphs were made with http://asciiflow.com.

Variables

static const string SC_PULSE_PREFIX_RE = "^[^:]+:"

Pulse information in the labnotebook is stored as PX_RY:.... This regular expression can be used to match the prefix in order to remove it with RemovePrefix.