Mercurial > hg > map
annotate utilities/UTIL_CV.m @ 38:c2204b18f4a2 tip
End nov big change
author | Ray Meddis <rmeddis@essex.ac.uk> |
---|---|
date | Mon, 28 Nov 2011 13:34:28 +0000 |
parents | f233164f4c86 |
children |
rev | line source |
---|---|
rmeddis@0 | 1 function [cv, cvTimes, allTimeStamps, allISIs]= UTIL_CV(earObject, dt, timeStep) |
rmeddis@0 | 2 % UTIL_CV computes coefficient of variation for multiple spike trains |
rmeddis@0 | 3 % earObject must be logical 0/1. Each row is a separate run |
rmeddis@0 | 4 % CV is computed for successive time regions specified by timeStep |
rmeddis@0 | 5 |
rmeddis@0 | 6 if ~islogical(earObject),error('UTIL_CV: input is not logical/ spikes'), end |
rmeddis@0 | 7 |
rmeddis@0 | 8 [rows cols]=size(earObject); |
rmeddis@0 | 9 totalDuration=cols*dt; |
rmeddis@0 | 10 |
rmeddis@0 | 11 if nargin<3, timeStep=totalDuration/5; end |
rmeddis@0 | 12 |
rmeddis@0 | 13 % identify all intervals |
rmeddis@0 | 14 allISIs=[]; allTimeStamps=[]; |
rmeddis@0 | 15 for i=1:rows |
rmeddis@0 | 16 temp=find(earObject(i,:))*dt; % find spikes |
rmeddis@0 | 17 isi{i}=diff(temp); % find ISIs |
rmeddis@0 | 18 timeStamps{i}=temp(2:end); % time of isi is time of second spike |
rmeddis@0 | 19 allISIs=[allISIs isi{i}]; |
rmeddis@0 | 20 allTimeStamps=[allTimeStamps timeStamps{i}]; |
rmeddis@0 | 21 end |
rmeddis@0 | 22 |
rmeddis@0 | 23 count=0; |
rmeddis@0 | 24 cvTimes=0: timeStep:totalDuration-timeStep; % bin edges |
rmeddis@0 | 25 for t= cvTimes |
rmeddis@0 | 26 % sort ISIs according to when they happened |
rmeddis@0 | 27 idx=find(allTimeStamps>t & allTimeStamps<=t+timeStep); |
rmeddis@0 | 28 count=count+1; |
rmeddis@0 | 29 if ~isempty(allISIs(idx)) |
rmeddis@0 | 30 cv(count)=std(allISIs(idx))/mean(allISIs(idx)); |
rmeddis@0 | 31 else |
rmeddis@0 | 32 cv(count)=0; |
rmeddis@0 | 33 end |
rmeddis@0 | 34 end |
rmeddis@0 | 35 |