123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- function [dN,t]=binspikes(data,Fs,t)
- % bin spikes at a specified frequency sampling i.e. sampling rate 1/sampling
- % eg: 1ms accuracy use sampling = 1000
- % Usage: [dN,t]=binspikes(data,Fs,t)
- % Inputs:
- % data (data as a structure array of spike times; or as a single
- % vector of spike times)
- % Fs (binning frequency)
- % t (the minimum and maximum times to be used to form the bins - [mint maxt]
- % - optional. Default use the spike times themselves to
- % determine the location of the bins.
- % Note: the times in data can be in any units. However, it is important
- % that all units are chosen consistently. So, if spike times are in secs,
- % Fs and t (if present) have to be in Hz and secs respectively. If spike
- % times are in number of samples, Fs has to be 1, and t has to be in number
- % of samples.
- % Outputs:
- % dN (output binned spike counts as a matrix defined on bins starting with the
- % earliest spike across all channels and ending with the latest spike)
- % t (lower limit of each bin)
- if nargin < 2; error('Need at least two input arguments'); end;
- dt=1/Fs;
- dtmp='';
- if isstruct(data);
- C=length(data);
- fnames=fieldnames(data);
- if nargin <3 || isempty(t);
- mintime=zeros(1,C);
- maxtime=zeros(1,C);
- for ch=1:C
- eval(['dtmp=data(ch).' fnames{1} ';'])
- mintime(ch)=min(dtmp);
- maxtime(ch)=max(dtmp);
- end
- mintime=min(mintime);
- maxtime=max(maxtime);
- else
- % maxtimech=zeros(1,C);
- % for ch=1:C
- % eval(['dtmp=data(ch).' fnames{1} ';'])
- % % mintimech(ch)=min(dtmp);
- % maxtimech(ch)=max(dtmp);
- % end
- mintime=t(1);
- maxtime=t(end);
- % mintimech=min(mintimech);
- % maxtimech=max(maxtimech);
- % if maxtimech > max(t); t=[t maxtimech+dt]; end;
- end
- t=linspace(mintime,maxtime,1+(maxtime-mintime)/dt);
- for ch=1:C;
- eval(['dtmp=data(ch).' fnames{1} ';'])
- x=histc(dtmp,t);
- dN(:,ch)=x(:);
- end
- else
- dtmp=data;
- if nargin < 3;
- mintime=min(dtmp);
- maxtime=max(dtmp);
- else
- mintime=t(1);
- maxtime=t(end);
- end
- t=linspace(mintime,maxtime,1+(maxtime-mintime)/dt);
- if max(dtmp)>max(t); t=[t maxtime+dt]; end;
- x=histc(dtmp,t);
- dN=x(:);
- end
|