NPMK/NEV Utilities/mergeNEV.m
function [NEV] = mergeNEV()

%% 
% Saves a new NEV file that contains event data from one NEV and spike data
% from another
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Use: mergeNEV()

%mergeNEV version = '1.0.0.0';

%Author: Nick Halper
%Contact: nhalper@blackrockmicro.com

%% 
% Choose file that contains event data


uiwait(msgbox('Choose the file containing event data (comments, digital inputs, etc) that you want to keep','Choose Event Data','modal'));
EventNEV = openNEV();

uiwait(msgbox('Choose the file containing sorted spike data that you want to keep','Choose Spike Data','modal'));
SpikeNEV = openNEV();




for i = 1:length(SpikeNEV.MetaTags.ChannelID)
    EventIndices = find(EventNEV.Data.Spikes.Electrode == SpikeNEV.MetaTags.ChannelID(i));
    SpikeDataIndices = find(SpikeNEV.Data.Spikes.Electrode == SpikeNEV.MetaTags.ChannelID(i));
    
    EventNEV.Data.Spikes.TimeStamp(EventIndices) = [];
    EventNEV.Data.Spikes.Electrode(EventIndices) = [];
    EventNEV.Data.Spikes.Unit(EventIndices) = [];
    EventNEV.Data.Spikes.Waveform(:,EventIndices) = [];
    
    
    
    disp('Length of Spike Indices:');
    disp(length(SpikeDataIndices));
    
    disp('Length of Event Indices:');
    disp(length(EventIndices));
    
    EventNEV.Data.Spikes.TimeStamp = [EventNEV.Data.Spikes.TimeStamp SpikeNEV.Data.Spikes.TimeStamp(SpikeDataIndices)];
    EventNEV.Data.Spikes.Electrode = [EventNEV.Data.Spikes.Electrode SpikeNEV.Data.Spikes.Electrode(SpikeDataIndices)];
    EventNEV.Data.Spikes.Unit = [EventNEV.Data.Spikes.Unit SpikeNEV.Data.Spikes.Unit(SpikeDataIndices)];
    EventNEV.Data.Spikes.Waveform = [EventNEV.Data.Spikes.Waveform SpikeNEV.Data.Spikes.Waveform(:,SpikeDataIndices)];
    
    [EventNEV.Data.Spikes.TimeStamp, ISort] = sort(EventNEV.Data.Spikes.TimeStamp);
    EventNEV.Data.Spikes.Electrode = EventNEV.Data.Spikes.Electrode(ISort);
    EventNEV.Data.Spikes.Unit = EventNEV.Data.Spikes.Unit(ISort);
    EventNEV.Data.Spikes.Waveform = EventNEV.Data.Spikes.Waveform(:,ISort);
    
end


SpikeNEV.MetaTags.ChannelID = EventNEV.MetaTags.ChannelID;
SpikeNEV.MetaTags.HeaderOffset = EventNEV.MetaTags.HeaderOffset;
EventNEV.MetaTags = SpikeNEV.MetaTags;


%EventNEV.Data.Spikes = SpikeNEV.Data.Spikes;

NEV = EventNEV;


uiwait(msgbox('Choose the save location for the new file','Choose Save Location','modal'));
[FileName,PathName] = uiputfile('.nev');


SavePath = fullfile(PathName,FileName);

saveNEV(NEV,fullfile(PathName,FileName));

end

