


Multi-taper time-frequency coherence - two point processes given as times
process
Usage:
[C,phi,S12,S1,S2,t,f,zerosp,confC,phistd,Cerr]=cohgrampt(data1,data2,movingwin,params,fscorr)
Input:
Note units have to be consistent. Thus, if movingwin is in seconds, Fs
has to be in Hz. see chronux.m for more information.
data1 (structure array of spike times with dimension trials; also accepts 1d array of spike times) -- required
data2 (structure array of spike times with dimension trials; also accepts 1d array of spike times) -- required
movingwin (in the form [window winstep] -- required
params: structure with fields tapers, pad, Fs, fpass, err, trialave
- optional
tapers (precalculated tapers from dpss, or in the form [NW K] e.g [3 5]) -- optional. If not
specified, use [NW K]=[3 5]
pad (padding factor for the FFT) - optional (can take values -1,0,1,2...).
-1 corresponds to no padding, 0 corresponds to padding
to the next highest power of 2 etc.
e.g. For N = 500, if PAD = -1, we do not pad; if PAD = 0, we pad the FFT
to 512 points, if pad=1, we pad to 1024 points etc.
Defaults to 0.
Fs (sampling frequency) - optional. Default 1.
fpass (frequency band to be used in the calculation in the form
[fmin fmax])- optional.
Default all frequencies between 0 and Fs/2
err (error calculation [1 p] - Theoretical error bars; [2 p] - Jackknife error bars
[0 p] or 0 - no error bars) - optional. Default 0.
trialave (average over trials when 1, don't average when 0) - optional. Default 0
fscorr (finite size corrections, 0 (don't use finite size corrections) or 1 (use finite size corrections) - optional
(available only for spikes). Defaults 0.
Output:
C (magnitude of coherency time x frequencies x trials for trialave=0; time x frequency for trialave=1)
phi (phase of coherency time x frequencies x trials for no trial averaging; time x frequency for trialave=1)
S12 (cross spectrum - time x frequencies x trials for no trial averaging; time x frequency for trialave=1)
S1 (spectrum 1 - time x frequencies x trials for no trial averaging; time x frequency for trialave=1)
S2 (spectrum 2 - time x frequencies x trials for no trial averaging; time x frequency for trialave=1)
t (time)
f (frequencies)
zerosp (1 for windows and trials where spikes were absent (in either channel),zero otherwise)
confC (confidence level for C at 1-p %) - only for err(1)>=1
phistd - theoretical/jackknife (depending on err(1)=1/err(1)=2) standard deviation for phi - Note that
phi + 2 phistd and phi - 2 phistd will give 95% confidence
bands for phi - only for err(1)>=1
Cerr (Jackknife error bars for C - use only for Jackknife - err(1)=2)

0001 function [C,phi,S12,S1,S2,t,f,zerosp,confC,phistd,Cerr]=cohgrampt(data1,data2,movingwin,params,fscorr) 0002 % Multi-taper time-frequency coherence - two point processes given as times 0003 % process 0004 % 0005 % Usage: 0006 % 0007 % [C,phi,S12,S1,S2,t,f,zerosp,confC,phistd,Cerr]=cohgrampt(data1,data2,movingwin,params,fscorr) 0008 % Input: 0009 % Note units have to be consistent. Thus, if movingwin is in seconds, Fs 0010 % has to be in Hz. see chronux.m for more information. 0011 % 0012 % data1 (structure array of spike times with dimension trials; also accepts 1d array of spike times) -- required 0013 % data2 (structure array of spike times with dimension trials; also accepts 1d array of spike times) -- required 0014 % movingwin (in the form [window winstep] -- required 0015 % params: structure with fields tapers, pad, Fs, fpass, err, trialave 0016 % - optional 0017 % tapers (precalculated tapers from dpss, or in the form [NW K] e.g [3 5]) -- optional. If not 0018 % specified, use [NW K]=[3 5] 0019 % pad (padding factor for the FFT) - optional (can take values -1,0,1,2...). 0020 % -1 corresponds to no padding, 0 corresponds to padding 0021 % to the next highest power of 2 etc. 0022 % e.g. For N = 500, if PAD = -1, we do not pad; if PAD = 0, we pad the FFT 0023 % to 512 points, if pad=1, we pad to 1024 points etc. 0024 % Defaults to 0. 0025 % Fs (sampling frequency) - optional. Default 1. 0026 % fpass (frequency band to be used in the calculation in the form 0027 % [fmin fmax])- optional. 0028 % Default all frequencies between 0 and Fs/2 0029 % err (error calculation [1 p] - Theoretical error bars; [2 p] - Jackknife error bars 0030 % [0 p] or 0 - no error bars) - optional. Default 0. 0031 % trialave (average over trials when 1, don't average when 0) - optional. Default 0 0032 % fscorr (finite size corrections, 0 (don't use finite size corrections) or 1 (use finite size corrections) - optional 0033 % (available only for spikes). Defaults 0. 0034 % Output: 0035 % C (magnitude of coherency time x frequencies x trials for trialave=0; time x frequency for trialave=1) 0036 % phi (phase of coherency time x frequencies x trials for no trial averaging; time x frequency for trialave=1) 0037 % S12 (cross spectrum - time x frequencies x trials for no trial averaging; time x frequency for trialave=1) 0038 % S1 (spectrum 1 - time x frequencies x trials for no trial averaging; time x frequency for trialave=1) 0039 % S2 (spectrum 2 - time x frequencies x trials for no trial averaging; time x frequency for trialave=1) 0040 % t (time) 0041 % f (frequencies) 0042 % zerosp (1 for windows and trials where spikes were absent (in either channel),zero otherwise) 0043 % confC (confidence level for C at 1-p %) - only for err(1)>=1 0044 % phistd - theoretical/jackknife (depending on err(1)=1/err(1)=2) standard deviation for phi - Note that 0045 % phi + 2 phistd and phi - 2 phistd will give 95% confidence 0046 % bands for phi - only for err(1)>=1 0047 % Cerr (Jackknife error bars for C - use only for Jackknife - err(1)=2) 0048 0049 if nargin < 3; error('Need data1 and data2 and window parameters'); end; 0050 if nargin < 4; params=[]; end; 0051 [tapers,pad,Fs,fpass,err,trialave,params]=getparams(params); 0052 if nargin < 5 || isempty(fscorr); fscorr=0; end; 0053 0054 if nargout > 10 && err(1)~=2; 0055 error('Cerr computed only for Jackknife. Correct inputs and run again'); 0056 end; 0057 if nargout > 8 && err(1)==0; 0058 error('Errors computed only if err(1) is not equal to zero'); 0059 end; 0060 0061 [N,Ch]=check_consistency(data1,data2); 0062 [mintime1,maxtime1]=minmaxsptimes(data1); 0063 [mintime2,maxtime2]=minmaxsptimes(data2); 0064 mintime=min(mintime1,mintime2); 0065 maxtime=max(maxtime1,maxtime2); 0066 0067 tn=mintime+movingwin(1)/2:movingwin(2):maxtime-movingwin(1)/2; 0068 Nwin=round(Fs*movingwin(1)); % number of samples in window 0069 % Nstep=round(movingwin(2)*Fs); % number of samples to step through 0070 nfft=max(2^(nextpow2(Nwin)+pad),Nwin); 0071 f=getfgrid(Fs,nfft,fpass); Nf=length(f); 0072 params.tapers=dpsschk(tapers,Nwin,Fs); % check tapers 0073 nw=length(tn); 0074 if trialave; 0075 C=zeros(nw,Nf); 0076 S12=zeros(nw,Nf); 0077 S1=zeros(nw,Nf); 0078 S2=zeros(nw,Nf); 0079 phi=zeros(nw,Nf); 0080 Cerr=zeros(2,nw,Nf); 0081 % phierr=zeros(2,nw,Nf); 0082 phistd=zeros(nw,Nf); 0083 else 0084 C=zeros(nw,Nf,Ch); 0085 S12=zeros(nw,Nf,Ch); 0086 S1=zeros(nw,Nf,Ch); 0087 S2=zeros(nw,Nf,Ch); 0088 phi=zeros(nw,Nf,Ch); 0089 Cerr=zeros(2,nw,Nf,Ch); 0090 % phierr=zeros(2,nw,Nf,Ch); 0091 phistd=zeros(nw,Nf,Ch); 0092 end; 0093 zerosp=zeros(nw,Ch); 0094 0095 for n=1:nw; 0096 t=linspace(tn(n)-movingwin(1)/2,tn(n)+movingwin(1)/2,Nwin); 0097 datawin1=extractdatapt(data1,[t(1) t(end)]);datawin2=extractdatapt(data2,[t(1) t(end)]); 0098 if nargout==11; 0099 [c,ph,s12,s1,s2,f,zsp,confc,phie,cerr]=coherencypt(datawin1,datawin2,params,fscorr,t); 0100 % phierr(1,n,:,:)=squeeze(phie(1,:,:)); 0101 % phierr(2,n,:,:)=squeeze(phie(2,:,:)); 0102 phistd(n,:,:)=phie; 0103 Cerr(1,n,:,:)=squeeze(cerr(1,:,:)); 0104 Cerr(2,n,:,:)=squeeze(cerr(2,:,:)); 0105 elseif nargout==10; 0106 [c,ph,s12,s1,s2,f,zsp,confc,phie]=coherencypt(datawin1,datawin2,params,fscorr,t); 0107 % phierr(1,n,:,:)=squeeze(phie(1,:,:)); 0108 % phierr(2,n,:,:)=squeeze(phie(2,:,:)); 0109 phistd(n,:,:)=phie; 0110 else 0111 [c,ph,s12,s1,s2,f,zsp]=coherencypt(datawin1,datawin2,params,fscorr,t); 0112 end; 0113 C(n,:,:)=c; 0114 phi(n,:,:)=ph; 0115 S12(n,:,:)=s12; 0116 S1(n,:,:)=s1; 0117 S2(n,:,:)=s2; 0118 zerosp(n,:)=zsp; 0119 end; 0120 t=tn; 0121 C=squeeze(C); phi=squeeze(phi);S12=squeeze(S12); S1=squeeze(S1); S2=squeeze(S2);zerosp=squeeze(zerosp); 0122 if nargout > 9; confC=confc; end; 0123 if nargout==11;Cerr=squeeze(Cerr);end; 0124 % if nargout==10; phierr=squeeze(phierr);end 0125 if nargout==10; phistd=squeeze(phistd);end