Adding a field to the object returned from local TE for spike trains which holds the ISI to previous (selected) source spike

This commit is contained in:
Joseph Lizier 2025-03-28 18:09:28 +11:00
parent cab3de8b07
commit 283dcb3b94
1 changed files with 12 additions and 0 deletions

View File

@ -103,6 +103,9 @@ public class TransferEntropyCalculatorSpikingIntegration implements TransferEntr
protected KdTree kdTreeConditioningAtSpikes = null; protected KdTree kdTreeConditioningAtSpikes = null;
protected KdTree kdTreeConditioningAtSamples = null; protected KdTree kdTreeConditioningAtSamples = null;
// Cache these to return with the local values:
protected double[] timeToPreviousRelevantSourceSpikes;
public static final String KNNS_PROP_NAME = "Knns"; public static final String KNNS_PROP_NAME = "Knns";
/** /**
@ -417,6 +420,7 @@ public class TransferEntropyCalculatorSpikingIntegration implements TransferEntr
// Convert the vectors to arrays so that they can be put in the trees // Convert the vectors to arrays so that they can be put in the trees
// Embeddings from target spikes:
double[][] arrayedTargetEmbeddingsFromSpikes = new double[conditioningEmbeddingsFromSpikes.size()][numDestPastIntervals + numCondPastIntervals]; double[][] arrayedTargetEmbeddingsFromSpikes = new double[conditioningEmbeddingsFromSpikes.size()][numDestPastIntervals + numCondPastIntervals];
double[][] arrayedJointEmbeddingsFromSpikes = new double[conditioningEmbeddingsFromSpikes.size()][numDestPastIntervals + double[][] arrayedJointEmbeddingsFromSpikes = new double[conditioningEmbeddingsFromSpikes.size()][numDestPastIntervals +
numCondPastIntervals + numSourcePastIntervals]; numCondPastIntervals + numSourcePastIntervals];
@ -424,6 +428,9 @@ public class TransferEntropyCalculatorSpikingIntegration implements TransferEntr
arrayedTargetEmbeddingsFromSpikes[i] = conditioningEmbeddingsFromSpikes.elementAt(i); arrayedTargetEmbeddingsFromSpikes[i] = conditioningEmbeddingsFromSpikes.elementAt(i);
arrayedJointEmbeddingsFromSpikes[i] = jointEmbeddingsFromSpikes.elementAt(i); arrayedJointEmbeddingsFromSpikes[i] = jointEmbeddingsFromSpikes.elementAt(i);
} }
// Store locally the lag times from most recent relevant source spike for each target spike, for later return with locals:
timeToPreviousRelevantSourceSpikes = MatrixUtils.selectColumn(arrayedJointEmbeddingsFromSpikes, numDestPastIntervals + numCondPastIntervals);
// Sample points:
double[][] arrayedTargetEmbeddingsFromSamples = new double[conditioningEmbeddingsFromSamples.size()][numDestPastIntervals + numCondPastIntervals]; double[][] arrayedTargetEmbeddingsFromSamples = new double[conditioningEmbeddingsFromSamples.size()][numDestPastIntervals + numCondPastIntervals];
double[][] arrayedJointEmbeddingsFromSamples = new double[conditioningEmbeddingsFromSamples.size()][numDestPastIntervals + double[][] arrayedJointEmbeddingsFromSamples = new double[conditioningEmbeddingsFromSamples.size()][numDestPastIntervals +
numCondPastIntervals + numSourcePastIntervals]; numCondPastIntervals + numSourcePastIntervals];
@ -966,9 +973,14 @@ public class TransferEntropyCalculatorSpikingIntegration implements TransferEntr
// Data structure to return local values from this estimator // Data structure to return local values from this estimator
public class SpikingTELocalValues implements SpikingLocalInformationValues { public class SpikingTELocalValues implements SpikingLocalInformationValues {
public double[] contributionsAtEachSpike; public double[] contributionsAtEachSpike;
public double[] timeToMostRecentSourceSpike;
public SpikingTELocalValues(double[] contributionsAtEachSpike) { public SpikingTELocalValues(double[] contributionsAtEachSpike) {
this.contributionsAtEachSpike = contributionsAtEachSpike; this.contributionsAtEachSpike = contributionsAtEachSpike;
int numTargetSpikesToSkip = MatrixUtils.max(destPastIntervals);
this.timeToMostRecentSourceSpike = new double[numTargetSpikesToSkip + timeToPreviousRelevantSourceSpikes.length];
System.arraycopy(timeToPreviousRelevantSourceSpikes, 0, this.timeToMostRecentSourceSpike, numTargetSpikesToSkip,
timeToPreviousRelevantSourceSpikes.length);
} }
} }