function struct = dwt_dave (data, numcoefs, plot_on)


%len = 2^floor(log2(length(data)));
len=length(data);
data = data (1:len)';


% figure
if plot_on >=1
    figure(90);
    subplot(211), plot(data);title('Analyzed signal.'); 
end
%set(gca,'Xlim',[0 len])
% Perform discrete wavelet transform at level 5 by sym2. 
% Levels 1 to 5 correspond to scales 2, 4, 8, 16 and 32. 
[coefs,book_keeping] = wavedec(data,numcoefs,'db8');

% Expand(stretch) discrete wavelet coefficients for plot. 
% Levels 1 to 5 correspond to scales 2, 4, 8, 16 and 32. 
stretch_coefs = zeros(numcoefs,len); 
for k = 1:numcoefs 
    d = detcoef(coefs,book_keeping,k); 
    d = d(ones(1,2^k),:);
    d = d(:)';
    stretch_coefs(k,:) = wkeep(d,len,'c');      %i think this 'c' is correct
end


%Not sure the point of this code, however
%it appears to change all coefficients with a
%value less than squrt (eps) to zeros
% cfd = cfd(:); 
% I = find(abs(cfd)<sqrt(eps)); 
% cfd(I)=zeros(size(I)); 
% cfd = reshape(cfd,numcoefs,len);

% Plot discrete coefficients. 
if plot_on >=1
    subplot(212), colormap(gray(64)); 
    img = image(flipud(wcodemat(stretch_coefs,64,'row'))); 
    set(get(img,'parent'),'YtickLabel',[]); 
    title('Discrete Transform, absolute coefficients.') 
    ylabel('level (beginning at scale 2^1)')
    colorbar;
end

%Plot the unstretched wavelet coefficients
% figure
maxd = 0;
for k = 1:numcoefs
    len_log2 = log2(len);
    d = detcoef(coefs,book_keeping,k);
    
    % choosing fudge factors to get rid of edge effects
    if (len/2^k) > 15
        d = wkeep (d,round(len/2^k - 8),'c');
    elseif (len/2^k) > 7
        d = wkeep (d,round(len/2^k - 4),'c');
    else
        d = wkeep (d,round(len/2^k - 0),'c');
    end

    struct.dwt(k).coefs = d;
    struct.dwt(k).scale = 2^k;
    if plot_on >=2
        figure(91)
        subplot(numcoefs,1,numcoefs+1-k), colormap(pink(64));
        plot(d);
        if length(d) >= maxd
            maxd = length(d);
        end
        axis ([1 maxd min(d) max(d)]);
        ylabel(['Wv Scale ' int2str(2^k)]);
        legend (['mean=' num2str(mean(d)) ' & std=' num2str(std(d))]);
    end    
end

struct.rawdata = data;
struct.cwt = [];
struct.dwtmotherwavelet = [];