function profile_obj = getProfileAllSpikes(a_cip_trace)
% getProfileAllSpikes - Creates a cip_trace_allspikes_profile object by collecting test results of a cip_trace, analyzing each individual spike.
%
% Usage:
% profile_obj = getProfileAllSpikes(a_cip_trace)
%
% Parameters:
% a_cip_trace: A cip_trace object.
%
% Returns:
% profile_obj: A cip_trace_allspikes_profile object.
%
% Description:
% Analyzes the spontaneous (periodIniSpont), pulse (periodPulse) and the
% recovery (periodRecSpont) periods separately and produces spike shape
% distribution results. Rate and CIP measurements are added to these.
%
% See also: cip_trace, cip_trace_allspikes_profile
%
% $Id$
%
% Author: Cengiz Gunay <cgunay@emory.edu>, 2005/04/26
% Copyright (c) 2007 Cengiz Gunay <cengique@users.sf.net>.
% This work is licensed under the Academic Free License ("AFL")
% v. 3.0. To view a copy of this license, please look at the COPYING
% file distributed with this software or visit
% http://opensource.org/licenses/afl-3.0.php.
% Loop over spikes in each period
a_spikes = spikes(a_cip_trace);
% Analyze spikes
spont_period = periodIniSpont(a_cip_trace);
[spont_results spont_spikes spont_spikes_db ...
spont_spikes_stats_db spont_spikes_hists_dbs] = ...
analyzeSpikesInPeriod(a_cip_trace, a_spikes, spont_period, 'Spont');
pulse_period = periodPulse(a_cip_trace);
[pulse_results pulse_spikes pulse_spikes_db ...
pulse_spikes_stats_db pulse_spikes_hists_dbs] = ...
analyzeSpikesInPeriod(a_cip_trace, a_spikes, pulse_period, 'Pulse');
recov_period = periodRecSpont(a_cip_trace);
[recov_results recov_spikes recov_spikes_db ...
recov_spikes_stats_db recov_spikes_hists_dbs] = ...
analyzeSpikesInPeriod(a_cip_trace, a_spikes, ...
recov_period, 'Recov');
% TODO: rebuild the a_spikes object here, based on the spike dbs
new_spikes = [intoPeriod(spont_spikes, spont_period); ...
intoPeriod(pulse_spikes, pulse_period); ...
intoPeriod(recov_spikes, recov_period)];
% Misc measures
misc_results.PulseSpontAmpRatio = ...
pulse_results.PulseSpikeAmplitudeMean / spont_results.SpontSpikeAmplitudeMean;
% All measures together
results_obj = ...
results_profile(mergeStructs(getResults(a_cip_trace, new_spikes), ...
spont_results, pulse_results, recov_results, ...
misc_results), get(a_cip_trace, 'id'));
% Create a new object with the spike dbs
profile_obj = cip_trace_allspikes_profile(a_cip_trace, new_spikes, spont_spikes_db, ...
pulse_spikes_db, recov_spikes_db, ...
results_obj, get(a_cip_trace, 'props'));