# evoked

## PURPOSE

Function to calculate the evoked response given continuous data in the

## SYNOPSIS

function [V,t,Err] = evoked(data,Fs,win,width,plt,err)

## DESCRIPTION

     Function to calculate the evoked response given continuous data in the
     form time x channels
     Usage [V,t,Err] = evoked(data,Fs,win,width,plt,err)

     Inputs
       Note that all times can be in arbitrary units. But the units have to be
       consistent. So, if win is in secs, width is in secs and Fs has to be Hz.
       If win is in samples, so is width and Fs=1.

        data(times, channels/trials or a single vector)      (required)
        Fs  sampling frequency            (required)
        win   subsection of data to be used. Default all available data
        width (s) of smoothing kernel. Default 50 samples
        plt plot 'n' for no plot, otherwise plot color. Default blue colored lines.
        err = 0/1. Default 1=calculate bootstrap errorbars.

     Outputs
        V = evoked potential
        t = times of evaluation
        Err = bootstrap statdard deviation

## CROSS-REFERENCE INFORMATION

This function calls:

- locsmooth Running line fit (using local linear regression) - 1d only, continuous
- change_row_to_column Helper routine to transform 1d arrays into column vectors that are needed

This function is called by:

## SOURCE CODE

    0001 function [V,t,Err] = evoked(data,Fs,win,width,plt,err)
    0002 % Function to calculate the evoked response given continuous data in the
    0003 % form time x channels
    0004 % Usage [V,t,Err] = evoked(data,Fs,win,width,plt,err)
    0005 %
    0006 % Inputs
    0007 %   Note that all times can be in arbitrary units. But the units have to be
    0008 %   consistent. So, if win is in secs, width is in secs and Fs has to be Hz.
    0009 %   If win is in samples, so is width and Fs=1.
    0010 %
    0011 %    data(times, channels/trials or a single vector)      (required)
    0012 %    Fs  sampling frequency            (required)
    0013 %    win   subsection of data to be used. Default all available data
    0014 %    width (s) of smoothing kernel. Default 50 samples
    0015 %    plt plot 'n' for no plot, otherwise plot color. Default blue colored lines.
    0016 %    err = 0/1. Default 1=calculate bootstrap errorbars.
    0017 %
    0018 % Outputs
    0019 %    V = evoked potential
    0020 %    t = times of evaluation
    0021 %    Err = bootstrap statdard deviation
    0022
    0023 if nargin < 2;error('Data, sampling frequency required');end
    0024 data=change_row_to_column(data);
    0025 N=size(data,1);
    0026 data=data';
    0027 if nargin <3; win = [0 (N-1)/Fs];end
    0028 if nargin <4; width = 50/Fs;end
    0029 if nargin <5; plt = 'b';end
    0030 if nargin <6;err = 1;end
    0031 T=win;
    0032 if isempty(T); T = [0 (N-1)/Fs];end
    0033 if isempty(width); width = 50/Fs;end
    0034 if isempty(plt); plt = 'b';end
    0035 if isempty(err);err = 1;end
    0036
    0037 t = min(T):1/Fs:max(T);
    0038 if nargin >= 5
    0039   indx = find(t>T(1) & t<T(2));
    0040   t = t(indx);
    0041   data = data(:,indx);
    0042 end
    0043
    0044 if width > (t(length(t))-t(1))/2
    0045   disp('Width is too large for data segment: should be in seconds')
    0046   disp('Turn off smoothing')
    0047   width = 0;
    0048 end
    0049
    0050 s = t(2)-t(1);
    0051 N = fix(width/s);
    0052 NT = length(data(:,1));
    0053
    0054 if NT > 1
    0055     mdata = mean(data);
    0056 else
    0057     mdata = data;
    0058 end
    0059 if N > 4
    0060   smdata = locsmooth(mdata,N,fix(N/2));
    0061 else
    0062   smdata = mdata;
    0063 end
    0064
    0065 % if errorbars requested then do a bootstrap over trials...
    0066
    0067 Err = 0;
    0068 if NT < 4;
    0069   disp('Too few trials: no errorbars calculated')
    0070   err = 0;
    0071 end
    0072
    0073 if err ~= 0 && NT > 1
    0074   Nboot = 10;
    0075   bevk = 0;
    0076   sevk = 0;
    0077   for b=1:Nboot
    0078     indx = floor(NT*rand(1,NT)) + 1;
    0079     evktmp = mean(data(indx,:));
    0080     if N > 4
    0081       evktmp = locsmooth(evktmp,N,fix(N/2));
    0082     end
    0083     bevk = bevk + evktmp;
    0084     sevk = sevk + evktmp.^2;
    0085   end
    0086   stdevk = sqrt((sevk/Nboot - bevk.^2/Nboot^2));
    0087   Err = stdevk;
    0088 end
    0089
    0090 V = smdata;
    0091 if plt ~= 'n'
    0092   plot(t,smdata,plt)
    0093   hold on
    0094   mn = mean(smdata);
    0095   ax = get(gca,'xlim');
    0096   line(ax,mn*[1 1],'color','k')
    0097   if err
    0098     line(ax,(mn+2*mean(stdevk))*[1 1],'color','r')
    0099     line(ax,(mn-2*mean(stdevk))*[1 1],'color','r')
    0100     hold off
    0101   end
    0102 end
    0103
    0104
    0105
    0106
    0107
    0108
    0109
    0110
    0111