Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Explanation of ops #264

Open
GoktugAlkan opened this issue May 10, 2023 · 0 comments
Open

Explanation of ops #264

GoktugAlkan opened this issue May 10, 2023 · 0 comments

Comments

@GoktugAlkan
Copy link

Hello,

I am currently using kilosort for sorting spikes in a UTAH array recording. The code already gives good results when using the default parameters. However, I would like to know if there is a more descriptive explanation of the parameters that the sorting algorithm uses. Particularly, I am a bit struggling in understanding the role of the following parameters:

ops.criterionNoiseChannels = 1;                                 % fraction of "noise" templates allowed to span all channel groups (see createChannelMapFile for more info).
% ops.chanMap = 1:ops.Nchan; % treated as linear probe if a chanMap file

% other options for controlling the model and optimization
ops.Nrank               = 3;        % matrix rank of spike template model (3)
ops.nfullpasses         = 6;        % number of complete passes through data during optimization (6)
ops.maxFR               = 20000;    % maximum number of spikes to extract per batch (20000)
ops.fshigh              = 250;      % frequency for high pass filtering
ops.fslow               = 7500;     % frequency for low pass filtering (optional)
ops.ntbuff              = 64;       % samples of symmetrical buffer for whitening and spike detection
ops.scaleproc           = 200;      % int16 scaling of whitened data

ops.NT                  = 32*1024+ ops.ntbuff; % for GPU should be multiple of 32 + ntbuff

% the following options can improve/deteriorate results.
% when multiple values are provided for an option, the first two are beginning and ending anneal values,
% the third is the value used in the final pass.
ops.Th               = [4 10 10];    % threshold for detecting spikes on template-filtered data ([6 12 12])
ops.lam              = [5 20 20];
ops.nannealpasses    = 4;               % should be less than nfullpasses (4)
ops.momentum         = 1./[20 400];     % start with high momentum and anneal (1./[20 1000])
ops.shuffle_clusters = 1;               % allow merges and splits during optimization (1)
ops.mergeT           = .1;              % upper threshold for merging (.1)
ops.splitT           = .1;              % lower threshold for splitting (.1)

% options for initializing spikes from data
ops.initialize      = 'no';     %'fromData' or 'no'
ops.spkTh           = -4;       % spike threshold in standard deviations (4)
ops.loc_range       = [3  1];   % ranges to detect peaks; plus/minus in time and channel ([3 1])
ops.long_range      = [30  6];  % ranges to detect isolated peaks ([30 6])
ops.maskMaxChannels = 5;        % how many channels to mask up/down ([5])
ops.crit            = .65;      % upper criterion for discarding spike repeates (0.65)
ops.nFiltMax        = 10000;    % maximum "unique" spikes to consider (10000)

Note that the comments next to the parameters are the comments that have already been there when I installed kilosort. It would be very helpful if there was a description of the algorithm where one can directly see the incorporation of these parameters.

If I understood all parameters better, I could improve the settings with respect to the characteristics of our recording.

Many thanks in advance!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant