12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- function [allTimestamps allSnippets allIndices] = findEventTimes(NEV, Channel, Units)
- % Given a NEV file, an channel number, and a unit number this function
- % will return indices corresponding to those spikes, timestamps
- % corresponding to those spikes (optional), and snippets corresponding to
- % those spikes (optional).
- %
- % Use [timestamps snippets indices] = findEventTimes(NEV, Channel, Unit)
- %
- % INPUTS
- %
- % NEV: This corresponds to the NEV file the desired data is
- % being extracted from.
- %
- % Channel: The channel number the data is being extracted for.
- %
- % Units: The unit numbers the data is being extracted for. This
- % variable can be one unit or many units passed as an array
- % of integers.
- % DEFAULY: If units is not specified all timestamps from
- % all units will be passed to the calling function. For
- % noise pass 255.
- %
- % OUTPUT
- %
- % indices: An array of all indices that correspond to neural data
- % for channel and unit passed.
- %
- % timestamps: An array of all timestamps that correspond to neural data
- % for channel and unit passed.
- %
- % snippets: A matrix of all indices that correspond to neural data
- % for channel and unit passed.
- %
- % IF OUTPUT IS NOT SPECIFIED only "timestamps" WILL BE PASSED TO THE
- % CALLING FUNCTION.
- %
- % Example:
- %
- % [timestamps snippets indices] = findEventTimes(NEV, 3, [1,3:5]);
- %
- % In the example above, the indices, timestamps, and snippets for
- % channel #3 and units 1, 3, 4, and 5 will be passed to the calling
- % function.
- %
- % Kian Torab
- % ktorab@blackrockmicro.com
- % Blackrock Microsystems
- % Salt Lake City, UT
- % Version 2.0.0
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- if ~exist('Units', 'var')
- Units = 0:5;
- end
- if ischar(Channel) && exist('Units', 'var')
- strcmpi(Channel, 'DigitalIn')
- allSnippets = find(NEV.Data.SerialDigitalIO.UnparsedData == Units);
- allTimestamps = NEV.Data.SerialDigitalIO.TimeStamp(allSnippets);
- allIndices = [];
- else
- % Find indices that correspond to "Channel"
- ChannelIndices = find([NEV.Data.Spikes.Electrode] == Channel);
- for i = 1:length(Units)
- % Find indices that correspond to "Units" within "Channel" indices
- UnitIndices{i} = find([NEV.Data.Spikes.Unit(ChannelIndices)] == Units(i));
- % Updating the indices so they correspond to the original NEV indices
- indices{i} = ChannelIndices(UnitIndices{i});
- % Finding the timestamps corresponding to the indices
- timestamps{i} = NEV.Data.Spikes.TimeStamp(indices{i});
- % Finding the snippets corresponding to the indices
- if isfield(NEV.Data.Spikes, 'Waveform')
- snippets{i} = NEV.Data.Spikes.Waveform(:,indices{i});
- elseif nargout == 3 && i == 1
- display('Snippet data was not retrieved because the NEV does not contain any snippets.');
- snippets{i} = [];
- end
- end
- allIndices = cell2mat(indices);
- allTimestamps = double(cell2mat(timestamps));
- if exist('snippets', 'var')
- allSnippets = cell2mat(snippets);
- end
- end
|