


Multi-taper time-frequency coherence - two point processes given as times
process
Usage:
[C,phi,S12,S1,S2,t,f,zerosp,confC,phierr,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. Defaults to 0.
e.g. For N = 500, if PAD = 0, we pad the FFT
to 512 points; if PAD = 2, we pad the FFT
to 2048 points, etc.
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 where spikes in either channel were absent,zero otherwise)
confC (confidence level for C at 1-p %) - only for err(1)>=1
phierr (error bars 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,phierr,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,phierr,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. Defaults to 0. 0020 % e.g. For N = 500, if PAD = 0, we pad the FFT 0021 % to 512 points; if PAD = 2, we pad the FFT 0022 % to 2048 points, etc. 0023 % Fs (sampling frequency) - optional. Default 1. 0024 % fpass (frequency band to be used in the calculation in the form 0025 % [fmin fmax])- optional. 0026 % Default all frequencies between 0 and Fs/2 0027 % err (error calculation [1 p] - Theoretical error bars; [2 p] - Jackknife error bars 0028 % [0 p] or 0 - no error bars) - optional. Default 0. 0029 % trialave (average over trials when 1, don't average when 0) - optional. Default 0 0030 % fscorr (finite size corrections, 0 (don't use finite size corrections) or 1 (use finite size corrections) - optional 0031 % (available only for spikes). Defaults 0. 0032 % Output: 0033 % C (magnitude of coherency time x frequencies x trials for trialave=0; time x frequency for trialave=1) 0034 % phi (phase of coherency time x frequencies x trials for no trial averaging; time x frequency for trialave=1) 0035 % S12 (cross spectrum - time x frequencies x trials for no trial averaging; time x frequency for trialave=1) 0036 % S1 (spectrum 1 - time x frequencies x trials for no trial averaging; time x frequency for trialave=1) 0037 % S2 (spectrum 2 - time x frequencies x trials for no trial averaging; time x frequency for trialave=1) 0038 % t (time) 0039 % f (frequencies) 0040 % zerosp (1 for windows where spikes in either channel were absent,zero otherwise) 0041 % confC (confidence level for C at 1-p %) - only for err(1)>=1 0042 % phierr (error bars for phi) - only for err(1)>=1 0043 % Cerr (Jackknife error bars for C - use only for Jackknife - err(1)=2) 0044 0045 if nargin < 3; error('Need data1 and data2 and window parameters'); end; 0046 if nargin < 4; params=[]; end; 0047 [tapers,pad,Fs,fpass,err,trialave,params]=getparams(params); 0048 if nargin < 5 || isempty(fscorr); fscorr=0; end; 0049 0050 if nargout > 10 && err(1)~=2; 0051 error('Cerr computed only for Jackknife. Correct inputs and run again'); 0052 end; 0053 if nargout > 8 && err(1)==0; 0054 error('Errors computed only if err(1) is not equal to zero'); 0055 end; 0056 0057 [N1,C1,N2,C2]=check_consistency(data1,data2); 0058 [mintime1,maxtime1]=minmaxsptimes(data1); 0059 [mintime2,maxtime2]=minmaxsptimes(data2); 0060 mintime=min(mintime1,mintime2); 0061 maxtime=max(maxtime1,maxtime2); 0062 0063 tn=mintime+movingwin(1)/2:movingwin(2):maxtime-movingwin(1)/2; 0064 Nwin=round(Fs*movingwin(1)); % number of samples in window 0065 Nstep=round(movingwin(2)*Fs); % number of samples to step through 0066 nfft=2^(nextpow2(Nwin)+pad); 0067 [f,findx]=getfgrid(Fs,nfft,fpass); 0068 params.tapers=dpsschk(tapers,Nwin,Fs); % check tapers 0069 nw=length(tn); 0070 for n=1:nw; 0071 t=linspace(tn(n)-movingwin(1)/2,tn(n)+movingwin(1)/2,Nwin); 0072 datawin1=extractdatapt(data1,[t(1) t(end)]);datawin2=extractdatapt(data2,[t(1) t(end)]); 0073 if nargout==11; 0074 [c,ph,s12,s1,s2,f,zsp,confc,phie,cerr]=coherencypt(datawin1,datawin2,params,fscorr,t); 0075 confC=confc; 0076 phierr(1,n,:,:)=squeeze(phie(1,:,:)); 0077 phierr(2,n,:,:)=squeeze(phie(2,:,:)); 0078 Cerr(1,n,:,:)=squeeze(cerr(1,:,:)); 0079 Cerr(2,n,:,:)=squeeze(cerr(2,:,:)); 0080 elseif nargout==10; 0081 [c,ph,s12,s1,s2,f,zsp,confc,phie]=coherencypt(datawin1,datawin2,params,fscorr,t); 0082 confC=confc; 0083 phierr(1,n,:,:)=squeeze(phie(1,:,:)); 0084 phierr(2,n,:,:)=squeeze(phie(2,:,:)); 0085 else 0086 [c,ph,s12,s1,s2,f,zsp]=coherencycpt(datawin1,datawin2,params,fscorr,t); 0087 end; 0088 C(n,:,:)=c; 0089 phi(n,:,:)=ph; 0090 S12(n,:,:)=s12; 0091 S1(n,:,:)=s1; 0092 S2(n,:,:)=s2; 0093 zerosp(n,:)=zsp; 0094 end; 0095 t=tn; 0096 C=squeeze(C); phi=squeeze(phi);S12=squeeze(S12); S1=squeeze(S1); S2=squeeze(S2);zerosp=squeeze(zerosp); 0097 if nargout==11;Cerr=squeeze(Cerr);end; 0098 if nargout==10; phierr=squeeze(phierr);end