I would like to create a new variable, cells_high_MI, that corresponds to the cellspikes index of the cells that have a high MISpikeTotal value. Here is my code for the MISpikeTotal calculation (towards the bottom of the code):
for i = 1:n_cells spikes = cellspikes{i}; % access cellspikes
spikes = spikes./1000; % ms to secs
spikes = spikes(spikes>startTime&spikes<stopTime); edgesT = linspace(startTime,stopTime,numel(trackingtimes)+1); binnedSpikes = histcounts(spikes,edgesT);% sorts spikes into bins
% also bin headangle data
n_bins_angle = 60; edgesHD = linspace(min(headangle), max(headangle), n_bins_angle +1); [occupancy,~,angle_inds] = histcounts(headangle,edgesHD); for iBin = 1:n_bins_angle spikesPerAngle(iBin) = sum(binnedSpikes(angle_inds == iBin)); end SPA(1,i)={spikesPerAngle}; % compute average firing rate for each HD angle
firing_rate = spikesPerAngle./(occupancy.*deltaT); %this vector is a TUNING CURVE!
FR(1,i) = {firing_rate}; % now compute individual pieces needed to compute mutual info
probability_density = occupancy./sum(occupancy); %proportion of time spent at each HD angle per total occupancy at all angles
PD(1,i)={probability_density}; % compute average firing rate across all HD angles
mean_rate = numel(spikes)./(stopTime-startTime); MR(1,i) = mean_rate; % compute mutual info between firing rate and HD
mutualInfo = sum(firing_rate .* log2(firing_rate./mean_rate) .* probability_density,'omitnan'); MIperspike = mutualInfo./(mean_rate); %store mutual info for each cell into a matrix
mutualInfoTotal(1,i) = mutualInfo; %in bits per second
MISpikeTotal(1,i) = MIperspike; idx = mutualInfoTotal >= 5; highMI_sec = mutualInfoTotal(idx);end
So, I have those values of highMI_sec that contain the mutual information values for the cells with MI values of at least 5. But what I actually want are the index numbers of the cells with at least MI values of 5, because I want to use these index numbers in the following calculations:
j=1; for c=1:n_cells spikes = cellspikes{c}; spikes = spikes(spikes > startTime & spikes < stopTime); if length(spikes) >= 1000 edgesT = linspace(startTime,stopTime,numel(trackingtimes)+1); binnedSpikes = histcounts(spikes,edgesT); binnedSpikes = smoothdata(binnedSpikes,2,'gaussian',50); pcaBinnedSpikes(j,:) = zscore(binnedSpikes); j = j+1; endend
So I would like to use only the cellspikes that correspond to cells with an MI of at least 5 by using the indexes of the values in mutualInfoTotal.
Thanks! 🙂
Best Answer