From 283dcb3b94e0b2e2e9274765a57befcc0ffea085 Mon Sep 17 00:00:00 2001 From: Joseph Lizier Date: Fri, 28 Mar 2025 18:09:28 +1100 Subject: [PATCH] Adding a field to the object returned from local TE for spike trains which holds the ISI to previous (selected) source spike --- .../TransferEntropyCalculatorSpikingIntegration.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/java/source/infodynamics/measures/spiking/integration/TransferEntropyCalculatorSpikingIntegration.java b/java/source/infodynamics/measures/spiking/integration/TransferEntropyCalculatorSpikingIntegration.java index 088296f..a37ac64 100644 --- a/java/source/infodynamics/measures/spiking/integration/TransferEntropyCalculatorSpikingIntegration.java +++ b/java/source/infodynamics/measures/spiking/integration/TransferEntropyCalculatorSpikingIntegration.java @@ -103,6 +103,9 @@ public class TransferEntropyCalculatorSpikingIntegration implements TransferEntr protected KdTree kdTreeConditioningAtSpikes = null; protected KdTree kdTreeConditioningAtSamples = null; + // Cache these to return with the local values: + protected double[] timeToPreviousRelevantSourceSpikes; + 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 + // Embeddings from target spikes: double[][] arrayedTargetEmbeddingsFromSpikes = new double[conditioningEmbeddingsFromSpikes.size()][numDestPastIntervals + numCondPastIntervals]; double[][] arrayedJointEmbeddingsFromSpikes = new double[conditioningEmbeddingsFromSpikes.size()][numDestPastIntervals + numCondPastIntervals + numSourcePastIntervals]; @@ -424,6 +428,9 @@ public class TransferEntropyCalculatorSpikingIntegration implements TransferEntr arrayedTargetEmbeddingsFromSpikes[i] = conditioningEmbeddingsFromSpikes.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[][] arrayedJointEmbeddingsFromSamples = new double[conditioningEmbeddingsFromSamples.size()][numDestPastIntervals + numCondPastIntervals + numSourcePastIntervals]; @@ -966,9 +973,14 @@ public class TransferEntropyCalculatorSpikingIntegration implements TransferEntr // Data structure to return local values from this estimator public class SpikingTELocalValues implements SpikingLocalInformationValues { public double[] contributionsAtEachSpike; + public double[] timeToMostRecentSourceSpike; public SpikingTELocalValues(double[] 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); } }